Bracketology
Fantasy sports, for reality TV. 200,000+ players, daily prediction pools, season-long leagues, iOS & Android.
Marketing site for Bracketology — free season-long fantasy leagues across reality TV (dating shows, competition series, talent, cooking, awards), with daily prediction pools for cash prizes and a social leaderboard. Drives downloads to the iOS and Android apps and houses all editorial content (blog posts, drinking games, watch parties, show breakdowns).
How it's built. Astro front end with React components and Tailwind, deployed on Vercel. Sanity CMS is the source of truth for every editable content type — Shows, Contestants, Blog Posts, Authors, Categories, Networks, Partners, Drinking Games, Watch Parties. The team logs into Sanity Studio and edits any of it in a clean, no-code UI. No developer in the loop.
Automations & database cleanup.
Newsletter → blog sync. A weekly cron pulls new posts from the Beehiiv newsletter API, converts the HTML to Sanity Portable Text, uploads images, and auto-categorizes each post by detecting which shows it mentions. Duplicate detection prevents re-syncing.
Historical backfill. A one-time migration script paginated through years of past Beehiiv posts, deduped against Sanity by beehiivId, and imported the full archive with featured and inline images.
Contestant cross-show sync. A Sanity webhook (HMAC-verified) fires whenever a contestant is edited. It finds every profile sharing that name across shows and syncs their secondary references — so a contestant who appears on multiple shows stays consistent everywhere automatically.
Schema migrations. Bio fields normalized from plain strings into structured Portable Text. Network strings (e.g. "cbs, paramount+") rewritten into proper document references with intelligent aliasing. Single-season field expanded to a multi-seasons array so contestants can span multiple seasons cleanly.