The app died of a cold start
Sanfanson's autopsy is infrastructural: a free Render backend that takes minutes to wake, so slow its own creator thought the API tokens had run out. The resurrection plan: everything into Firebase, and feedback moved off the critical path.
// trace: where this idea came from
- ↳ video diary @ 11:57 (el arranque en frío)
- ↳ video diary @ 17:18 (tan lento que parecía muerto)
- ↳ video diary @ 16:11 (la migración a un solo Firebase)
Sanfanson, the language game that predates the company, comes out of the drawer, and its post-mortem is the most technical teaching of the batch. The original stack was assembled from ChatGPT’s free-tier suggestions: Netlify for frontend, Firebase for auth, Render for the backend ▸ 10:20. Reasonable-sounding, all free, and fatally flawed in one specific place: Render’s free tier puts the backend to sleep, and waking it takes minutes ▸ 11:57.
How bad is a cold start, experientially? Bad enough to fool the person who built the system: “hubo un tiempo en que yo decía: se me acabaron los tokens de GPT, porque realmente no me cargaba nada”, and later he discovered it still worked, it was just waking up ▸ 17:18. If the creator reads the latency as death, every visitor from that first Reddit post read it the same way. Add the random Netlify URL where a domain should be ▸ 12:23, and the app didn’t lose to its competition; it lost to its own plumbing.
el usuario no distingue entre lento y muerto →
The resurrection plan attacks exactly those wounds. Consolidate everything, backend, frontend, secure keys, auth, analytics, into Firebase alone ▸ 16:11; hang it on a real subdomain, sanfanson.luarai.com, now that the company owns a domain. And redesign the game loop around the same latency lesson: instead of phrase, wait, feedback, the unpublished minigames run “frase, frase, frase, feedback, feedback, feedback” ▸ 18:15, batching the slow part out of the player’s rhythm.
Free infrastructure is never free; it’s paid in the currency users care about most. The Divo-era Juan, who rejected a polling job to save server pennies, is now re-architecting his oldest app with the matching lesson from the other side: spend where the user is waiting…
// continued in
no entry has continued this idea yet: the arc is still open