OhMyGame
OhMyGame is the open-source studio for making games with AI. Design, build, playtest, and publish games in one app, with your own model keys.
Fantasy F1 draft pool
Translation pending
GamesTypeScript · JavaScriptGitHub @larsjohnstonOnlineOwner 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 ↗Mobile-first fantasy F1 draft pool for 4 players. Each race weekend you draft 5 drivers; lowest cumulative finishing positions wins the season (golf-style scoring).
docs/superpowers/specs/2026-06-06-f1-fantasy-draft-pool-design.mddocs/superpowers/plans/2026-06-06-m1-draft-core.mdNext.js 16 (App Router) · TypeScript · Tailwind v4 · Vitest · Supabase (Postgres + Realtime) · Vercel.
npm install
cp .env.local.example .env.local # then paste your Supabase values
npm run dev
.env.local needs:
NEXT_PUBLIC_SUPABASE_URL= # Project URL from Supabase → Settings → API
NEXT_PUBLIC_SUPABASE_ANON_KEY= # anon public key (JWT, ~200+ chars)
SUPABASE_SERVICE_ROLE_KEY= # service_role key (JWT, ~200+ chars) — server only
SUPABASE_DB_URL= # Postgres connection string for migrations + sync script
F1_SEASON=2024
npm run db:apply # creates tables + seeds the 4 players via SUPABASE_DB_URL
npm run sync:season # fetches Jolpica + OpenF1 for every round of F1_SEASON, upserts to DB
db:apply is idempotent (CREATE IF NOT EXISTS, ON CONFLICT DO NOTHING). sync:season runs through round 24, breaking on the first empty round.
Results are synced manually — there is no scheduled or automatic sync. The commissioner hits the Sync button on /admin (which POSTs to /api/sync) to refresh a round. OpenF1 keeps a session on its paid real-time tier until ~30 min after it ends, so syncing within that window stores the provisional finishing order; syncing again once Jolpica's official classification posts (penalties applied) overwrites it.
/) — tap a player; the choice persists in localStorage./admin, commissioner only) — Sync a round, set draft order, open the draft, undo, close & score./draft) — straight 1-2-3-4 order for 5 rounds. Picks broadcast live to all devices via Supabase Realtime. Anyone can pick on behalf of an absent player; the actor is stamped separately./standings) — cumulative golf scoring across every race marked complete.A driver scores their finishing position (winner = 1, 20th = 20). A player's weekly total is the sum of their 5 drivers. Season total adds across weeks. Lower is better.
| Script | What it does |
|---|---|
npm run dev | Next dev server on http://localhost:3000 |
npm run build | Production build + typecheck |
npm test | Vitest run (pure parser / scoring / draft engine tests) |
npm run db:apply | Apply migration + seed via direct Postgres |
npm run sync:season | Backfill a full F1 season via Jolpica + OpenF1 |
See Vercel + env-var steps in MORNING.md for the current bootstrap state.
src/lib/f1/parse.ts, src/lib/scoring/score.ts, src/lib/draft/engine.ts are pure (no I/O) and carry the unit tests.src/lib/f1/sync.ts and src/lib/draft/service.ts own all DB / realtime I/O.src/components/* are presentational; src/app/**/page.tsx wires data + context.