xSPN
Get statistical football predictions for major leagues and tournaments
AI summary · website content
FairPlayr counts the minutes during the match, shows who has played least and suggests substitutions. The coach decides. Works offline.
Sports & fitnessTypeScript · CSSGitHub @SchpauxOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
FairPlayr is a mobile-first matchday app for grassroots football coaches to manage lineups, substitutions, and fair playtime.
Loading the full README.
Read the full README ↗FairPlayr is a mobile-first matchday assistant for grassroots football. It is built for volunteer coaches, parent coaches, and team managers who need fast decisions on the sideline without digging through heavy admin tools.
The product focuses on practical matchday flow: squad selection, starting lineup, bench/field overview, substitutions, and fair playtime distribution. It is designed for quick use on a phone, with a modern UI, low friction navigation, and a clear in-match workflow.
Today, FairPlayr combines local matchday state (for speed and reliability during a game) with cloud-backed team and integration data (for persistence and collaboration). Norwegian and English are both first-class locales, and the app is web-first with a future app packaging direction.
FairPlayr is intentionally a sideline tool, not a full club ERP or elite analytics platform.
In youth and grassroots football, matchday decisions are often made under time pressure by volunteers. That leads to inconsistent substitutions, uneven playtime, and unnecessary cognitive load.
FairPlayr exists to make fair rotation and match organization easier in real time. The goal is simple: fewer spreadsheets, fewer ad hoc decisions, and more predictable fairness for players.
.
├─ src/
│ ├─ app/
│ │ ├─ [locale]/
│ │ │ ├─ page.tsx # Home
│ │ │ ├─ team/ # Team manager + Spond beta card
│ │ │ ├─ match/ # Match planner, setup, live, details
│ │ │ ├─ lineup/ # Dedicated lineup builder
│ │ │ ├─ settings/ # Theme/language/auth status
│ │ │ └─ auth/ # Sign-in, sign-up, callback
│ │ ├─ manifest.ts # PWA manifest (/manifest.webmanifest)
│ │ ├─ serwist/[path]/route.ts # Builds and serves the service worker (/serwist/sw.js)
│ │ └─ api/
│ │ ├─ matches/ # Match CRUD/read endpoints
│ │ └─ integrations/spond/ # Spond connect/sync/import endpoints
│ ├─ components/
│ │ ├─ match/
│ │ ├─ team/
│ │ ├─ lineup/
│ │ ├─ auth/
│ │ ├─ providers/
│ │ └─ ui/
│ ├─ sw/ # Service worker: routing rules, caches, update gate
│ ├─ domain/ # Match/live/team domain logic
│ ├─ i18n/ # next-intl routing and request config
│ └─ lib/
│ ├─ server/ # Server modules (matches, integrations)
│ ├─ supabase/ # Browser/server/middleware clients
│ ├─ teamData/ # Local vs cloud repository abstraction
│ └─ storage/ # Local storage state for match/runtime
├─ supabase/
│ ├─ config.toml
│ └─ migrations/
└─ messages/ # en.json / no.json translations
Implemented auth methods:
Key behavior:
This is the beginning of the README. Read the rest at the original. Read the full README ↗