notes

Small things I don't want to forget — game dev, tooling, servers.

SQLite is enough (again)

Every side project starts with "maybe Postgres this time" and ends with one SQLite file in WAL mode. Back it up after stopping the service — the WAL is merged by then, and a plain cp is a consistent snapshot.

Timers lie when the tab is hidden

Browsers throttle setInterval in background tabs to about once a minute, mobile webviews may freeze it completely. Refresh state on visibilitychange instead of trusting the counter you left running.

Retry the network, never the answer

If the request never reached the server, retry. If the server answered "no", don't — you'll only get the same "no" faster. Idempotency keys make the first case safe.

Fonts with a single glyph

Needed one digit to look different in a typewriter font. A subset font with a single glyph and unicode-range does it without touching the original.