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,即可驗證所有權並自行管理介紹。
一分鐘完成驗證正在載入完整 README。 以下為已儲存的摘錄。
A fantasy sports app for Dancing with the Stars, built for friends, watch parties, and online communities.檢視完整 README ↗A fantasy sports app for Dancing with the Stars, built for friends, watch parties, and online communities.
Next.js 14 (App Router) · TypeScript · Tailwind CSS · Shadcn UI · Supabase (Auth, Postgres, Realtime)
Each milestone should be independently testable before moving to the next.
supabase/schema.sql).env.local + .env.example)@supabase/supabase-js, @supabase/ssr)profiles row on new user sign-upleague_members row on create/join; assign commissioner role to the creator/leagues hub screen listing joined leaguesleagues/scoring_settings for their league — via update_league_settings/update_scoring_settings SECURITY DEFINER functions rather than direct table grants (no UPDATE grant exists on either table at all)couples table for the active season — real Season cast, see supabase/seed.sqlleagues.current_turn_started_at); timeout and sit-out/autopilot auto-picks go through make_auto_draft_pick (uniform random among eligible remaining; labeled auto · random in the log). Does not auto-start a draft.draft_picks on each pick; enforce one-couple-per-league uniqueness — turn order and uniqueness enforced inside the make_draft_pick SECURITY DEFINER function, not trusted from the clientroster_slots from draft_picks when the draft completes — roster_size is computed as floor(couples ÷ members) and set automatically when the draft starts (no longer commissioner-editable); the draft stops at member_count × roster_size, leaving any remainder couples undrafted for the season rather than splitting unevenlycomputeWeeklyScores pure function (roster points + survival + prediction matches + podium bonus) — src/lib/scoring.ts, no DB access, fully unit-testablecomputeWeeklyScores: single dance, multi-dance week, judges'-save override, finale podium — npm test (Vitest, newly set up this phase)weekly_manager_scores for every affected league — runs server-side via the service_role key after checking profiles.is_super_admin (results entry is a cross-league admin operation, not scoped to one league's RLS)applyEpisodeResults call against two live leagues with different weights, producing different, correctly-computed totals from the same underlying resultsepisodes.locks_at — via submit_prediction (SECURITY DEFINER, same pattern as make_draft_pick); predictions are also hidden from other league members until lock, then revealed league-wideapplyEpisodeResults already fed predictions into computeWeeklyScores); the actual gap was that predictions had no grants/RLS at all, so nothing could read or write a row until this phaseNote: episodes previously only ever came into existence already completed (Phase 5's results form always created+finished them atomically), which left no way for a prediction to have anything to lock against ahead of air. Fixed by making the same results form dual-purpose: submitting with no couple scores just schedules the episode (status: 'upcoming') with a lock time; adding scores later flips it to completed.
end_week is null) points at a couple whose status = 'eliminated'. Spoiler-Free hides that occupancy (classifyRosterOccupancy) until the elim week is revealed — Recast copy does not name who went home./leagues/[id]/waiversprocess_reverse_standings_waivers, approve_waiver_claim/reject_waiver_claim)roster_slots on an approved claim — closes the old row (end_week = claim week) and inserts a new one (start_week = claim week + 1), all inside one finalize_waiver_claim helper shared by all three resolution pathsFound and fixed a real Phase 6 bug while building this: roster_slots had no SELECT grant/RLS at all, so the Phase 6 roster card's query was silently getting permission denied and rendering nothing for every user (the error was never checked). Fixed here since this phase needed real roster_slots reads anyway.
#D4AF37) theme across all screens — fixed theme, no light/dark toggle (there's no toggle mechanism in the app at all); the palette lives directly in :root rather than behind a .dark classprofiles had a blanket UPDATE grant with only row-level RLS (no column restriction), so any signed-in user could set is_super_admin = true on themselves directly. Confirmed exploitable, fixed with a column-level grant (display_name, avatar_url only), verified the fix and confirmed no prior exploitation had occurred. Also tightened an EXECUTE grant on an internal helper function that had been left broader than necessary.