尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證Quick mini-games to play solo or with friends: free, in your browser
翻譯準備中
取自儲存庫 README
正在載入完整 README。
檢視完整 README ↗Quick mini-games for when you need a short break, solo or against your friends. Free, in the browser, nothing to download.
Play: https://afk-brb.vercel.app
Minijuegos rápidos para desconectar un rato, solo o contra tus amigos. Gratis y en el navegador.
apps/web Next.js (App Router) + PWA
apps/extension Chrome extension (WXT): the website inside the toolbar popup
packages/brand Brand name, copy and colours (single source of truth)
packages/games Pure game logic in TS, shared by client and server
packages/db Types generated from the Supabase schema
packages/avatars Procedural monsters (plain SVG, no React)
packages/ui CSS theme and components shared by the web app and the extension
supabase/ Config, migrations, seed and database tests
pnpm install
pnpm dev # web app at http://localhost:4321
pnpm test # game tests
pnpm typecheck
pnpm lint
Monster gallery to review the generator (development only): http://localhost:4321/dev/monstruos
Node 24 (see .node-version, used by fnm).
Requires Docker. The CLI is a dependency of the monorepo.
pnpm db:start # starts Postgres, Auth, Realtime, Studio…
pnpm db:status # local URLs and keys
pnpm db:migration name # new migration in supabase/migrations
pnpm db:reset # recreates the database from migrations + seed
pnpm db:types # regenerates packages/db/src/database.types.ts after a schema change
pnpm test:db # database tests (pgTAP): permissions, RLS, friendships, games
pnpm db:stop
Copy apps/web/.env.example to apps/web/.env.local and fill in the keys from pnpm db:status.
Ports (553xx, so they don't clash with other local Supabase projects):
API 55321 · Postgres 55322 · Studio http://127.0.0.1:55323 · Mailpit (auth emails) http://127.0.0.1:55324
Auth emails (e.g. "Forgot your password?") end up in Mailpit. Locally, Supabase only sends 2 emails an
hour (auth.rate_limit.email_sent in supabase/config.toml).
Seed test users (password password123): [email protected] (friend code AAAAA),
[email protected] (BBBBB) and [email protected] (CCCCC). Ana and Bob are friends, and Carla has sent
Ana a friend request.
start_run('2048') and gets { id, seed }.@repo/games using that seed.POST /api/runs/:id/finish (session cookie or Authorization: Bearer).finish_run/reject_run with the
secret key. The client never sends the score.In timed games (Minesweeper, Sudoku, Solitaire and Queens) the score is the time measured by the server,
minus pauses (pause_run/resume_run).
Games against friends work the same way: the server validates every move with @repo/games before
saving it with apply_match_move.
To go to the cloud: supabase link --project-ref <ref> and supabase db push.
The name isn't final yet. To change it:
packages/brand/src/index.ts (name, expansion, tagline, description).NEXT_PUBLIC_SITE_URL (see .env.example).Internal packages use the neutral @repo/* scope, so they don't need touching.
No other file should hard-code the name; if you need it, import brand.
The toolbar popup shows the whole website (in an iframe), so it always has the same games as the website
without publishing anything separately. It goes back to the last screen you were on, and right-clicking
the icon opens it in its own window or a tab. The number on the icon is your pending items
(/api/pending, using the website's session; checked every 3 minutes).
cp apps/extension/.env.example apps/extension/.env # WXT_SITE_URL: the website it shows
pnpm --filter extension dev # opens Chrome with the extension loaded and reloads on save
pnpm --filter extension build # builds apps/extension/.output/chrome-mv3
pnpm --filter extension zip # zip ready for the Chrome Web Store
For production, apps/extension/.env.production with WXT_SITE_URL set to the published website.
To load it by hand: chrome://extensions → developer mode → Load unpacked →
apps/extension/.output/chrome-mv3. The name comes from @repo/brand, as on the website.
app/manifest.ts + icons generated from the mascot (/icons/*, app/icon.tsx, app/apple-icon.tsx).public/sw.js: offline page (/offline, self-contained HTML) and push notifications.POST /api/push/dispatch through pg_net, which decides who to notify and sends with web-push. The
URL and the shared secret live in Vault (push_webhook_url, push_webhook_secret); locally the seed
creates them and the secret matches PUSH_WEBHOOK_SECRET in .env.local.If pnpm dev serves old styles or components (e.g. a change in globals.css that doesn't apply),
Turbopack's cache is stuck: stop the server, delete apps/web/.next/dev and start it again.
Found a bug or have an idea? Open an issue. Want to fix it yourself? Send a pull request.
If you write your friend code (you'll find it in the app, under Friends) in the title or description, you earn the "Contributor" achievement and an exclusive colour for your monster when you open the issue or when your pull request is merged.
This is handled by the /api/webhooks/github webhook ("Issues" and "Pull requests" events, signed with
GITHUB_WEBHOOK_SECRET).
Code comments and commit messages are written in Spanish.
Everything comes from apps/web/src/lib/seo.ts (the game texts are in lib/i18n/games-*.ts): title,
description, "How to play" and FAQ for each game. From there we generate the visible section of each page,
the structured data (JSON-LD: VideoGame, FAQPage, BreadcrumbList), sitemap.xml, /llms.txt and the
share images (each game's opengraph-image.tsx, with lib/og.tsx). When you add a game, add its guide too.
robots.txt lets every crawler in (including GPTBot, ClaudeBot, PerplexityBot…) except /api/ and
/dev/.noindex with
PRIVATE_PAGE. They aren't blocked in robots.txt: otherwise search engines couldn't read the
noindex.NEXT_PUBLIC_SITE_URL.Once there's a domain:
NEXT_PUBLIC_SITE_URL set to the domain on Vercel, and a 301 redirect from *.vercel.app to the
domain (Vercel → Settings → Domains).NEXT_PUBLIC_GOOGLE_SITE_VERIFICATION and NEXT_PUBLIC_BING_SITE_VERIFICATION, and submit the sitemap.site_url and the redirect URLs in Supabase (Auth → URL).https://<domain>/api/webhooks/kofi and its
verification token in KOFI_VERIFICATION_TOKEN. GitHub Sponsors: once GitHub approves the account,
put its link in SUPPORT_LINKS.githubSponsors (apps/web/src/lib/support.ts).private.friend_request_attempts and old abandoned games.