Save system: localStorage + Firestore
Save system: localStorage + Firestore — this devlog covers a technical decision behind CONTRABAND: Edge of the Fold. It is written for other developers who might learn from the choice (or learn what to avoid).
Why this matters
Game development is a long sequence of small decisions. This one shaped how the codebase looks and how the game performs in the browser. Understanding it helps explain why certain features exist and others do not.
The context
CONTRABAND runs entirely in the browser. That constraint shapes every technical choice. We do not have native APIs, persistent processes, or installer-level access to the user's machine. Everything has to fit in a tab.
The decision
The technical choice covered here was made early and revisited at least twice. The first version was naïve; the second was over-engineered; the third is what shipped. That arc is normal for solo development.
What I would do differently
If I were starting CONTRABAND again, I would still make this choice. But I would arrive at it faster — the months I spent on the wrong path are not recoverable, but the lesson is.
What this means for you
If you are building a browser game, the lesson here transfers. The constraints we faced are common to all browser-first development.
Closing
Thanks for reading. If you have questions, reach out. CONTRABAND is a game made for the people who care about how things work — and posts like this exist for the same audience.