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.
Fantasy Football für die Schweizer Liga, Saison 26/27
Translation pending
GamesTypeScript · PythonGitHub @liasmiasOnlineOwner 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 ↗Fantasy-Football-App für die Swiss Super League 26/27 — FPL-artig: Budget-Kader aus 15 Spielern, wöchentliche Aufstellung mit Kapitän, limitierte Transfers pro Spieltag, automatischer Punkte-Sync via API-Football, Admin-Tool für manuelle Korrekturen.
supabase/migrations/0001_init.sql
einmal komplett ausführen. Das legt alle Tabellen, Views, Trigger und RLS-Policies an..env.local kopieren
(siehe unten): Project URL, anon public Key, service_role Key.league_settings (Tabelle mit genau einer Zeile, id = 1) die Saison-
Parameter setzen (Budget, Kadergrösse, Slots pro Position, Transferkosten).
Falls die Zeile noch fehlt, einmalig per SQL-Editor einfügen.gameweeks) importieren — entweder manuell
über den Table Editor oder per SQL-Insert. Pro Spieltag: season, number,
deadline (Zeitpunkt, ab dem Transfers gesperrt werden)./fixtures und /fixtures/players abdeckt.GET https://v3.football.api-sports.io/leagues?search=Switzerland
Header: x-apisports-key: <dein-key>
Aus der Antwort die league.id für "Swiss Super League" notieren.clubs.api_football_team_id und players.api_football_player_id in
Supabase mit den entsprechenden IDs aus /teams bzw. /players befüllen —
ohne diese Zuordnung kann der Cron-Sync Spieler nicht matchen.Bekannte Einschränkung: Die API liefert keine Eigentore. Diese müssen im Admin-Panel manuell pro Spieler/Spieltag eingetragen werden.
.env.local.example nach .env.local kopieren und ausfüllen:
cp .env.local.example .env.local
| Variable | Woher |
|---|---|
NEXT_PUBLIC_SUPABASE_URL | Supabase → Project Settings → API |
NEXT_PUBLIC_SUPABASE_ANON_KEY | Supabase → Project Settings → API |
SUPABASE_SERVICE_ROLE_KEY | Supabase → Project Settings → API (geheim halten!) |
API_FOOTBALL_KEY | api-football.com Dashboard |
API_FOOTBALL_BASE_URL | i.d.R. https://v3.football.api-sports.io |
API_FOOTBALL_LEAGUE_ID | siehe Schritt 2 oben |
CRON_SECRET | Zufälliger String, z. B. openssl rand -base64 32 |
Ohne E-Mail-Bestätigung könnten Bots massenhaft Accounts anlegen. Cloudflare Turnstile ist ein kostenloser CAPTCHA-Ersatz, der Registrierung und Login schützt (für echte Nutzer meist unsichtbar). Solange kein Site-Key gesetzt ist, bleibt der Schutz inaktiv und die Formulare laufen normal.
Einrichten:
localhost). Widget-Typ „Managed" wählen..env.local bzw. Vercel als
NEXT_PUBLIC_TURNSTILE_SITE_KEYnpm install
npm run dev
App läuft auf http://localhost:3000.
Es gibt bewusst keinen Weg, sich selbst zum Admin zu machen (Sicherheit gegen Rechte-Eskalation). Nach der ersten Registrierung manuell in Supabase per SQL-Editor:
update profiles set role = 'admin' where username = 'dein-username';
Danach ist unter /admin das Gameweek-Management sichtbar: Spieltage
sperren/entsperren, Statistiken pro Spieler überschreiben, Punkte neu
berechnen.
Der Endpunkt /api/cron/sync holt Spielstände und Statistiken. Er muss
regelmässig aufgerufen werden — alle 15 Minuten, damit die Punkte während
laufender Partien mitlaufen.
⚠️ Vercels vercel.json-Cron reicht im Hobby-Tarif nicht: Dort läuft
ein Job nur einmal täglich, und selbst dann zu beliebiger Minute
innerhalb der Stunde. Ein häufigerer Ausdruck lässt das Deployment
fehlschlagen — deshalb steht in vercel.json bewusst 0 3 * * *
(nächtlicher Rückfall-Lauf, der im Hobby-Tarif akzeptiert wird).
Zwei Wege:
A) Supabase pg_cron (empfohlen, kostenlos) — läuft in deinem
bestehenden Supabase-Projekt, minutengenau, kein zusätzlicher Dienst:
supabase/migrations/0009_cron_sync.sql
im SQL-Editor ausführen, vorher die beiden Platzhalter <APP_URL> und
<CRON_SECRET> ersetzen. Kontrolle:
select * from cron.job_run_details order by start_time desc limit 10;
B) Vercel Pro (~20 USD/Monat) — dann greift vercel.json wie
konfiguriert, ohne weiteres Zutun.
Variante A hält die laufenden Kosten bei den ~19 USD für API-Football.
src/app/api/cron/sync/route.ts) synchronisiert immer nur den
aktuellsten gesperrten Spieltag (der mit der höchsten Nummer, dessen
Deadline verstrichen ist), um das API-Kontingent zu schonen.player_stats. Admin-Korrekturen leben separat in
player_stats_overrides und werden beim Berechnen der Punkte
(src/lib/gameweek-scoring.ts) darübergelegt — ein Sync überschreibt also
nie eine manuelle Korrektur.