Architecture

What local-first actually means for a training app

Local-first is not a privacy slogan. It is a decision about where the source of truth lives, and everything else follows from it.

cronoWiz home screen: a mosaic of the Strength, Cardio, Tools, Settings, Progress and Diary sections

In the usual arrangement the server holds the real copy and the phone holds a cache. Open the app on a bad connection and you get a spinner, because the thing you are looking at is not actually there. Local-first inverts that: the device holds the real copy, computation happens on it, and the network is something you use deliberately rather than depend on.

For training this fits unusually well. A session is generated where it is performed, it is small, and it is almost never edited by two people at once — so the hardest problem in distributed systems, merging concurrent edits, mostly does not arise. What is left is a fast app that opens instantly and works in a basement.

The cost is that syncing becomes explicit. There is no invisible background process reconciling devices; there is an encrypted file you export, or a direct transfer you start. That is more honest and slightly more work, and it is the trade cronoWiz makes.

  • The device is the original

    IndexedDB holds the real data, not a cache of something remote.

  • It opens instantly

    nothing is waiting on a request before the first screen is usable.

  • Sync is a decision

    an encrypted file or a peer-to-peer transfer, started by you.

  • No account required by the model

    with no server holding the truth, there is nothing an identity is needed for.

Free. Private. Yours.

No account. No server. No cookies. Just you, your phone, and an app that minds its own business. cronoWiz is a free PWA that runs entirely on your device — your data never leaves. Ever.

The questions people actually ask

Does local-first mean no internet at all?

No. Maps, web radio and the one-time model download use the network. The difference is that the app keeps working when they are unavailable, because none of them holds your data.

What happens on a second device?

It has its own copy. You reconcile them by moving a backup or opening a direct transfer, and imports are matched by identity so the same session does not appear twice.

Is this the same as offline-first?

Related but not identical. Offline-first is about surviving a lost connection; local-first is about which copy is authoritative. cronoWiz is both, and the second is what removes the need for an account.