A fantasy league app for a certain British baking show.

Blind Bake League

Each week, my friends and I pick who'll be Star Baker, who goes home, and who tanks the technical. Blind Bake League turns that into a real product: weekly picks, a scoring engine, standings, and reminders that send themselves.

At a glance

  • Role: Solo. Commissioner, product owner, designer, and builder, alongside Claude Code

  • Built with: Next.js, Postgres, Auth.js magic-link sign-in, Resend for emails, Railway with separate staging and production

  • Timeline: August to September 2026, live for the current season

  • Live at: https://blindbakeleague.com/

The problem

I've run this league for four years because I love friend activities that are a little bit silly. The old system was a Google Form for picks, a spreadsheet where I did the scoring by hand, and a group text where I nagged everyone before the deadline.

It worked, but all of it ran through me. If I was traveling on a Tuesday, the league basically stopped. Nobody could see how they'd scored without asking me, and the scoring rules lived in my head and one spreadsheet tab I guarded like my sourdough starter.

The real job wasn't "just make an app version of this." It was taking the commissioner out of the critical path without losing what makes the league fun.

Constraints that shaped it

  • The show's name is off limits. The production company owns the marks on both sides of the Atlantic, and a big baking brand owns "Bake-Off" in the US. The app needed its own identity from day one: no show name, no contestant photos.

  • The scoring rules are weird on purpose. Our league has a swap penalty if you pick someone for Star Baker and they get eliminated. The engine had to match the rules we actually play by, not a cleaner version of them.

  • Everyone picks from their phone on a lunch break. No passwords to forget, no wall of radio buttons, and a clear signal for when picks lock.

Screenshots from the app.

What I built

I ran it like a real product: a Linear project with 40+ tickets, separate staging and production environments, and smoke tests before anything touched the live league.

  • For players: magic-link sign-in, weekly picks with dropdowns and a visible lock state, season-long picks for the winner and final three, standings with a per-category breakdown of what scored, and past seasons for bragging rights.

  • For commissioners: one compact grid to enter a week's results, automatic tracking of who's been eliminated, co-commissioners so the league survives vacations, and members who can sit out a season without losing their history.

  • The fun stuff: bonus picks like Handshake, Soggy Bottom, and Bake Collapse, plus automated pick-deadline reminder emails that replaced my weekly group-text nagging.

The look is pastel and tent-inspired, with bunting energy: cream paper backgrounds, warm ink, butter, rose, sage, and sky accents, with a corresponding dark mode for folks who have that setting turned on in their browsers ro operating systems. Bakers show up as initial avatars instead of photos, which keeps it friendly and keeps me out of likeness and licensing trouble.

Screenshot of standings.

Decisions worth showing

Multi-league from day one. The first version only needed to run one friend league. I built for many anyway, because a work league was already on the table. Spinning it up is now "create league, invite people."

Smoke testing changed the model. Series Winner and Final Three started as weekly checkboxes. Clicking through Week 1 for real made it obvious they're season-level bets that can't be scored until the finale, so they became their own thing.

Admin UX counts as UX. The admin panel started as one long stacked page, and once a league had two seasons you couldn't tell which one you were editing. Making the season a first-class selector at the top fixed a whole class of mistakes before anyone made them.

The name went through trademark due diligence. I worked through the marks, brainstormed independent names, and landed on Blind Bake League. Blind baking means committing to the crust before you know the filling, which is exactly what a draft is.

What's next

Rolling out the work league, SMS reminders alongside email, more bonus pick types, and a mobile polish pass. If it holds up over a full season, there's a version of this other leagues could sign up for.

Right now, I have a personal league and a work league, as well as a friend and her league using the app.

Next
Next

Bracket Bonanza