One document per workspace
The workspace is a Loro CRDT. Edits merge without a server in the loop, and a relay syncs peers when one is reachable.
Beta
A workspace is one document of typed cards. Write in it, place it on a board, link it to another card, and everything you did not write yourself is recomputed on read.
No account for local use. The app runs in the browser, saves to IndexedDB, and needs a relay only to sync with someone else.
The workspace is a Loro CRDT. Edits merge without a server in the loop, and a relay syncs peers when one is reachable.
Cards, boards, sections, types, tags and edges live in one object graph, and Zod validates every write before it reaches the document.
Text, checklists, fields and templates are edited in place with Tiptap, so a card holds the work and not a link to it.
A share link serves a read-only projection of a board or a card. A link with edit rights works on a draft and publishes the diff back.
Edits go to the open tab first and reach the network afterwards. A workspace opens from the local snapshot, so a dropped connection pauses sync and nothing else. Reloading while offline needs the network, because the app ships no service worker, and that limit is stated in the interface rather than discovered.
Two hosted plans, one seat each, billed monthly. A licence carries a seat count, a workspace count and two storage caps, and the relay enforces the tighter of the licence and the instance. Organization buys capacity, not people: it is still one member.
| Plan | Per month | Seats | Workspaces | Document bytes per workspace | Attachment bytes per workspace |
|---|---|---|---|---|---|
| Personal | $9 | 1 | 3 | 256 MiB | 1 GiB |
| Organization | $24 | 1 | 25 | 2 GiB | 8 GiB |
A plan is one person: inviting a second member is refused rather than billed, because seats are not sold separately yet. Self-hosting needs no licence: the same quotas are environment variables, and unset means unlimited.
One Compose file brings up the static app, the relay that syncs workspaces, and Caddy in front of them. The relay keeps its documents in SQLite on a named volume, so a backup is that volume and nothing else.
Deployment guide