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.
Host Pokémon TCG leagues at your local store. Players scan a QR code to join, get Swiss pairings on their phone, report results and watch the round clock.
Translation pending
GamesTypeScript · JavaScriptGitHub @KaappooOnlineOwner 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 ↗League night, sorted. A Pokémon TCG app for local game stores: hosts run Swiss events, players scan a QR code to join, get their opponent and table on their phone, report results and watch the round clock. Every player keeps a profile with match history, stats and a deck library.
Hosting
Playing
| Concern | Choice |
|---|---|
| App framework | TanStack Start (Router, Query + persist-client, Virtual, Pacer, Devtools) on Vite 8 + Nitro |
| Backend logic | Effect 4 services, typed errors, ManagedRuntime bridge to server functions |
| Data | Drizzle ORM on Turso / libSQL (file:local.db locally) |
| Auth | better-auth: email + password, username, magic link (via Resend) |
| Share images | satori + sharp (/api/og/*) |
| Validation | Zod 4 for user input (forms + server functions), Effect Schema for domain models |
| Offline | Serwist service worker |
| UI | Tailwind 4, shadcn-style components on Base UI, TanStack Charts, lucide |
| Language | TypeScript 7 |
| Tests | Vitest 5 + @effect/vitest (server), jsdom + Testing Library + MSW (client), Playwright (e2e), Storybook 10 |
| Review | fallow, react-doctor, impeccable |
| Agent workflow | Matt Pocock's engineering skills + impeccable in .claude/skills |
pnpm install
cp .env.example .env # set BETTER_AUTH_SECRET at minimum
pnpm tsx scripts/migrate.ts # create local.db (and backfill avatars and achievements)
pnpm db:seed # optional: demo store, 9 players, an event per pairing system
pnpm dev # http://localhost:3000
Seeded accounts: oak (host), ash, misty, brock, … — password pallet-town-1.
Without RESEND_API_KEY emails are logged to the console; without CARD_CATALOG_URL decks are saved without card art (run pnpm tsx scripts/backfill-card-images.ts once it is set) and the partner Pokémon search says the catalog is unreachable. scripts/migrate.ts also backfills player identity (default avatars and achievements from history) for users who don't have it yet. Uploaded profile photos are gone: run pnpm tsx scripts/delete-uploaded-photos.ts once with the old UPLOADTHING_TOKEN to delete the stored files. For production point DATABASE_URL / DATABASE_AUTH_TOKEN at Turso and set APP_URL so QR codes and share images use your domain. On Vercel, pnpm vercel-build applies pending migrations before building, on production deploys only (previews skip them).
| Command | What it does |
|---|---|
pnpm dev | Dev server with TanStack Devtools (Router, Query, Pacer) |
pnpm build / pnpm start | Production build to .output (+ service worker) / run it |
pnpm typecheck | TypeScript 7 |
pnpm test | Vitest: server (node) and client (jsdom + MSW) projects |
pnpm test:e2e | Playwright, desktop + Pixel 7 (own dev server on :3100) |
pnpm storybook | Component workbench |
pnpm db:generate / db:migrate / db:studio | Drizzle Kit |
pnpm review | fallow + react-doctor + impeccable detect |
In sandboxed containers Playwright may need
PLAYWRIGHT_CHROMIUM_PATH=/path/to/chromium.
src/
domain/ pure rules: standings, swiss, match-clock, deck-list, ids (+ tests)
server/ Effect services (events, decks, profiles), db, auth, email, og, functions/
shared/ Zod schemas used by forms and server functions
routes/ file routes; api/ for auth, og images
components/ ui/ primitives (Base UI) and feature components (+ stories, tests)
sw.ts Serwist service worker
e2e/ Playwright specs
docs/adr/ architecture decisions
See CLAUDE.md for conventions, PRODUCT.md / DESIGN.md for product and visual direction, and GLOSSARY.md for domain language.