Underground 2 Revived
Play Need for Speed: Underground 2 (2004) in Chrome and Firefox with WebGPU graphics, Web Audio, up to 120 fps widescreen, controller support, free roam and Online races with friends. Fan project, not
Làm bánh, bán bánh, đua top cùng người chơi thật.
Translation pending
GamesTypeScript · PLpgSQLGitHub @arizona-coreOnlineOwner 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
Loading the full README. The saved excerpt is shown below.
Game web (PWA, mobile-first) mô phỏng làm bánh và kinh doanh tiệm bánh, có nền kinh tế giữa người chơi thật. Không có thanh toán bằng tiền thật: xu và gem chỉ kiếm được trong game. • Sản phẩm, lộ trình và quy tắc kinh tế: docs/PLAN.md • 21 màn hình và mockup: docs/screens.md, docs/project/ • Design token: docs/design-system.md • Quy ước cho Claude Code: CLAUDE.mdRead the full README ↗
Game web (PWA, mobile-first) mô phỏng làm bánh và kinh doanh tiệm bánh, có nền kinh tế giữa người chơi thật. Không có thanh toán bằng tiền thật: xu và gem chỉ kiếm được trong game.
| Màn | Route | Việc làm được |
|---|---|---|
| Đăng nhập | /login | Google OAuth. Ở local có thêm form "đăng nhập dev". |
| Mở tiệm | /onboarding | Nhập tên chủ quán và tên quán (không được trùng, có lọc từ bậy), chọn avatar và màu. |
| Tiệm | /shop | Cảnh 2.5D isometric (Phaser): khách vào cửa → xếp hàng → quầy → ngồi ghế; đồng hồ game (7:00–24:00), nhận đơn. |
| Người chơi | /players, /players/[slug] | Danh sách tiệm (online/offline, tìm kiếm), hồ sơ quán: avatar, tiểu sử, doanh thu, uy tín, hạng, đánh giá. |
| Đánh giá | /reviews | Điểm trung bình, phân bố sao, lọc; khách tự viết nhận xét theo tính cách; trả lời (+1 uy tín). |
| Bếp | /kitchen | Sổ 9 công thức (nguyên liệu, cách nấu, đóng gói), kho nguyên liệu/sốt/topping. |
| Làm đơn | /order/[visitId] | 7 bước: nguyên liệu → cách nấu → trộn & nấu (Phaser) → sốt → topping → đóng gói → giao. |
| Chợ | /market | Mua bán nguyên liệu/sốt/topping. Phí 5%, mở từ cấp 3 và sau 24 giờ mở tiệm. |
| Bảng xếp hạng | /leaderboard | Xếp theo doanh thu hoặc số sao, podium top 3, hạng của bạn. |
| Cửa hàng | /store | Nâng cấp lò/tủ trưng bày; trang trí: bàn ghế (thêm chỗ ngồi → đông khách), đồ treo tường/sàn/trần, 4 theme đổi kiểu tiệm. |
| Điểm danh | /daily | Chuỗi 7 ngày, thưởng xu và gem. |
| Lì xì | /lixi | 9 mốc/ngày (online, giao đơn, bán ở chợ, nhiệm vụ, đóng hóa đơn, thanh tra đạt) → bao lì xì; mở bao trúng ngẫu nhiên tới 888 ₵ hoặc lời chúc. |
| Chi phí & thuế | /bills | Tiền nhà, điện, nước, thuế 5%, tiền phạt; vệ sinh tiệm + dọn dẹp; biên bản thanh tra (an toàn thực phẩm, thuế). |
| Cài đặt | /settings | Đổi tên quán (20 gem), tùy chọn âm thanh, đăng xuất. |
Nguyên tắc bảo mật "client hiển thị, server quyết định":
npm install
npx supabase start # lần đầu phải tải image Docker, mất vài phút
npx supabase functions serve # để chạy trong một terminal riêng
Tạo file .env.local ở thư mục gốc. Lấy giá trị bằng npx supabase status: dùng API_URL và PUBLISHABLE_KEY.
NEXT_PUBLIC_SUPABASE_URL=http://127.0.0.1:54321
NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY=sb_publishable_...
npm run dev # http://localhost:3000
Chưa cấu hình Google thì dùng khung "Đăng nhập dev" ở màn đăng nhập. Khung này chỉ hiện khi chạy
npm run dev, và tài khoản sẽ tự được tạo ở lần đăng nhập đầu tiên.
http://127.0.0.1:54321/auth/v1/callback.supabase/.env (đã gitignore) với nội dung:
SUPABASE_AUTH_EXTERNAL_GOOGLE_CLIENT_ID=...
SUPABASE_AUTH_EXTERNAL_GOOGLE_SECRET=...
npx supabase stop && npx supabase start.npm run lint && npm run typecheck && npm run test # ESLint, TypeScript, Vitest
npm run test:db # pgTAP: kinh tế, khách, đơn, đánh giá, vận hành tiệm, RLS (197 test)
node scripts/smoke-functions.mjs # gọi thật các Edge Function (cần giờ game mở cửa để test đơn)
npm run build
npx supabase link --project-ref <ref>, sau đó npx supabase db push và npx supabase functions deploy.ALLOWED_ORIGINS=https://<domain> bằng npx supabase secrets set.supabase config push: config.toml là cấu hình cho local (bật email đăng nhập dev,
skip_nonce_check). Cấu hình production bằng Dashboard.https://<domain>/auth/callback vào mục Redirect URLs.NEXT_PUBLIC_SUPABASE_URL và NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY, rồi deploy..mcp.json đọc token từ biến môi trường, không chứa secret. Đặt trước khi mở Claude Code:
export SUPABASE_PROJECT_REF=... # Dashboard → Project Settings
export SUPABASE_ACCESS_TOKEN=... # Account → Access Tokens
Ảnh gốc Vecteezy nằm trong assets/source/ (ảnh khách: assets/source/customers/, đồ trang trí: assets/source/decor/). Chạy npm run assets:build để xuất bản webp đã tối ưu
vào public/images/ và tạo icon PWA. Giấy phép và ghi nguồn xem ở assets/CREDITS.md.