<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Edgarmp06</title>
    <description>The latest articles on DEV Community by Edgarmp06 (@edgarmp06_22cc3652867ca25).</description>
    <link>https://dev.to/edgarmp06_22cc3652867ca25</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3557847%2F84da744b-b201-41ff-9411-98f1c3d7f7fb.jpg</url>
      <title>DEV Community: Edgarmp06</title>
      <link>https://dev.to/edgarmp06_22cc3652867ca25</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/edgarmp06_22cc3652867ca25"/>
    <language>en</language>
    <item>
      <title>Building My First Real-Time Web App: Basketball Team Management with Firebase 🏀</title>
      <dc:creator>Edgarmp06</dc:creator>
      <pubDate>Fri, 10 Oct 2025 15:51:00 +0000</pubDate>
      <link>https://dev.to/edgarmp06_22cc3652867ca25/building-my-first-real-time-web-app-basketball-team-management-with-firebase-3b81</link>
      <guid>https://dev.to/edgarmp06_22cc3652867ca25/building-my-first-real-time-web-app-basketball-team-management-with-firebase-3b81</guid>
      <description>&lt;p&gt;I'm a 2nd year web development student and just shipped my first project with real users. Here's what I learned building a real-time basketball team management app.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem 🤔
&lt;/h2&gt;

&lt;p&gt;I used to record and edit full game videos for my brother's youth basketball team. The results?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Less than 15 views per video&lt;/li&gt;
&lt;li&gt;One parent complained about camera angles&lt;/li&gt;
&lt;li&gt;3 days of work for ~10% engagement&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Parents didn't want videos. They just needed:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;When/where are the games?&lt;/li&gt;
&lt;li&gt;What's the score?&lt;/li&gt;
&lt;li&gt;Simple and fast.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Solution 💡
&lt;/h2&gt;

&lt;p&gt;Built a web app with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Match calendar (dates, times, locations)&lt;/li&gt;
&lt;li&gt;Google Maps integration&lt;/li&gt;
&lt;li&gt;Real-time score updates&lt;/li&gt;
&lt;li&gt;Admin panel to manage everything&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Tech Stack 🛠️
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Firebase Firestore&lt;/strong&gt; - Real-time database&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Used &lt;code&gt;onSnapshot()&lt;/code&gt; for instant sync across devices&lt;/li&gt;
&lt;li&gt;Perfect for live score updates&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Firebase Authentication&lt;/strong&gt; - Secure admin access&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Email/password authentication&lt;/li&gt;
&lt;li&gt;Firestore Security Rules protecting the database&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Vanilla JavaScript ES6+&lt;/strong&gt; - No frameworks&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Wanted to master fundamentals before React/Vue&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;async/await&lt;/code&gt;, ES6 modules, DOM manipulation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Tailwind CSS&lt;/strong&gt; - Styling&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Utility-first approach&lt;/li&gt;
&lt;li&gt;Responsive design (84% mobile traffic!)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Vercel&lt;/strong&gt; - Deployment&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Automatic deployments from GitHub&lt;/li&gt;
&lt;li&gt;Built-in analytics&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Features 🎯
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Match Calendar
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;List of upcoming games&lt;/li&gt;
&lt;li&gt;Date, time, rival team&lt;/li&gt;
&lt;li&gt;Google Maps link to venue&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. Real-Time Scores
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Live updates during games&lt;/li&gt;
&lt;li&gt;Syncs instantly across all devices&lt;/li&gt;
&lt;li&gt;Uses Firebase &lt;code&gt;onSnapshot()&lt;/code&gt; listener&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. Admin Panel
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Add/edit/delete matches&lt;/li&gt;
&lt;li&gt;Update scores live from mobile&lt;/li&gt;
&lt;li&gt;Secured with Firebase Auth&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4. Responsive Design
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Mobile-first (84% mobile users)&lt;/li&gt;
&lt;li&gt;Works on any device&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Biggest Challenge 😅
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The Problem:&lt;/strong&gt;&lt;br&gt;
Input fields kept losing focus when typing. Every keystroke triggered a full re-render.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it happened:&lt;/strong&gt;&lt;br&gt;
My &lt;code&gt;handleInputChange()&lt;/code&gt; function called &lt;code&gt;renderizar()&lt;/code&gt; on EVERY change, destroying and recreating the entire DOM.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Solution:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;javascript&lt;br&gt;
function handleInputChange(name, value) {&lt;br&gt;
    formData[name] = value;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// Only re-render when necessary
if (name === 'rival' || name === 'ubicacion') {
    renderizar();  // These change the UI structure
}
// Date/time/scores: just update formData, don't re-render
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;}&lt;/p&gt;

&lt;p&gt;Now text inputs work smoothly without losing focus!&lt;/p&gt;

&lt;h2&gt;
  
  
  Real Results 📊
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;First 48 hours:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;31 unique visitors (from ~10 families)&lt;/li&gt;
&lt;li&gt;66 page views&lt;/li&gt;
&lt;li&gt;60% engagement (vs 10% with videos!)&lt;/li&gt;
&lt;li&gt;Parents thanking me publicly in the group chat&lt;/li&gt;
&lt;li&gt;Coach: "Muchas gracias Edgar!!"&lt;/li&gt;
&lt;li&gt;Friend: "Did you make this in class??" 😂&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;The best part:&lt;/strong&gt; &lt;br&gt;
A parent who previously complained about my videos reacted positively to the web app. That felt amazing.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's Next 🚀
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;October 17th&lt;/strong&gt; - First live game test&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I'll update scores from my phone at the court&lt;/li&gt;
&lt;li&gt;Testing real-world performance&lt;/li&gt;
&lt;li&gt;Expecting 60-100 visitors that day&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Future improvements:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Team roster section&lt;/li&gt;
&lt;li&gt;Statistics integration&lt;/li&gt;
&lt;li&gt;Match photos gallery&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What I Learned 💭
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Real users ≠ Tutorial users&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;They don't care about fancy features&lt;/li&gt;
&lt;li&gt;They want simple, fast, useful&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Mobile-first is CRITICAL&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;84% of traffic was mobile&lt;/li&gt;
&lt;li&gt;Test on your phone constantly&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Real-time feels magical&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Firebase &lt;code&gt;onSnapshot()&lt;/code&gt; is incredible&lt;/li&gt;
&lt;li&gt;Updates sync across devices instantly&lt;/li&gt;
&lt;li&gt;No polling, no websockets config needed&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Security matters&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Started with basic password hashing&lt;/li&gt;
&lt;li&gt;Upgraded to Firebase Auth when going public&lt;/li&gt;
&lt;li&gt;Firestore Security Rules are essential&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Simple beats complex&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;3 days editing videos → 10% engagement&lt;/li&gt;
&lt;li&gt;2.5 days building web app → 60% engagement&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Live Demo 🔗
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Web:&lt;/strong&gt; &lt;a href="https://cbc-manises.vercel.app" rel="noopener noreferrer"&gt;cbc-manises.vercel.app&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;(GitHub coming soon - cleaning up the code!)&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Questions? 💬
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Thinking of trying React next - any tips for the transition from vanilla JS?&lt;/li&gt;
&lt;li&gt;How would you improve the architecture?&lt;/li&gt;
&lt;li&gt;Any security concerns I should address?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Thanks for reading! This is my first post here and my first real project. Any feedback appreciated! 🙏🏀&lt;/p&gt;

</description>
      <category>firebase</category>
      <category>javascript</category>
      <category>showdev</category>
      <category>beginners</category>
    </item>
  </channel>
</rss>
