SELECTED PARTNERSHIP
CD Estepona Fans
A multi-platform product for the CD Estepona supporters' community: a public website, a native iOS app and an internal matchday system that brings live match events to fans as they happen.
Independent supporters' project. Not affiliated with CD Estepona and not an official club service.
Overview
CD Estepona Fans is an independent product for supporters of CD Estepona, a Spanish football club competing in Segunda RFEF. What began in 2025 as a news website has grown into a digital ecosystem: a trilingual web platform, a native iOS app published on the App Store, a native Android app in closed testing, and an internal Matchday Control Center where operators record every match event live.
My Role
I own the product end to end: product direction, UX, architecture, backend, web, iOS and Android development, releases and day-to-day operation. It is an independent supporters' initiative rather than a commission from the club, which made it a genuine exercise in product ownership: every decision, from the data model to the App Store release, was mine to make and to maintain.
The Challenge
Supporters of lower-league clubs rarely get the digital experience that fans of top-flight teams take for granted. The goal was to give them one place for news, fixtures, standings, squad information and, above all, live match coverage, while keeping the operating cost proportionate to an independent project.
That meant solving real product problems: match data that has to be right the first time because it triggers push notifications, corrections that must never alert fans twice, a live experience that runs on serverless infrastructure, and several platforms that have to tell exactly the same story in three languages.
The Ecosystem
Each surface has a clear job, and all of them share one backend and one versioned API contract.
Live
Website
Trilingual Next.js platform for news, fixtures, standings, squads, galleries and fan games.
Live on the App Store
iOS App
Native SwiftUI app with a live Match Centre, topic-based push alerts, Home Screen widgets and Live Activities.
In closed testing
Android App
Native Kotlin and Jetpack Compose app built to feature parity with iOS. Not yet publicly available.
Internal
Matchday Control Center
Operator console where a dedicated matchday operator records goals, cards, substitutions and lineups during each game.
Internal
Content Admin
Editorial CMS for news, galleries, squads and fixtures, with automated translation of articles.
Architecture
A single Next.js and TypeScript backend serves the website, the content admin, the Matchday Control Center and a versioned mobile API consumed by both native apps. PostgreSQL with Prisma holds the domain model, push notifications are delivered through APNs and Firebase Cloud Messaging, and iOS Live Activities are updated remotely from the server. The architecture deliberately favours a small number of well-understood moving parts that one engineer can operate reliably.
Technical Highlights
Platform Capabilities
Key Engineering Decisions
Live data from a Matchday Control Center
Live match data does not come from a third-party feed. A dedicated operator assigned to each match records every goal, card, substitution and lineup in an internal console. Minutes are derived from a server-side match clock instead of being typed, each operator can only act on the matches assigned to them, and every action is written to an audit log.
One pipeline for every data source
Operator actions are replayed through the same ingestion pipeline built for external data providers. Recording, correcting or cancelling an event becomes an insert, an update or a retraction on a single canonical timeline, and the score is always recomputed from that timeline rather than edited by hand.
Notifications that fire exactly once
Alerts are queued with a unique deduplication key and dispatched after the operator's request completes, so a slow push service never blocks the console. Historical corrections are applied idempotently and silently, without notifying fans a second time.
Real time without real-time infrastructure
Instead of maintaining socket servers, the apps poll a live endpoint whose cadence the server sets by match state: every 10 seconds during play and far less often otherwise. Every request is a conditional ETag request, so unchanged data costs a header exchange instead of a payload.
Present on the Lock Screen
On iOS, Live Activities and Home Screen widgets keep the score visible without opening the app, with the Live Activity updated remotely from the server as events are recorded.
Native on both platforms, one contract
SwiftUI on iOS and Kotlin with Jetpack Compose on Android, built against the same versioned API, notification topics and translation catalogue, with automated test suites on the web platform and in both apps.
The Experience
The website and the app present the same matches, news and squad in the form each context needs: rich browsing and search visibility on the web, instant alerts and glanceable live scores on the phone.





iOS images are the app's published App Store screenshots (Spanish listing). The website image was captured from production in October 2026.
Results
The website is live in three languages, with an editorial archive of 366 published articles, and the iOS app was published on the App Store in October 2026. In the latest 30-day snapshot, the platform recorded more than 3,000 visits from over 1,300 users and showed organic visibility in Google Search. The Android app is in closed testing on Google Play and will be added here once it is publicly available.
Platform Reach · Last 30 Days
- Visits
- 3,172
- Active Users
- 1,361
- Page Views
- 5,545
Google Search · Top 10 Queries
- Organic Clicks
- 607
- Impressions
- 8,271
- Average Position
- 3.6
Snapshot from the platform's admin dashboard, covering approximately 20 September–19 October 2026. Usage figures are Google Analytics 4 sessions, active users and page views, counting only visitors who accepted analytics cookies. Search figures come from Google Search Console and cover the ten queries the dashboard reports, so site-wide totals may be higher; the position is the simple average of those queries.
Web Performance
Lighthouse 12.8 lab scores for the production home page: median of three runs per device profile, measured on 19 October 2026. Accessibility is shown for the mobile profile.
What's Next
The product keeps evolving. The next milestones are the public Android release and tighter links between the website and the apps, so that a match or an article opens directly in the app when it is installed.
Product Philosophy
A sports product earns trust on matchday: the score has to be right, the alert has to arrive once, and the experience has to work on every platform fans use.
Building products for ambitious businesses.
I collaborate with a limited number of partners each year to design and engineer digital products that combine performance, scalability and business impact.
Start a Conversation