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분 만에 확인하기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.