A match engine with nowhere to play
A match engine on its own is a very lonely piece of software. You pipe JSON in, you get a result out, you nod, and then nothing happens. There's no fixture list waiting for it, nobody whose Saturday it ruins. So the day after I'd cleaned the engine up I started building the thing it was missing.
The bet, if you want it in one line: a v1 engine only becomes interesting once a manager can live in a world that keeps handing it fixtures.
April went quickly after that. A Nest API and a base web app on the 17th, Tailwind and a draft dashboard right behind them. Then a week of the stack growing teeth — gRPC and Envoy, proto definitions, Clerk for sign-in, webhooks so a new user turns into a row I own, entities for users and profiles. Somewhere in the middle of all that plumbing the domain finally started to look like football instead of infrastructure: competition phases, match calendar entries, a season schedule generator, seeders that could actually produce a fixture list, indexes so match queries didn't crawl. By the end of the month the client could show you the countries available, continents existed as data instead of a hardcoded list, Spartan UI primitives were coming in, and a brand-new user could be handed a team.
Roughly two hundred non-merge commits, for the record. Many of them titled "Update". Some titled "More updates" 😁. I wouldn't read the log for insight.
The hard part of that fortnight wasn't any single layer, it was that every single layer had an obviously correct design waiting to be argued about. RPC or REST. A complete design system or a handful of components. Seed data that's genuinely realistic or seed data that just produces a fixture. Any one of those arguments could have eaten the month, and the actual risk was never picking wrong — it was never getting far enough for a manager to see a clubhouse at all. So I wired things only as far as the next visible thing: auth far enough to make a user, seasons far enough to have fixtures, a client far enough to show the next match.
That has a cost and I may as well name it. gRPC as the main path to the client, Clerk sitting at the centre of identity, Spartan as the UI kit — all three of those are gone now. Months of them, replaced. That said, a world skeleton existed by the 30th of April, which is more than perfectionism would have given me.
Next month the question stops being "does a world exist" and becomes "is it anywhere you'd want to spend ten minutes".