25 April 2026Origin Story

I Vibe Coded a Football Prediction App. Here's What Actually Happened.

Other people's frustration with Fantasy Football is where BangOn started. Here's the honest account of what it took to build it.

There's a particular kind of frustration that comes from playing Fantasy Premier League for ten years and never quite finishing where you think you should. Or so people tell me. I was never that bothered, too time-consuming. You've done the research. You know the fixtures. You've read the injury reports. And then your captain gets subbed off at half time and your wildcard is wasted and somehow Dave from accounts is top of the league again despite picking his squad based on shirt colours.

Other people's frustration is where BangOn started.

The idea was simple: strip fantasy football back to the one thing everyone actually has an opinion on. Not who's going to score. Not which goalkeeper has the best clean sheet odds. Just — what do you think the score will be?

Predict the exact score. Get it right and that's a BANG ON. Get the result right but miss the score and you earn a small bonus. Get it wrong and you lose points. Highest total wins the game window. Anyone who watches football can play. It takes two minutes. You can do it on the toilet.

That was the pitch. Now we had to build it.


THE VIBE CODING PART

Here's the thing about vibe coding that nobody tells you upfront: the vibe is real, but the coding is also real. You don't just describe what you want and watch it appear. You describe what you want, it appears, and then you spend the next hour figuring out why it's subtly wrong in three different ways.

What vibe coding actually is — at least in my experience — is having a very good pair programmer who never gets tired, never gets precious about their code, and can hold the entire codebase in their head simultaneously. The ideas still have to come from somewhere. The judgment calls were still mine. The "does this actually feel right when you use it" test still requires a human being to use it, and sometimes some mates to point out the bleeding obvious bit I am missing.

But the speed is genuinely different. Features that would have taken days to spec, design, and implement arrived in hours. The database schema was drafted, reviewed, and refined in a single afternoon. The scoring engine was written, tested, and debugged before lunch. I'm not an expert coder but I have always played about semi-professionally. Having an expert by my side just makes it miles easier.


WHAT WE ACTUALLY BUILT

BangOn runs on Next.js and Supabase. It has:

- A predictions engine that locks each game at kickoff and scores it automatically when results come in

- A leaderboard that updates live during matches, with floor scoring so nobody falls hopelessly behind

- Private groups with invite links so you can play against your mates

- A global leaderboard for those who want to compete more widely

- Support for multiple competitions — Premier League, World Cup, and more to come

- A PWA that installs on your phone like a native app

- Email notifications for deadlines and results

- An admin panel for managing game windows, fixtures, and syncing results from external APIs

None of this is trivial. This is a real production application with real users. Row Level Security on every database table. Server-side session validation. Rate limiting. The works.


THE FIRST VERSION

The first working version was rough. Predictions saved. The leaderboard showed scores. The scoring was backwards (lower was better, which confused everyone, including me — more on that in a later post). The design was functional rather than beautiful.

But it worked. You could log in, predict the scores for a game window, and come back during or after the matches to see how you'd done. That feedback loop — the moment you realise you called the Palace result exactly right (0-2, unfortunately) and you're sitting top of your group — that felt like something.

I showed it to a few people. They had opinions. The opinions were useful. I shipped changes the same day.

That cadence — idea, build, feedback, ship — is what vibe coding enables that traditional development doesn't. There's no two-week sprint. There's no backlog grooming. There's just: does this work, does it feel right, what's next.


THE HONEST BIT

It's not all smooth. The AI makes mistakes. Sometimes confident ones. You catch them in testing, or sometimes in production, and you fix them. A properly sceptical senior developer would find things to argue about in any vibe-coded codebase, so I asked Claude Code to pretend to be one and audit the code. It's a simple question but Claude isn't going to ask itself.

The discipline has to come from somewhere. In my case it came from asking "are you sure about that?" and "what could go wrong here?" At several points during the build I stopped and asked Claude to look for security holes, to challenge its own decisions, to find what it might have got wrong. It found things. We fixed them. That back-and-forth — human scepticism driving AI re-evaluation — is probably the most important part of the whole process.

The AI is a brilliant executor. The thinking still happens between your ears.


More posts coming. The security audit. The scoring overhaul. The cron job that kept failing at 3am.

For now — if you want to play, it's free. Just predict the scores.