OhMyGame
OhMyGame은 AI로 게임을 만들 수 있는 오픈소스 스튜디오로, 디자인·구축·플레이테스트·출판을 하나의 앱에서 모델 키와 함께 수행합니다
tcgRank: 포켓몬 TCG 리그를 매장에 열고 QR코드로 참가·스위스 매칭·결과 보고·라운드 시계 확인
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.
게임TypeScript · JavaScriptGitHub @Kaappoo온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
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.