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
Ein Gerät wandert um den Tisch, alle bewerten die ausgelosten Spiele. Heraus kommt das Spiel für heute – und mit jeder Session ein schärferes Bild davon, was eure Runde gern spielt.
Translation pending
GamesJavaScript · CSSGitHub @ChulioZOnlineOwner 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
Self-hosted (and hosted) app for any group: manage your board & digital games, run voting sessions to decide what to play next, and track ratings. German/English UI. Built entirely by Claude.
Taken from the repository README
Loading the full README. The saved excerpt is shown below.
"What should we play tonight?" — Spielwirbel draws a few games from your
group's shelf, collects everyone's rating — on one shared device, on their own
phones, or through a link — and
remembers what your round actually likes.
Self-hostable, German + English + Spanish + French + Italian + Dutch + Portuguese + Finnish + Korean UI, no tracking. Try it without an account at
spielwirbel.app.Read the full README ↗"What should we play tonight?" — Spielwirbel draws a few games from your group's shelf, collects everyone's rating — on one shared device, on their own phones, or through a link — and remembers what your round actually likes.
Self-hostable, German + English + Spanish + French + Italian + Dutch + Portuguese + Finnish + Korean UI, no tracking. Try it without an account at spielwirbel.app.
ℹ️ Status: live as a public multi-tenant SaaS — registration has been open at spielwirbel.app since 2026-07-24, and a guest demo lets you look around without signing up at all. Self-hosting defaults to local-only with no authentication — if you run it that way, keep it on a trusted network you control, since there is no access control until you configure one (
docs/configuration.md).
Node.js 22 or newer is the only prerequisite (get it from https://nodejs.org/; developed and tested on Node 26).
npm install
npm start # or: node server.js
Open http://localhost:3000 — that's it. From another device on your network,
use http://<your-computer-ip>:3000 (find the IP with e.g.
ipconfig getifaddr en0 on macOS).
Use a different port or data folder: PORT=8080 npm start,
DATA_DIR=/path/to/data npm start.
Everything else — PostgreSQL, object storage for covers, user accounts, the
guest demo, rate limits, the operator panel, Docker and deploying — is optional
and documented in docs/configuration.md.
→ Full detail in docs/features.md.
| Document | What's in it |
|---|---|
docs/features.md | Every feature in detail |
docs/architecture.md | How it's built, and what every file is for |
docs/configuration.md | All environment variables, Docker, deployment |
docs/deploy-railway.md | Step-by-step production deploy |
CLAUDE.md | The architecture constraints new work must respect |
CONTRIBUTING.md | How to contribute, and the licensing terms |
SECURITY.md | Reporting a vulnerability |
docs/legal/ | Operator records: DSA workflow, retention, DSAR |
npm test # automated tests (Node's built-in runner + supertest)
npm run coverage:ci # tests + the coverage thresholds CI gates on
npm run lint # ESLint (flat config)
npm run check:syntax # node --check over all JS files
npm run build # optional: content-hash + minify js/css into dist/
npm run migrate # apply pending Postgres migrations (needs DATABASE_URL)
npm run dev # the server, restarted on every backend file change
node scripts/seed-dev.js # fill a throwaway .devdata/ with the demo's rounds
There is no build step for development — npm start serves public/
directly. npm run build is optional and only for production; see
docs/architecture.md, and
docs/configuration.md for npm run dev and the
env-file loading.
This project is built and maintained with
Claude Code, and the repository ships the
workflow with it: skills in .claude/skills/ and rules in
.claude/rules/ that encode how work gets done here. Whether you contribute by
prompting Claude Code or by hand, that is the intended path.
See CONTRIBUTING.md for where to start, the skill
workflow, translations, and the contribution-licensing terms — inbound
contributions are licensed under Apache-2.0 and every commit must be signed off
under the Developer Certificate of Origin (git commit -s).
By default everything lives in the data/ folder (data.json + uploads/) —
copy it to back up, delete it to reset. The whole folder is git-ignored, so your
group's data is never committed.
Set DATABASE_URL (and optionally S3_BUCKET) and your data lives in Postgres
and object storage instead — then backups are your provider's job, and they are
usually not switched on by default. Check, rather than assuming a managed
database backs itself up; see docs/configuration.md.
This project was developed entirely by Claude (Anthropic's AI models, via Claude Code), through an interactive, conversational process: a human described the desired features and gave feedback, and Claude designed and wrote all of the code, comments and documentation. It stands as a small example of what agentic, AI-assisted development can produce end to end.
Note the distinction: the app's development was AI-driven, but the app itself contains no AI and sends no data anywhere when you run it.
PolyForm Noncommercial License 1.0.0, © 2026 Julian Zenker — the sole rights holder and licensor. The source is public and you are free to use, study, modify and share it for noncommercial purposes (personal use, hobby projects, education, research). Commercial use — including running it as a paid or revenue-generating hosted service — is not granted by this license; contact the maintainer for commercial terms.