1. Week notes: clicking around like a manager who's never heard of Nest
    weekly

    Old URLs finally match the live tree, a handful of screens that fell over the moment you clicked them, youth and Features behaving like a club, and stars that rank against your own league.

  2. So much for the librarian
    milestone

    Goose takes the schema, the Nest tree comes out of the repository, and seeding runs as Go — retracting the hedge I wrote ten days earlier.

  3. The public door moves to Go
    milestone

    Photographing the Nest API before copying it, cutting over one domain at a time, and finally turning off /v1 — with Nest keeping the schema and the seeds. For now.

  4. A real 1–20, and roles you have to teach
    milestone

    Attributes stop being remapped for display, current ability counts the skills outside a player's role, and listed positions become a familiarity score you train, decay, and pay for on Saturday.

  5. LB, DL, and a game that speaks one language
    milestone

    Who a player is, where a body stands in this shape, and what a manager reads on the pitch — three different questions that had been sharing one answer.

  6. Week notes: Free Agent 15 from Saudi Arabia
    weekly

    A name generator that didn't survive the move to Go, badges my one tester called generic, onboarding tours worth replaying, and fixtures that aren't a mirror after Christmas.

  7. Week notes: a Batumi blackout, contract jeopardy, and head-to-heads
    weekly

    A power cut, a balcony, and a week spent giving players the agency to say no — plus richer inbox messages and every meeting two clubs have ever had.

  8. Opening the books: an engineering diary for The Dugout
    prologue

    Why I'm keeping a diary of building The Dugout, what goes in it, and what stays out.

  9. Week notes: Tbilisi, clinched titles, and tables that tell you
    weekly

    Eleven weeks of staging, a league season nearly over, and nobody being told they'd won it or gone down — plus grids that finally behave the same everywhere.

  10. Potential should be a ceiling, not a rumour
    milestone

    Birth potential becomes a hard ceiling, growth rewards the training ground you actually built, and weekly youth intake samples the division you actually play in.

  11. A nursery for the pyramid
    milestone

    Youth academy intake, U21 league and cup, eligibility and registration — plus the last of the duplicate tick paths leaving Nest for good.

  12. Week notes: one request instead of twelve, and throwing things away
    weekly

    Club-house and route bootstraps with stale-while-revalidate, a verified dead-code pass, and some quiet tightening I'm not going to describe in detail.

  13. Deleting the safety net
    milestone

    With Go running the tick on staging, Nest loses its processors and cron producers for good — it answers HTTP and enqueues, and that's the whole job now.

  14. Week notes: the draw fix I promised, and finally being able to see the workers
    weekly

    A reconciler takes over cup and playoff progression, restart safety gets teeth, the bracket stops stacking cards on itself, and the Go workers show up on a dashboard.

  15. Moving the heartbeat to Go
    milestone

    A Go worker and scheduler speaking Nest's job shapes, gated by queue ownership — plus the claims, dedupe keys, and ledgers that make a restart boring.

  16. Letting a model write the words, never the numbers
    milestone

    A narrative queue for briefings, articles, and press copy with procedural fallback — then giving up on running a model in my own cluster and moving to a hosted one.

  17. Every nation gets a cup
    milestone

    Per-country Sunday knockout cups — progressive draws, cup-tied lineups, prize money, discipline, and a full Cup section in the game beside the league.

  18. A front porch, and a DNS switch I didn't flip
    milestone

    Prerendered marketing site — homepage, blog, legal pages — deployed to Cloudflare Pages on a staging project, while the apex domain stayed deliberately unpointed.

  19. Making match day feel live without lying about it
    milestone

    Matches simulate before kickoff, then every client reveals the stored timeline minute by minute — with a commentary registry that has its own RNG so flavour never touches the result.

  20. Giving the world a newspaper and a microphone
    milestone

    News at global, national and division level with procedural match write-ups, plus press conferences as a modal so answering the media doesn't drag you out of the clubhouse.

  21. A day in the life of the world, and a season that ends properly
    milestone

    An ordered daily tick that moves the world in a known sequence, match simulation kept on its own clock, and cross-tier playoffs after MD30 that don't poison the league table.

  22. Transfers, take two: a market instead of a price field
    milestone

    Listings, shortlists, offers with timers, windows and board fee limits — plus an economy the FA desk can tune without a redeploy. No loans yet, on purpose.

  23. The FA needs a desk of its own
    milestone

    Building the admin console as a separate Angular app — seasons, clock controls, seeding, user lookup, queue visibility and maintenance mode, all with preview-before-apply.

  24. Swapping Clerk for Firebase, and finding a way to actually deploy
    milestone

    Paying for a second identity rewrite in a young codebase, and putting the first Terraform-and-Actions path in place so the game could live somewhere that wasn't my laptop.

  25. A second wind, and the whole loop in one go
    milestone

    Six quiet months, then April 2026 lands match day, transfers, training, finances and the inbox in one world — and swaps Spartan for PrimeNG on the way in.

  26. Coming back to my own code and writing a list
    milestone

    October 2025 was a handshake with the codebase after months away — bump the dependencies, delete the auth UI that had already died, and finally write down what was actually left to build.

  27. Badges, then nothing for four months
    weekly

    One June commit generates team badges, and then the log goes quiet through July, August and September. There's no hidden epic in there. I just stopped.

  28. Where does a manager spend their first ten minutes?
    milestone

    May 2025 was nav, a squad list, player photos, fixtures and form — the month the browser started to matter and the empty panels started to nag.

  29. A match engine with nowhere to play
    milestone

    The rest of April 2025 was me giving the engine somewhere to live — an API, a login, seasons, seeders, and a first Angular shell. Roughly two hundred commits, half of which I've since thrown away.

  30. The first commit is a liar
    prologue

    Git says this started on 16 April 2025. It actually started in 2024, with sketches, borrowed abstractions, and a crude simulator I ran until the scorelines stopped being funny.