Survivor Fantasy League screenshot

Survivor Fantasy League

A fantasy league style web app for CBS Survivor

Spring 2026 - Current
Solo Full-Stack Developer
ReactNext.jsFirebase

Overview

Survivor Fantasy League is a passion project that combines two of my favorite things: the gamification of fantasy leagues and CBS’s Survivor. My family and I love watching Survivor together, and we always had friendly bets: who wins challenges, who finds an idol, who survives fire, etc. Over time, that evolved into spreadsheets and notebooks to track predictions and points. Building a fully realized fantasy league app for the show has taken that energy to a new level — it adds structure, stakes, and ongoing storylines week to week. While it started as a home project for friends and family, it’s grown as I’ve met more Survivor fans who want a way to “out-wit, out-play, and out-last” from the couch.

The Challenge

The core challenge was building a scoring system that felt both fair and fun, while also giving players a fast, low-friction way to manage teams during a live season. The MVP proved the concept, but scaling it introduced new needs: - support multiple leagues with clean isolation - handle concurrent users during drafts and live episodes - streamline the UX so users can get from sign-in → action with minimal clicks - create a foundation for archiving seasons and supporting future formats

The Solution

I built the application with Next.js (App Router) for a modern, performant UI and Firebase for authentication and real-time data updates. To support scoring clarity, I documented the scoring rules directly in the app (via an “About” section), so users understand exactly how points are earned. To reduce onboarding friction and improve retention, I implemented Google Sign-In via Firebase Auth so users can join a league quickly and reliably return each week. The architecture is designed so league members can see updates immediately, and the data model supports multiple leagues and seasons without cross-contamination.

Technical Implementation

Tech stack - Next.js 14 (App Router) - Firebase Firestore (database) - Firebase Auth (user management + Google sign-in) - React Context (state management) - Custom React hooks for real-time subscriptions Implementation highlights - Real-time Firestore listeners power live league views (scores, standings, rosters) - Data structured to support multi-tenant use (league → teams → roster/scoring) - Custom hooks abstract Firestore subscription logic (cleaner UI components, predictable re-renders) - Guardrails for consistency (e.g., optimistic UI updates paired with authoritative Firestore writes)

Results & Impact

Survivor Fantasy League is preparing to host its first multi-league season around Survivor 50. The immediate goal is to validate stability and engagement at a higher scale (multiple leagues, concurrent users, and repeat weekly participation). Success metrics I’ll track as the season progresses: - number of leagues created / active - weekly active users (WAU) - number of scoring updates + dispute rate - retention week-over-week - qualitative feedback from commissioners and players

Key Learnings

  • Designing for concurrency forces ruthless UX clarity. When multiple users are active (drafts, live episode scoring), attention spans are short. The fastest path from sign-in → “do the thing” is the single biggest driver of a good experience.
  • Denormalized reads make dashboards feel instant. In apps like fantasy leagues, users mostly consume “current state” views (standings, rosters, weekly points). Structuring Firestore data to fetch those views efficiently is critical for performance and cost.
  • Admin tooling is product stability. Even with a great UX, real-world leagues need commissioner tools: overrides, fixes, and transparency. Building for operations early prevents support debt later.

What's Next

Future enhancements include: - mobile app development (or a mobile-first PWA) - push notifications for live updates and roster deadlines - deeper season history + expanded stats tracking - integration with external data feeds (where available) - AI-assisted scoring workflows (suggestions + human approval), with a long-term goal of autonomous updates