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
Selbst ausgedachte Spiele mit Freunden live spielen.
Translation pending
GamesJavaScript · CSSGitHub @leonkrtnOnlineOwner 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.
Selbst ausgedachte Spiele mit Freunden live spielen, am Handy oder Laptop. Jeder legt ein Konto an (Benutzername und Passwort), dann fügt ihr euch als Freunde hinzu. Jede Freundschaft hat ein eigenes Spielzimmer mit Punktestand und Verlauf, für mehr Leute gründet ihr eine Gruppe (bis zu sechs). Züge erscheinen sofort bei den anderen.Read the full README ↗
Selbst ausgedachte Spiele mit Freunden live spielen, am Handy oder Laptop.
Jeder legt ein Konto an (Benutzername und Passwort), dann fügt ihr euch als Freunde hinzu. Jede Freundschaft hat ein eigenes Spielzimmer mit Punktestand und Verlauf, für mehr Leute gründet ihr eine Gruppe (bis zu sechs). Züge erscheinen sofort bei den anderen.
Dabei sind drei Beispielspiele:
| Spiel | Zeigt, wie man … |
|---|---|
| Tic-Tac-Toe | abwechselnd zieht |
| Schere, Stein, Papier | gleichzeitig und geheim wählt |
| Wie gut kennst du mich? | eigene Fragen stellt, rät und bewertet |
app/api/room).games/.vercel.json), und das macht die Züge schneller.[YOUR-PASSWORD] darin durch das Datenbank-Passwort des Projekts ersetzen. Damit legt der Deploy die Tabellen selbst an.Auf vercel.com mit GitHub anmelden: Add New → Project und dieses Repository importieren.
Unter Environment Variables eintragen:
| Name | Wert |
|---|---|
NEXT_PUBLIC_SUPABASE_URL | Project URL, z.B. https://abcd1234.supabase.co |
NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY | Publishable key (sb_publishable_…) |
SUPABASE_SECRET_KEY | Secret key (sb_secret_…), niemals weitergeben |
DATABASE_URL | Verbindungsadresse aus Schritt 1.3 (postgresql://postgres.…@…pooler.supabase.com:5432/postgres), niemals weitergeben |
Deploy klicken. Danach habt ihr eine Adresse wie https://spielzimmer.vercel.app.
Wer Supabase über die Vercel-Integration verbindet, bekommt die Variablen automatisch. Die dort verwendeten älteren Namen (NEXT_PUBLIC_SUPABASE_ANON_KEY, SUPABASE_SERVICE_ROLE_KEY) funktionieren ebenfalls, und statt DATABASE_URL wird dann POSTGRES_URL_NON_POOLING benutzt.
Jede Änderung auf dem Hauptzweig wird automatisch online gestellt. Andere Zweige bekommen eine eigene Vorschau-Adresse.
Die Tabellen entstehen aus den Dateien in supabase/migrations/, eine Datei pro Änderung, sortiert nach Datum im Dateinamen. Bei jedem Production-Deploy führt der Build die noch fehlenden Migrationen aus (scripts/migrate.js). Man muss also nie selbst SQL einfügen.
supabase_migrations.schema_migrations, derselben Tabelle, die die Supabase CLI benutzt. supabase db push funktioniert also auch.npm run migration -- kurze-beschreibung. Von Hand ausführen (mit DATABASE_URL in .env.local): npm run migrate.Hinweis: Kostenlose Supabase-Projekte werden nach etwa einer Woche ohne Nutzung pausiert. Dann im Supabase-Dashboard auf „Restore“ klicken. Die Daten bleiben erhalten.
Damit das Handy meldet „Du bist dran“, braucht der Server ein Schlüsselpaar (VAPID). Zusätzlich in Vercel eintragen:
| Name | Wert |
|---|---|
NEXT_PUBLIC_VAPID_PUBLIC_KEY | öffentlicher Schlüssel |
VAPID_PRIVATE_KEY | privater Schlüssel, niemals weitergeben |
Ein neues Paar erzeugt npx web-push generate-vapid-keys. Danach neu deployen.
Danach lässt sich das auf der Startseite unter Benachrichtigungen pro Gerät einschalten. Dort stellt jeder auch ein, worüber und von wem er benachrichtigt wird. Auf dem iPhone geht das nur in der App vom Home-Bildschirm (ab iOS 16.4). Benachrichtigt wird nur, wer die App gerade nicht offen hat.
Für das Tagesbild (neue Aufgabe um 10 Uhr, Erinnerung um 21 Uhr, Aufdecken um 23 Uhr) ruft Vercel täglich /api/cron auf (crons in vercel.json, geht auch im kostenlosen Tarif, dort irgendwann innerhalb der Stunde). Optional in Vercel CRON_SECRET eintragen (eine lange zufällige Zeichenkette): Dann nimmt /api/cron nur noch Aufrufe von Vercel an.
In Safari (oder einem anderen Browser) auf Teilen tippen und Zum Home-Bildschirm wählen. Das Spielzimmer startet dann mit eigenem Icon im Vollbild, ohne Browserleiste. Die Seite zeigt dazu auf dem iPhone selbst einen kurzen Hinweis.
Die App auf dem Home-Bildschirm hat einen eigenen Speicher, getrennt von Safari. Beim ersten Öffnen meldet man sich dort einmal an; Freunde und Punkte hängen am Konto.
Du brauchst Node.js (Version 20.9 oder neuer).
npm install
npm run dev
Dann http://localhost:3000 öffnen. Ohne Supabase-Zugangsdaten läuft ein Testmodus: Alles bleibt nur im Arbeitsspeicher, und die Browser fragen jede Sekunde nach dem neuen Stand. Zum Testen mit zwei Spielern ein zweites Browser-Fenster im privaten Modus öffnen (für Gruppen weitere Browser-Profile).
Mit echter Datenbank: .env.example nach .env.local kopieren und die Werte eintragen.
Jedes Spiel ist eine einzige Datei im Ordner games/. Mehr ist nicht nötig, die Lobby findet sie automatisch.
Weg 1, beschreiben lassen: Erzähl Claude einfach deine Idee, z.B.:
Bau ein neues Spiel: Jeder schreibt heimlich 3 Wörter auf, dann werden sie gemischt und der andere muss raten, welche von mir sind.
Die Datei CLAUDE.md erklärt Claude, wie Spiele hier aufgebaut sind, und verlangt für jedes Spiel hochwertige Animationen und eine ansprechende Optik.
Weg 2, selbst schreiben: Kopiere games/_vorlage.js nach z.B. games/mein-spiel.js und passe sie an. Die Vorlage ist ein kleines, fertiges Spiel mit Erklärungen zu jedem Teil. Mit npm run check prüfst du, ob alles passt. Nach dem Anlegen einer neuen Datei npm run dev einmal neu starten.