Swapping Clerk for Firebase, and finding a way to actually deploy
Nobody plays a football manager game for the sign-in screen. But if only one person can log in, and that person is me, on my machine, then it is not a multiplayer game — it is a demo with ambitions. Three days after the big April landing I went after both halves of that problem: an identity path I owned end to end, and a deploy path that was not me remembering which commands I ran last time.
The identity half was a migration from Clerk to Firebase Auth, across the API and the client. Token verification, profile sync, email and password, Google sign-in, and the onboarding trigger still firing when a new manager turns up, so a fresh account lands in onboarding instead of an empty page. The delivery half went out the same day: the first Terraform-and-Actions shape covering DNS, Pages, object storage and API hosting, with host configuration treated as environment configuration instead of a string hiding somewhere it had no business being.
Auth migrations do not punish you for missing buttons. They punish you for the two seconds between "account created" and "profile exists", which is where every ugly edge case lives. That is the part I spent real time on. I also tightened access controls and locked down the public ops surfaces while I was in there, which is as much detail as this diary is going to give you — a devlog is not a runbook.
The reason Firebase won was mundane: a clean emulator story for local development, and a claim model I knew I would want later when admin tooling needed a notion of "this person is FA staff, that one is a manager". Granted, it is the second identity rewrite in a codebase barely a year old, which is not a great look. I paid it once so that every manager and FA surface after it shares one answer to "who is this?".
I could have stayed on Clerk and told myself I was focusing on gameplay. That only makes the migration more expensive later, when there are real accounts attached to real clubs. I could also have left deployment alone until the game felt finished, but a staging environment you describe verbally is not a staging environment. Better to have the boring path in place and refine it than to invent it in a panic.