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
Riftbound Social Media & Collection app
Translation pending
GamesJavaScript · CSSGitHub @GCheeYangOnlineOwner 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.
Everything here happens in your own browser, on accounts only you can create.
Once you're through it, send me back the four values marked → send me this
and I'll wire the app up to them.Read the full README ↗Everything here happens in your own browser, on accounts only you can create. Once you're through it, send me back the four values marked → send me this and I'll wire the app up to them.
service_role key — that one
must never leave Supabase) → send me thissupabase/schema.sql from the project files I gave you, paste the
whole thing in, and click Run.media storage bucket for photos/videos.
It's safe to re-run if you ever need to.This is the fiddliest part — Google requires its own project just to hand out an OAuth client ID.
https://<your-project>.supabase.co/auth/v1/callback) — add it under
"Authorized redirect URIs" on the Google Cloud credential.https://<your-project>.supabase.co/auth/v1/callback) — add it under
Redirects on the Discord OAuth2 page.Note: signing in with Google and signing in with Discord create separate accounts even if they share an email — there's no automatic merging.
Web Push needs its own keypair (separate from Google/Supabase) that proves
to browsers your server is who it says it is. I already generated one for
you — see the vapid_keys.txt file I sent alongside this doc. Two values
in there:
VAPID_PUBLIC_KEY — goes in the app's config (I'll wire this in for you,
see the bottom of this doc), safe to be public.VAPID_PRIVATE_KEY — secret, never goes in the app. It only lives as a
Supabase Edge Function secret (next step).To actually send push messages when someone posts or comments:
supabase/functions/send-push/index.ts.
This needs the Supabase CLI running somewhere with real internet access
(my sandbox can't reach Supabase directly — see the note in-chat) — your
own machine works fine: npx supabase login, npx supabase link --project-ref <your-project-ref>, then npx supabase functions deploy send-push.npx supabase secrets set VAPID_PUBLIC_KEY=... VAPID_PRIVATE_KEY=... VAPID_SUBJECT=mailto:[email protected] SITE_URL=https://your-deployed-url).
SUPABASE_URL and SUPABASE_SERVICE_ROLE_KEY are provided automatically
by Supabase — you don't need to set those two yourself.posts, event INSERT, target: the send-push Edge Function.comments, event INSERT, target: the send-push Edge Function.That's it — new posts notify a poster's followers, new comments notify the post's author.
The "Scan a pack" tool in the Import modal lets you upload a photo or short video of a pull and has an AI read off the card names, instead of typing or speaking them. This needs its own Edge Function plus an API key from console.anthropic.com — a separate account/bill from a claude.ai (Claude Pro) subscription; Pro doesn't include API access.
config.js — that file is
public):
npx supabase secrets set ANTHROPIC_API_KEY=sk-ant-...
npx supabase functions deploy identify-cards
(needs npx supabase login and npx supabase link --project-ref <your-project-ref> first if you haven't already for the push function).That's it — the app calls this function itself; nothing else to wire up in the dashboard.
Steps 1-3 above only need doing once by hand. After that, a GitHub Actions
workflow (.github/workflows/deploy-functions.yml) redeploys every function
under supabase/functions/ automatically whenever that folder changes on
main — the same way Vercel redeploys the site on every push, so you don't
need to run the CLI again for future function edits.
It needs one more one-time secret, since deploying still requires proving who you are:
SUPABASE_ACCESS_TOKEN, and paste the token
in. (Add it there, not in chat — it's a credential.)That's it; the next push that touches supabase/functions/ deploys itself.
Push notifications (and the service worker they need) only work over HTTPS with the app actually deployed somewhere — not from a downloaded file or the claude.ai preview. Two good free options:
Let me know which one you'd rather do and I'll tailor the deploy steps and hand you a ready-to-drop/push folder.
What to send back when you're done: Supabase Project URL, Supabase anon
key, Google OAuth Client ID, Discord OAuth Client ID (if you set that up
too), and which hosting option you picked. You don't need to touch
config.js yourself — send me those values and I'll fill it in and
rebuild the deploy folder.