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
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Track all standard and custom TCG sets!
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Track your Pokémon TCG collection — official sets pulled live from pokemontcg.io. Log every variant you own (holofoil, reverse holo, 1st edition, alt art, promo…), what you paid, and current market value, with card images throughout. Build master sets — checklists of every real printing of a Pokémon (e.g. "Piplup Masterset") — and track your progress toward completing them. Built as a mobile-first responsive web app (Next.js) with an eye toward a native app later — the plan is to reuse this same Supabase backend with a React Native client down the road.README 전문 보기 ↗
Track your Pokémon TCG collection — official sets pulled live from pokemontcg.io. Log every variant you own (holofoil, reverse holo, 1st edition, alt art, promo…), what you paid, and current market value, with card images throughout. Build master sets — checklists of every real printing of a Pokémon (e.g. "Piplup Masterset") — and track your progress toward completing them.
Built as a mobile-first responsive web app (Next.js) with an eye toward a native app later — the plan is to reuse this same Supabase backend with a React Native client down the road.
Sign up / log in at supabase.com and create a new project (the free tier is enough to start).
In the SQL editor, run supabase/schema.sql once —
this creates all tables, indexes, and row-level-security policies. (If
you'd already run an older version of this file, run
supabase/migrations/0001_mastersets_pivot.sql
instead — it upgrades an existing database without losing data.)
Go to Project Settings → API. You need two values from there:
You'll also need the service role key (under Legacy API Keys, or the newer secret key) for the Stripe webhook step below — keep this one out of the browser entirely, it bypasses all row-level security.
Sign up at stripe.com — no business verification is needed to use test mode. From the Stripe dashboard:
sk_test_...) under Developers → API keys.stripe listen --forward-to localhost:3000/api/stripe/webhook
This prints a webhook signing secret (whsec_...) — use that for local dev.
For a deployed app, create a webhook endpoint in the Stripe dashboard
pointing at https://your-domain/api/stripe/webhook listening for the
checkout.session.completed event, and use the signing secret it gives you.MASTERSET_AUTOPOPULATE_PRICE_CENTS).4242 4242 4242 4242, any future expiry, any CVC. No real charge
occurs in test mode.Copy .env.local.example to .env.local and fill in the Supabase URL/anon
key, service role key, and Stripe keys from the two steps above.
POKEMONTCG_API_KEY is optional — the API works without a key at a lower
rate limit (30 req/min) and, in practice, is noticeably less reliable
(intermittent 500s) without one. For a free key with a much higher limit,
sign up at dev.pokemontcg.io — recommended
before using the "Import Excel" flow, since it looks up every row against
the API.
npm install
npm run dev
If you're testing the auto-populate payment flow locally, also run
stripe listen --forward-to localhost:3000/api/stripe/webhook in a second
terminal so webhook events reach your dev server.
Open http://localhost:3000. Email confirmation is on by default in Supabase — check the inbox for the address you sign up with (or disable confirmation in Authentication → Providers → Email for local testing).
tcgplayer.prices object maps directly to variants
(Normal, Holofoil, Reverse Holo, 1st Edition Holofoil, etc.) with market
price per variant.collection_entries is the table that represents "what you own" —
quantity, condition, price paid, a market-price snapshot, and a
denormalized image/name so your collection still renders correctly even if
a card's source data changes later. Always points at an official card via
external_card_id.master_sets + master_set_cards) are checklists you
curate — a name plus a list of official cards, added either one at a time
via search or automatically via the paid auto-populate feature.
master_set_cards membership is independent of ownership: a master-set
page cross-references its cards against your collection_entries (by
external_card_id) to show which ones you already own.masterset_purchases tracks the paid auto-populate feature. A row is
created pending when checkout starts; it only ever flips to completed
from the Stripe webhook handler (src/app/api/stripe/webhook/route.ts),
using the service-role key to bypass RLS — the client is never trusted to
self-report a successful payment. That handler also does the actual
population (searching pokemontcg.io for every name on the purchase and
inserting matches into master_set_cards).Collection → Import Excel (/collection/import)
bulk-adds official Pokémon cards straight to your collection. You list Card
Name (+ ideally Set Name and Card Number), and each row is matched against
the pokemontcg.io API to fetch the image and current market price
automatically. Set Name and Card Number matter — many card names are
reprinted across sets, and some sets reprint the same name more than once
(alt art, secret rare); without both, the importer picks the first match and
flags the row so you can double check it. Returns a results summary with
per-row warnings rather than failing the whole file.
The app deploys cleanly to Vercel — connect the
repo and add the same environment variables from .env.local in the
project settings, using live Stripe keys (and a live-mode webhook
endpoint) once you're ready to accept real payments instead of test ones.
market_price snapshots stay current over time