Early Doors
A Hub for San Diego's Football Supporters
Early Doors is a web application designed to bridge the gap between San Diego's passionate football supporters and the local establishments that broadcast the games. As the city's soccer culture flourishes with the arrival of SDFC, this platform provides a vital service: 'Find your tribe and enjoy watching your club's games with the same passion and support.' The application features an interactive map for users to discover watch party venues and a comprehensive admin dashboard for managing all underlying data, including venues, clubs, supporter groups, and events.
Problem & Purpose
The excitement around San Diego's football scene is at an all-time high. However, this growth has created a fragmented landscape for fans. As a supporter myself (member of Penya Blaugrana San Diego), I experienced firsthand the difficulty of finding official and unofficial watch parties for various clubs. Information is often scattered across social media, group chats, and disparate websites, making it a challenge for fans to find a place to watch a match with fellow supporters.
The primary goal of Early Doors was to create a single source of truth for the local football community. I aimed to develop a robust, user-friendly platform that would:
- Allow users to easily search for pubs and bars hosting games for their favorite teams.
- Provide a seamless experience through Google OAuth and traditional authentication.
- Build a powerful admin dashboard with full CRUD (Create, Read, Update, Delete) functionality to manage the platform's data.
- Demonstrate a strong command of a modern front-end stack, full-stack development principles, and foundational skills like API construction, database management, and state management.
Development Process
A structured and professional workflow was essential to the project's success.
- Design & Prototyping: The process began in Figma, where I designed wireframes and high-fidelity mockups for the landing page, the map interface, and the admin dashboard. This design-first approach included creating database schema diagrams and planning the API structure, which ensured a clear vision before writing a single line of code.
- Version Control: The project was managed using Git, following the GitFlow branching model. Features and pages were developed on separate branches, ensuring the main branch remained stable and deployable. Each feature was integrated through a formal Pull Request (PR) process.
- Task Management: Project tasks and feature development were meticulously tracked using a Kanban board in Notion, allowing for clear prioritization and progress monitoring from conception to completion.
Technical Challenge & Solution
The most significant technical challenge was implementing the multi-faceted search and filtering logic while ensuring optimal application performance. The goal was to allow users to find venues not just by name, but also by associated football clubs and supporter groups. Navigating this challenge deepened my understanding of data optimization, the importance of efficient state management, and the performance trade-offs between client-side and server-side data manipulation.
- State Management with Zustand: I implemented Zustand for centralized state management. Its minimalistic API and hook-based approach helped in handling the global state of filters and search results efficiently without causing unnecessary component re-renders.
- Optimized Data Fetching: I refactored my data retrieval logic to be more precise. Instead of fetching broad datasets and filtering on the client-side, I optimized the Prisma queries to perform the complex filtering and joining operations directly within the database. This significantly reduced the payload size and the processing load on the client.
- Memoization: I strategically used React's memoization hooks (useMemo, useCallback) to prevent re-computation of expensive functions and re-rendering of components that did not have their props changed.
Lessons Learned & Future Scope
- Reflection: This project was a tremendous learning experience. I gained a much deeper understanding of system design, the nuances of state management with Zustand, and the critical importance of data optimization. A key takeaway was the value of focusing on reaching a Minimum Viable Product (MVP) first, rather than getting sidetracked by adding features mid-development. I also learned to break down complex problems into smaller, more manageable tasks, which ultimately accelerated the development cycle. Had I prioritized optimizing my data retrieval strategies earlier, it would have saved considerable time.
- Future Scope: The foundation is set for several exciting future enhancements. I envision integrating with social media APIs to automatically pull event data from supporter groups' feeds. Another ambitious feature would be to build an in-app community where fans can communicate, RSVP to events, and reserve space at venues, further solidifying Early Doors as the ultimate tool for San Diego's football community.
Tech Stack & Architecture
Category | Technologies |
---|---|
Framework | Next.js 14 (App Router) |
Language | TypeScript |
Styling | Tailwind CSS, Shadcn/UI |
State Mngmt | Zustand |
Form Mngmt | React Hook Form with Zod |
Database/Backend | Supabase (PostgreSQL), Prisma |
CMS (Blog) | Sanity.io |
APIs & Services | Google Maps, Distance Matrix, OAuth |
Data Viz (Admin) | Recharts |
Deployment | Vercel, GitHub |
Key Features
- - Users can search for football clubs from the homepage, which redirects them to an interactive Google Map displaying all relevant venues.
- - The map allows for dynamic filtering by club or venue name and provides a seamless discovery experience.
- - Each venue on the map has a detailed information card displaying its address, website, and a list of affiliated clubs.
- - Leveraging the Google Distance Matrix API, the card shows the real-time distance and estimated travel time from the user's location (with their permission).
- - A secure, login-protected dashboard serves as the control center for the application.
- - Admins have full CRUD capabilities to manage venues, football clubs, supporter groups, and events. The dashboard also features data visualization tools like a calendar (React Big Calendar) and metric charts (Recharts) to track platform activity.
- - To further engage the community and improve SEO, a blog was built using Sanity as a headless CMS.
- - This allows for easy creation and management of articles and news related to the San Diego soccer scene.