CoOp:Anything
게임을 검색해 협동 플레이 가능한 모드·단계·품질·커뮤니티 평점을 확인합니다
SparringDK의 FC27 커리어 모드 시리즈 Youth Edition을 위한 팬 제작 통계
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.
게임JavaScript · PLpgSQLGitHub @Accid911온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
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.