A football live-scores web & Android app covering the Premier League, La Liga, Serie A, Bundesliga, Ligue 1, Champions League, World Cup, and Euro — built with React, deployed as a static site, and packaged for Android with Capacitor.
Live app: https://byot36.github.io/CentralScore/ Android APK: see the Releases page
- Live matches for 8 top competitions, pulled from football-data.org
- Match detail view with score, status, stadium/referee info (where available)
- Favorites — star a team and get a browser notification when its match is about to start (while the app is open)
- Clean dark UI designed for football fans, built with Tailwind CSS
- Android app built from the same codebase via Capacitor
The app runs on football-data.org's free tier, which only provides scores and match status — no lineups, player stats, live commentary, market values, coach bios, or TV broadcast info. Covering the rest of the world's leagues (e.g. Romania's Superliga, Europa League, Conference League, Nations League) and richer per-match data would require a paid sports-data plan.
- React + TypeScript + Vite — web app
- Tailwind CSS v4 — styling
- React Router (HashRouter) — client-side routing
- Capacitor — wraps the web app as a native Android project
- Cloudflare Workers — proxies API requests so the football-data.org key never reaches the browser
- GitHub Actions — builds & deploys the site to GitHub Pages, builds the Android APK and publishes it as a GitHub Release
app/ - React web app (source of the Android app too, via Capacitor)
src/
api/ - football-data.org client + response mapping
components/ - Layout, MatchCard
context/ - favorites (localStorage)
data/ - mock data used when no live API is configured
hooks/ - favorite-team match notifications
pages/ - Home, MatchDetail, Favorites
android/ - native Android project (generated by Capacitor)
worker/ - Cloudflare Worker source (API proxy) + deploy instructions
cd app
npm install
npm run dev
Without an API key configured, the app falls back to demo data.
- Deploy the Cloudflare Worker in
worker/(free tier) — seeworker/README.md. - Set
VITE_API_BASEinapp/.env.productionto your Worker's URL. - Rebuild:
npm run build.
cd app
npm run build
npx cap sync android
cd android
./gradlew assembleDebug
The APK is written to app/android/app/build/outputs/apk/debug/app-debug.apk.
GitHub Actions does this automatically on every push and publishes the result
as a Release.