Football Stats
A football match-prediction feed backed by an admin bulk-data pipeline
A two-part Flutter platform: an Android app that streams football match-outcome predictions — win/draw probabilities, BTTS and over/under goal chances — segmented into upcoming, in-play and past fixtures from a live Firestore feed, paired with a Flutter Web admin console that bulk-imports match data from CSV, JSON or XLSX files and deploys to Firebase Hosting through its own GitHub Actions pipeline.


Both repositories are private. The bulk CSV/JSON/XLSX import, the live-segmented match feed and the deploy pipeline are explained below.
About this project
The mobile app is a read-only prediction viewer, not a live-score tracker: each match card shows the two team names, the league, kickoff time, a proportional win/draw/win probability bar in each team's own color, and three additional confidence chips — Both Teams to Score, Over 1.5 goals and Over 2.5 goals — color-coded red/orange/green by how confident the number is. A segmented control splits the feed into Up Coming, Playing and History, computed client-side from each match's kickoff timestamp against the current time (a 90-minute window after kickoff is treated as 'still playing'), and the list itself is a live, paginated Firestore query — a match the admin edits updates on-device with no refresh.
The admin console is a separate Flutter Web app, not a mobile build: the login screen and every subsequent page are gated behind Firebase email/password auth, driven by a Cubit rather than a rebuild-everything provider. Its core feature is bulk data import — drag a CSV, JSON or XLSX file onto the page (or use the file picker), the file is parsed client-side into structured match records, a verify screen renders every parsed row as the same match card the mobile app uses so mistakes are visible before anything is written, and a single 'Upload' action batches the whole set into Firestore in parallel.
There's no custom backend: Cloud Firestore plus Firebase Auth is the entire server side. The admin console's own deploy pipeline is real infrastructure, though — a GitHub Actions workflow builds the Flutter Web app and pushes it to Firebase Hosting on every merge to main, with a second workflow standing up a preview channel per pull request.
Key features
- Match feed segmented into Up Coming / Playing / History from a live, paginated Firestore query — no manual refresh
- Per-match win/draw/win probability bar plus BTTS, Over 1.5 and Over 2.5 goal-chance chips, color-coded by confidence
- Admin bulk-import: drag-and-drop or file-picker upload of CSV, JSON or XLSX, parsed client-side into match records
- Verify-before-write step — every parsed row previewed as a real match card before a single batched Firestore upload
- Firebase email/password auth gating the admin console, driven by a dedicated Cubit rather than raw provider state
- Admin console ships as Flutter Web with a working GitHub Actions pipeline — auto-deploy on merge, preview channel per pull request
~/sherazi.dev$./say-hello
Say hello.
Questions about a case study, one of the packages, AI tooling or Flutter in general are always welcome.
// or browse the packages on pub.dev(opens in a new tab)