Fran Aragon

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.

Next.jsTypeScriptSwiftUIKotlinPush Notificationsi18n

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

Next.js App Router
TypeScript
PostgreSQL & Prisma
Versioned Mobile API
SwiftUI
Kotlin & Jetpack Compose
APNs & Firebase Cloud Messaging
Live Activities & WidgetKit
Structured Data (Schema.org)
Trilingual: ES · EN · FR

Platform Capabilities

Live Match Centre
Matchday Operator Console
Topic-Based Push Notifications
Live Activities & Widgets
News & Editorial CMS
Fixtures, Standings & Squads
Calendar Subscriptions
Predictions & MVP Voting

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.

Website · Home
Website · Home
iOS · Home
iOS · Home
iOS · Match Centre
iOS · Match Centre
iOS · Home Screen widgets
iOS · Home Screen widgets
iOS · Live Activity
iOS · Live Activity

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

91
Mobile Performance
99
Desktop Performance
94
Accessibility
100
SEO

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
CD Estepona Fans | Multi-Platform Sports Product Case Study | Fran Aragón