

Your offline-first app is not a sync queue.
Most offline-first apps just queue writes, hope the server agrees, and call it offline by design.
We took the harder path: an event-sourced Kotlin Multiplatform (KMP) architecture where the client records immutable events, not mutable state; a separate engine derives state from them. The client witnesses; it never judges. Each event carries a version snapshot of what it touched, so on sync the server compares those columns against what changed underneath: disjoint edits auto-resolve, only real overlaps reach a human, who "defines reality" forward.
We'll follow one event from tap to server-confirmed — offline-addressable IDs and an optimistic projection that paints the UI instantly, then reconciles with no cleanup code of ours. The kicker: that same Kotlin module runs our backend, compiled to JavaScript, so the rules can't drift.
You'll leave building apps that behave the same on a plane as at a desk: no lost writes, no silent divergence, conflicts as a decision, not a merge bug.

