BeamNG.Earth
A 1:1 scale streamed Earth for BeamNG.drive: real elevation and satellite imagery, floating origin, LOD streaming from a companion server
Fantasy sports for Dancing with the Stars.
GamesTypeScript · PLpgSQLGitHub @kylieauOnlineOwner 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.
A fantasy sports app for Dancing with the Stars, built for friends, watch parties, and online communities.Read the full 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.