Skip to content

Blog

Random posts.

Cleaner Invitation Registration

The invitation flow now makes the email constraint obvious — both in the invite itself and on the registration form. What We Shipped Invitations in GameHub are scoped to an email address. That’s a deliberate security choice — the invite token is issued for a specific recipient, and accepting it with a different address shouldn’t be possible. The problem was that nowhere in the flow did we actually say that. Players received an email, clicked the link, and landed on a blank registration form with no indication that the email field mattered or was locked.

Read more →

March 31, 2026

Generation Hardening and Member Controls

After shipping the game generation workflow, we ran a structured post-delivery code review, rewrote the planet and deposit algorithms to match the reference game rules, refactored the giant controller and page component into focused pieces, and added the GM member controls needed before turn report work can begin. What We Did Yesterday’s post described the full generation workflow — 25 tasks, 163 tests, every phase from star placement through empire assignment. That shipped. Today’s work was about what you do after something ships: look hard at it, fix what doesn’t hold up under scrutiny, and close the remaining gaps before moving on.

Read more →

March 31, 2026

Laravel: Game Generation Workflow

The game generation workflow is complete. A GM can now take a freshly created game through star generation, planet generation, deposit generation, home system placement, empire assignment, and activation — all from a single page, all driven by a deterministic seeded PRNG. What We Built This session delivered the full game generation workflow — the process by which a GM transforms an empty game record into a playable universe. It touches every layer of the application: migrations, models, generator services, controller actions, a React frontend, and an extensive test suite.

Read more →

March 30, 2026

Laravel: Best-Practices Review and Cleanup

A full codebase review turned up security gaps, N+1 queries, missing indexes, data-integrity risks, and a pile of low-severity code smells. Every finding is now resolved. What Happened After shipping the games admin section, we ran a structured best-practices review before adding more features. The findings were catalogued in a BURNDOWN.md and resolved one at a time. This post covers what was found and why each fix matters.

Read more →

March 30, 2026

Laravel: Games Admin, Member Management, and Dashboard

The Laravel web app now has a full games admin section. Admins and GMs can create, browse, and manage games. Members can be added, deactivated, and reactivated without losing their game history. What We Built Today’s session covered four areas: app branding, a games list page, a game detail page with member management, and a dashboard card showing active game status.

Read more →

March 29, 2026

Switching the Web App to Laravel

The player-facing web application is moving to Laravel. Documentation stays in Hugo. Player docs are getting reorganized to be easier to find. Why Change? The React + Go stack worked. It got us from zero to a working dashboard with auth, orders, and reports. But as the game grows, the web application needs to do more — and the custom Go HTTP layer was turning into a framework whether we wanted it or not.

Read more →

March 29, 2026

Sprint 12 Cleanup: Parser Tests, CLI, and Doc Fixes

Post-sprint cleanup for Sprint 12. Grammar docs corrected, file-driven parser tests added, a new CLI parse command shipped, and a referee how-to published. What Happened Sprint 12 shipped the order parser and the POST /orders/parse API endpoint. The post-sprint review — documented in the previous blog entry — found eight problems and fixed them all. This cleanup session tackles the next layer of housekeeping: making sure the grammar docs say what the parser actually does, adding file-driven test coverage, and giving referees a CLI tool they can use without touching the API.

Read more →

March 27, 2026

Sprint 12: MVP Order Language

Sprint 12 is complete. The API server can now parse MVP order text into typed domain values and return per-line diagnostics in a single pass. For Players The full command reference is now published. Every order available in v0 — with syntax, parameters, and examples — is documented in the Commands section of the player reference. If you’ve been waiting to know exactly how to write an assemble order or move a ship, that’s the place to start.

Read more →

March 27, 2026

Sprint 11: Frontend Dashboard Enhancement

Sprint 11 is complete. The dashboard now shows live colony, ship, and planet summary cards, and the sidebar has three new destinations: Colonies, Ships, and Star List. What We Built Sprint 10 gave us a dashboard API endpoint that knows how many colonies and planets an empire has. Sprint 11 makes that visible — replacing the two-button placeholder dashboard with real data cards and connecting the sidebar to three new pages.

Read more →

March 26, 2026

Sprint 10: Dashboard API

Sprint 10 is complete. The API server now exposes a dashboard endpoint — colony counts, planet counts, and ship counts — ready for the Sprint 11 frontend to consume. What We Built Sprint 9 gave empires a real starting colony. Sprint 10 gives the frontend something to ask about it.

Read more →

March 26, 2026