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
Think you can tell AI models apart, like a wine? A hidden LLM answers you: ChatGPT, Claude, Gemini, or any of the models in play. You have ten messages to name it, in one of several game modes.
GamesTypeScript · CSSGitHub @glederreyOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
Repository for the game Who's that LLM?
Loading the full README.
Read the full README ↗A hidden model answers you in a chat. You get ten messages to work out who you are talking to: Claude, GPT, DeepSeek, Mistral, something else? Name it early for a bigger score, buy hints if you are stuck, or give up and see the reveal.
Fewer tokens, fewer hints and fewer wrong names mean more points. The exact numbers live in lib/config.ts and the reasoning is in docs/rules.md.
docs/.Next.js (App Router) · Supabase (Auth, Postgres, Storage) · OpenRouter through the Vercel AI SDK · Vercel.
You need Node 22 or newer, a free Supabase project and an OpenRouter key.
npm installnpx supabase login, npx supabase link --project-ref <your-dev-project-ref>, npx supabase db push. The baseline migration creates the tables and the avatars and logos buckets, and supabase/seed.sql fills the roster. Add --include-seed to db push to load the seed too. npm run db:copy-logos -- <source project URL> copies the company logos into your logos bucket..env.example to .env.development.local and fill it in with your dev project. Never commit that file.http://localhost:3000/.npm run dev, then open http://localhost:3000. Sign up, pick a username, start a round.The app reads three env files, none of them tracked. npm run dev loads .env.development.local (it overrides .env.local). npm run dev:prod loads .env.prod.local instead, so the local app talks to the production project. Use that one with care.
Database changes follow one flow:
npm run db:new <name> creates a timestamped file in supabase/migrations/.npx supabase db push applies it to the project you linked (your dev project).npm run dev.Production changes only on a release: the deploy workflow runs supabase db push against the production project, then deploys the app. Nothing reaches production on a push to main.
Handy things to know:
app_settings.paused back to false.app_metadata has admin: true. It sees Admin in the account menu. For everyone else /admin looks like a missing page.npm test # unit tests
npm run typecheck # tsc --noEmit
Run both before opening a pull request.
| Path | What is there |
|---|---|
docs/ | The spec. The source of truth for rules, pages, data, server and admin |
app/ | Pages and API route handlers. The handlers are the whole backend |
lib/ | Game logic, scoring, OpenRouter calls, Supabase clients, and the tests next to them |
components/ | React components |
supabase/ | Timestamped migrations, the seed and the CLI config |
lib/game.ts is the one place that decides a match, a hint or a score. Components render what the server sends and never re-implement the rules.
Anyone is welcome, and nobody pushes straight to main. The way in is either:
CONTRIBUTING.md has the short checklist.This repo is set up for agents as well as humans. Point yours at these, in order:
CLAUDE.md: commands, rules and pitfalls.docs/README.md: the spec. If the code and a doc disagree, change one of them in the same pass so they match again.lib/config.ts: every game number. A round copies them onto games.rules when it starts, so editing them never rewrites a game in progress.Ground rules for agents and humans alike: no secrets or real keys anywhere in the repo, server-only values stay behind server-only modules, database changes go through supabase/ and must match docs/data.md, and tests are lib/**/*.test.ts files, which npm test picks up on its own.
This project is released under the MIT License. You are free to use, copy, modify and share it, as long as the copyright notice and the license text stay with it. The software comes as is, without warranty.
Emoji icons are drawn with Twemoji graphics (@twemoji/svg), copyright 2020 Twitter, Inc and other contributors, licensed CC-BY 4.0. They are served from this site, not from a CDN.