Technical writing on progressive web apps, offline-first architecture and browser games. Each piece comes out of something we shipped, not something we read about.
A Trusted Web Activity puts your existing web app on Play with no port and no second codebase. What Bubblewrap generates, why Digital Asset Links is the step everyone gets wrong, and what Play actually reviews.
Six rules that keep our products small: no engine unless the frame rate demands it, pure logic separated from rendering, synthesised audio, per-feature code splitting, and treating every dependency as a permanent cost.
Local-first means the user's data is older than your code. Namespacing, a version field, migrations, and the three failure modes that will corrupt a save if you don't handle them.
Install friction is the tax every mobile game pays before anyone plays it. PWAs remove that tax — and for the categories that don't need a GPU, they're now genuinely good enough.
Every sound in OmniPlay is generated in the browser at runtime — no MP3s, no sprite sheet, nothing to precache. Here's the Web Audio graph behind a dice knock, and the autoplay rule that breaks it.
A service worker is a programmable proxy sitting between your page and the network. Here's the lifecycle, the caching strategies worth knowing, and the update bug almost everyone ships at least once.
How each OmniPlay game stays fully self-contained — a pure rules engine, a lazily-loaded bundle, and a five-field registry entry — so a fourth game costs the first three nothing.