尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證製作者的介紹僅有上面的一句話。 更多詳情請閱讀儲存庫 README。 儲存庫 README ↗
正在載入完整 README。
檢視完整 README ↗Mobile-first activity bingo for friend groups on a night out. Built with Next.js, Tailwind
CSS and Supabase. Project rules and architecture live in CLAUDE.md; the
build plan is in PHASES.md.
.env.local:
cp .env.example .env.local
Fill in NEXT_PUBLIC_SUPABASE_URL and NEXT_PUBLIC_SUPABASE_ANON_KEY from Project
Settings > API, and set NEXT_PUBLIC_APP_URL=http://localhost:3000.
SUPABASE_SERVICE_ROLE_KEY and CRON_SECRET are only needed to run the cleanup cron
route. Never prefix the service-role key with NEXT_PUBLIC_.npm install
npm run dev
Open http://localhost:3000.Schema changes go through Supabase CLI migrations in supabase/migrations/ (see
CLAUDE.md).
Keep NEXT_PUBLIC_POSTHOG_HOST on PostHog's own origin (us.i.posthog.com / eu.i.posthog.com). Do not proxy it through a same-origin rewrite: same-origin requests would carry the Supabase auth cookies.
Optional, privacy-first product analytics via PostHog (src/lib/analytics.ts). It is off
unless NEXT_PUBLIC_POSTHOG_KEY is set (NEXT_PUBLIC_POSTHOG_HOST defaults to
https://us.i.posthog.com), and off for browsers sending Do Not Track or Global Privacy
Control; when off, posthog-js is never loaded. Only eight events with allow-listed counts
and flags are sent (game_created, player_joined, game_started, square_completed,
media_uploaded, game_ended, recap_viewed, play_again). No names, join codes, game or
user ids, square text, URLs or referrers; no autocapture, pageviews, session recording,
surveys, cookies or stored identifiers (a fresh anonymous id per page load).
e2e/analytics.spec.ts checks the payloads; it is skipped unless the dev server and Playwright
both run with NEXT_PUBLIC_POSTHOG_KEY=phc_test NEXT_PUBLIC_POSTHOG_HOST=http://127.0.0.1:<port>/__ph.
Without a hosted Supabase project you can run against the local stand-in backend
(real Auth + PostgREST; Storage returns 501 and Realtime never emits events, so other
players' changes arrive through the resync poll, every 15 s by default or
NEXT_PUBLIC_SYNC_POLL_MS). See scripts/local-backend/README.md.
npm run backend:status # or: npm run backend:reset && npm run backend:start
node scripts/local-backend/cli.mjs env > .env.local # (not via npm run: npm adds banner lines)
npm run dev # NEXT_PUBLIC_ENABLE_SW=1 npm run dev to run the service worker too
If Turbopack serves stale files in dev, rm -rf .next/dev and restart.
Tests:
npm run test — Vitest unit tests (src/**/*.test.ts): game reducers, optimistic queue,
board state, celebrations, toasts, instant return, settings, media pipeline, service-worker
policy, session handling, cleanup cron, starter-pack content rules, palette contrast.npm run e2e — Playwright (Chromium, 375×812): create / join, lobby, live board (incl.
offline), instant return, settings, media, PWA. Starts npm run dev on 127.0.0.1:3000
(with NEXT_PUBLIC_SYNC_POLL_MS=1500, NEXT_PUBLIC_ENABLE_SW=1) or reuses one already running.npm run db:test — the SQL suite (RLS, RPCs, grants) against a local Postgres 16+ at
127.0.0.1:54329; see CLAUDE.md > Running the DB tests.npm run dev — dev server (Turbopack)npm run build — production buildnpm run start — serve the production buildnpm run lint — ESLintnpm run test — unit tests (Vitest)npm run e2e — end-to-end tests (Playwright)npm run db:test — database tests (scripts/db-test.sh)npm run backend:reset / backend:migrate — recreate the local backend database / apply
pending migrationsnpm run backend:start / backend:stop / backend:status — run (detached), stop or check
the local backendnpm run backend:env — print the .env.local lines for the local backendnpm run backend:smoke — end-to-end check of the local backend with supabase-js