Skip to content
Business ToolsAndroidWeb (admin)

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.

Football Stats — app screenshot
Football Stats — app screenshot
F

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)