尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证制作者的介绍仅有上面的一句话。 更多详情请阅读仓库 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.