Skip to content
dododonedone
All posts

By dododonedone ·

Why the app does not wait for the internet

A task list you cannot open on a train is a list of things you will remember later. Why dododonedone writes to your device first.

A task list is there so you can put something in or take something out. Both should take less time than the thought itself. If the app has to ask a server first, the thought wins, and the task ends up on the back of your hand.

What offline-first means here

dododonedone keeps your tasks on your device. When you add, edit or finish one, the change is written there first and the screen updates at once. Your changes wait in a queue and go to the server when there is a connection. If there is none, the queue waits.

When the server answers, the app takes the server's version of things and replays anything of yours it has not seen yet on top. The server has the final word, so your phone and your laptop never argue for long, and nobody has to merge anything by hand.

What you notice

  • Every view opens at once, because it is a question asked of your own device.
  • Search works on a plane, in a basement and in the middle of nowhere.
  • An edit from your AI assistant arrives on your phone like any other change.
  • When you are offline, the app says so once and carries on.

The foundation, not a feature

Bolting offline onto an app that was built online is hard: every screen has assumptions about the network baked in. We started from the other end. The sync protocol is plain JSON over HTTPS and documented, so the Mac and Android apps will speak it too, and the MCP server writes through the same operations as everything else.

It is more work up front, and it is the part you notice every time you open the app.