CoOp:Anything
Search any game and see how much of it you can play with friends: every co-op mod, its stage, quality and community rating.
Fan-made stats for SparringDK's FC27 career mode series The Youth Edition: Leicester City with academy players only. Every season, match, player and transfer.
GamesJavaScript · PLpgSQLGitHub @Accid911OnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗A fan-made stats site for SparringDK’s FC27 career mode series The Youth Edition: Leicester City, academy players only.
/admin) — you and the creator sign in to add players, seasons and matches. All player stats are calculated from the match line-ups.Built with Next.js + Supabase (free Postgres + login), hosted on Vercel.
Without Supabase connected, the site runs in demo mode with sample data on your own computer, so you can try it right away. On Vercel it never shows demo data: if the database can't be reached, visitors see a “stats temporarily unavailable” page instead.
npm install
npm run dev
Open http://localhost:3000. (Needs Node 20+.)
Create an empty repo on GitHub (no README, no .gitignore), then in this folder:
git remote add origin https://github.com/<your-username>/fc27-stats.git
git branch -M main
git push -u origin main
Already have a database? Run the migration files you haven't run yet, in order, in SQL Editor → New query → Run (each one keeps your data):
002-leicester-youth.sql — match line-ups & league tables003-transfers-cups.sql — transfers & loans, cups per season, removes player age004-penalties-table.sql — penalty shoot-outs, full league table (W/D/L/GF/GA)005-joined-season.sql — the season each player joined the first team006-cup-results.sql — cup results per season (cup wins & league titles become automatic trophies)007-editions.sql — all 13 Youth Editions (FIFA 15 Newport County → FC 27 Leicester City). Everything already in the database becomes edition #13 (Leicester); the 12 older editions start empty and hidden.008-catch-up.sql — safe repair, run after 007: adds anything from 005/006 that was skipped and refreshes the API. Can be run any number of times. (After 007, don't run 006 itself anymore — use 008.)009-kit-numbers.sql — kit numbers for players (optional per player)010-viewer-credit.sql — who picked a kit number and in which episode011-scouting-subs-overall.sql — scouting trips (country + viewer who suggested it, players can be linked to a trip), episode number per match, substitutions (came on / came off, with the minute), loan length (short / 1 year / 2 years) and overall ratings over time. Only adds things; existing data stays as it is.supabase/schema.sql.
Before running, check the two emails at the bottom (yours + the creator's). Click Run.To try locally with the real database, copy .env.example to .env.local and paste the two values in.
Only emails in the
adminstable can edit. Add/remove editors any time in Table Editor → admins.
NEXT_PUBLIC_SUPABASE_URLNEXT_PUBLIC_SUPABASE_ANON_KEY (the publishable/anon key)git push redeploys automatically.The publishable/anon key is safe to be public — the database rules (Row Level Security) only allow reading for everyone and writing for admins.
| Table | What |
|---|---|
editions | The 13 Youth Editions: game, club, crest, YouTube link, intro, public or hidden |
settings | Club name, creator name, tagline, YouTube link |
players | Name, kit number (optional), position, country, season he joined the first team, scouting trip he was found on |
player_moves | Transfers & loans: sold / loaned out / back from loan / released, club, fee, loan length, season, date |
player_overalls | Overall rating over time: season, when (signed / start / during / end of season), episode, overall |
scouting | Countries the viewers chose to scout: season, country, who suggested it, episode |
seasons | Season number, league (EFL League Two → Premier League), cups played and how far we got in each, notes |
standings | The league table for a season: team, W, D, L, GF, GA, points |
matches | Season, episode, tournament, opponent, score, penalties (cup draws), home/away, date, video link |
match_players | Who played in a match: rating, goals, assists, Player of the Match, came on / came off (with the minute) |
trophies | Extra trophies only — league titles (top of the table) and cup wins (“Winner”) are automatic |
Players — fill in name, position, country, the season he joined (defaults to the latest) and press Enter. Clean sheets are counted automatically for goalkeepers and defenders. Click Edit / transfer to change details or to Sell, Loan out, bring Back from loan or Release a player (club, fee like 12.5m or 850k, season, date). Click Edit next to a move in the history to fix it (club, fee, loan length, season, date, notes, or even the kind of move), or ✕ to remove it. When you're signed in, every player page also shows an ✎ Edit player, transfers & loans button that opens that player here.
Seasons — New season pre-fills the next number, last season's league, cups and teams. Pick the league, click the cups played and set how far you got (Winner puts the cup in the trophy cabinet), fill in W/D/L/GF/GA/points (points auto-fill as 3×W + D), or Paste a list (Arsenal 38 26 6 6 80 30 50 84 or just Arsenal 84). Leicester's row can be filled in from the logged league matches.
Play-offs — leagues with play-offs (National League, League Two, League One, Championship, 3. Liga, 2. Bundesliga, Bundesliga) get a play-off result in the season form; play-off matches are logged under e.g. “League One Play-offs”. Winning promotion play-offs is added to the trophy cabinet. No database change needed (saved with the cup results).
Matches — the tournament list is the season's league + cups. Pick the opponent and home/away (away games show the opponent first), type the score — a drawn cup match shows penalty boxes — click players to add them (or Same players as last match), then set each player's rating, goals (+/−), assists (+/−) and tap ★ for Player of the Match. Use the Substitution column for players who came on, came off (or both), with the minute if you know it. The Episode field remembers the last episode you entered.
Scouting — per season: the country the viewers picked, who suggested it and the episode. Link players to a trip with Found when scouting in the Players tab.
Overall rating — type the overall when adding a player (“Overall when signed”), then add more in the player's Overall rating box (start / during / end of a season). The player page draws the graph; Records shows the biggest improvers.
SparringDK did a Youth Edition every year since FIFA 15. Each one works exactly like the Leicester career (players, seasons, matches, records), on its own pages under /editions:
/editions — all editions · /editions/1 … /editions/12 — one edition · /editions/all-time — everything together./, /players, …) only shows the current edition (Leicester) and has no links to the archive./admin first, then open /editions in the same browser.Entering data for an older edition: in the admin, pick the edition at the top (“Editing #1 · FIFA 15 · Newport County”). Every tab — Players, Seasons, Matches, trophies — now works on that edition only. Switch back to #13 for Leicester.
Going public: Admin → Editions → Details → tick Public → Save edition. There you can also add a crest image URL, a YouTube link and a short intro. Make them public one by one, or all at once when everything is filled in.
Personalising an edition: add an entry for the edition number in lib/themes.js (club colours, crest in public/crests/, nickname, stadium). That edition's pages then get the club's colours, its crest and name top left, its crest as browser-tab icon and its own link-preview image. Edition #12 (Cambridge United) is personalised; the others use the normal look until they get an entry. The main Leicester site never changes.
Free Supabase projects pause after a week without activity. vercel.json makes Vercel call /api/keepalive once a day,
which reads one tiny row. Optional: add an environment variable CRON_SECRET (any long random text) on Vercel —
then only Vercel's own daily call can use that address.
admins table (your email) can't be read through the public API.Pages read the data from a cache, so they stay fast as the career grows. After every save in the admin, the cache is refreshed straight away (app/api/revalidate); otherwise it refreshes at least every 5 minutes.
app/ pages (overview, records, seasons, matches, players + transfers, about, admin)
app/editions/ the archive of older Youth Editions
views/ page bodies shared by the main site and the archive
components/ tables, leaderboards, admin editors
lib/server-data.js loading + caching (server only)
lib/data.js all stat calculations (records, streaks, leaders, honours)
lib/admin-api.js save/delete for the admin panel
lib/demo-data.js sample data for demo mode
supabase/schema.sql database setup (fresh install)
supabase/migrations/ upgrades for an existing database
Excel download (public) — anyone can download all stats until now as an Excel file: button on the Records page and in the footer (/api/export).
Backup — download a full backup of every edition (.json) or a readable spreadsheet (.xlsx); restore a .json backup if something goes wrong. The admin reminds you when the last backup is more than 14 days old.