Devlog
Building In The Open.
Notes from a solo founder building Players Engine: engineering decisions, closed-beta lessons, and the problems in gaming communities we're trying to fix. Honest, occasionally messy, written as it happens. July 2026 brings a twelve-entry batch of engineering notes — the infrastructure lessons of the past months, from cold starts to keyless deploys, written down while they still sting.
Testing responsive layouts, 360 to 1920
Responsive is a claim until you count it: the viewport-sweep method that audited every route from 360px to 1920px, and why fixes belong to the component layer, not the page.
Read entry →Keyless deploys with Workload Identity
Retiring the immortal JSON key: short-lived federated CI credentials, per-repo trust — and the cleanup policy that deleted an image production was still running.
Read entry →Structured logging on a budget
Logs are a product with a bill. JSON events with request context, levels used as cost dials, redaction by default, and what actually gets queried during an incident.
Read entry →One schema, three jobs
TypeScript evaporates at runtime. How one schema definition produces static types, request validation and API documentation — so the three can never drift apart.
Read entry →Pub/Sub side-effects and the discipline of idempotency
At-least-once delivery means at-least-twice: idempotency keys, re-fetching truth on retry, and the outage caused by a topic nobody was subscribed to.
Read entry →Documents and graphs: why we run two databases
A document store for "give me this thing fast", a graph for "how are these connected" — plus the float-versus-integer driver bug that broke pagination at night.
Read entry →JWT at the edge
Verify authentication once at the gateway, forward verified identity, and let services do authorization only. Two traps included, one of them autobiographical.
Read entry →One repo, many deployables
A workspace of repositories: superproject plus submodules plus pnpm workspaces, one pragmatic npm exception, and docs that update in the same diff as the code.
Read entry →Environment variables and secrets without foot-guns
Configuration is dogma territory: validate everything at startup, one config module per service, and secrets that are never allowed a default value.
Read entry →Connection pooling when every service is tiny
Pooling advice assumes big servers. What changes when instances are tiny and mortal: driver singletons, cached tokens, and surviving the wake-up stampede.
Read entry →Scale-to-zero is a budget strategy
Scale-to-zero isn't an aesthetic, it's the finance department: what idle really costs, what zero costs instead, and the written criteria for paying for warmth.
Read entry →Cold starts, warm wallets: tuning Cloud Run startup
The first request after quiet pays the wake-up tax. Boot-order discipline, lazy clients and honest p95s keep it small — without paying for idle.
Read entry →What the closed beta is teaching me
A small group that trusts you to listen beats a big number that stays silent — and other lessons from the first weeks of real users.
Read entry →Fake accounts are ruining gaming communities
Bots, engagement farming, smurfing: why trust is the scarcest resource in online gaming spaces, and why it keeps losing.
Read entry →Running a closed beta with Discord, Sentry and GitHub
The feedback pipeline: forum channels, crash alerts, issue triage, and the weekly rhythm that keeps one person on top of all of it.
Read entry →Building solo with an AI pair programmer
What AI coding assistants are genuinely good at, where they fail, and how a one-person team reviews code it didn't type.
Read entry →The stack: one founder, ten microservices
Why a bootstrapped solo project runs on Cloud Run, a document database and a graph database — and what scale-to-zero really buys you.
Read entry →Why I'm building PlayersEngine
Starting this devlog with the story so far: a gamer's identity is scattered across a dozen launchers, and nobody built it a home.
Read entry →