braid Open Braid

Weave your time, money, rituals and rest into one picture.

Four things most people track in four different places, held in one local database — so the observations that sit between them have somewhere to come from. What an hour of work actually paid once the unbilled hours around it are counted. What you spend on the days you keep a ritual, and the days you don't.

Runs in the browser. No account needed to start, and nothing leaves the device until you choose to sign in.

14:20 8h 40m left today
06:3023:00
The day from wake to wind-down. The thin line is time elapsed, the thicker strands behind it are tracked sessions, the dots are scheduled rituals — filled once kept. The sun's glow moves from ochre to iris as the day goes on.
01

Local-first

Offline is not an error state

It works with no connection, and it is not pretending to.

Every read and every write is local. A write lands in IndexedDB on web and desktop, or SQLite on the phone, and returns. The network is a background reconciliation the interface never waits for, which is why there is no spinner, no “saving…”, and no difference in speed between a plane and an office — in both cases the write already happened before the network was consulted.

Being offline is a queue that hasn't drained yet. When a connection comes back the queue drains on its own, and two devices that were both edited while apart settle on the same answer without needing to talk to each other first.

02

Money

Two modes, switchable at any time

Goals are optional. Nothing is scored unless you ask for it.

Give a category a monthly budget and it behaves like one: a pace mark, an over-budget state, a share of the daily allowance. Leave the budget empty and the expense is still recorded, categorised, tagged, given a payee and a payment method, and reported on — it is simply never scored. No bar, no pace, no red. A category moves between the two at any time and nothing stored has to change.

The daily allowance is derived rather than stored: the sum of the monthly budgets that aren't committed, divided by the days in the month. Rent and subscriptions sit outside it, so a payment landing on the 1st can't swallow the figure. Budget nothing at all and there is no allowance to show, so the screen reports what you spent instead of what's left.

03

The day

Planned beside what actually happened

An unmet plan is never a failure.

Plan the day in two kinds at once: blocks with a time on them — the call at 13:00, the two hours you want for the thing that matters — and a loose list underneath of what just needs doing today. Most days are honestly a mix, and forcing a clock time onto the second kind only makes people invent one. Moving something between the two lists is one tap either way.

Braid already knows how the day went, because timers wrote the sessions and ticks wrote the logs. So the only new fact a plan adds is the intention, and the only honest thing to do with it is put the two side by side: two hours planned, forty minutes tracked. There is no red, no percentage score and no streak of days you planned well. Planning is a guess about a future you don’t control, and an app that marks you wrong for guessing badly just teaches you to stop guessing.

Routines are the other half, and deliberately simpler than they sound: a card holding the things you do together in the morning, showing how many you kept. No sequence, no stopwatch, no wizard walking you through steps. Ticking a chip on the Morning card is exactly ticking that habit anywhere else in the app — one record of whether you stretched, not two that can disagree.

05

Not built

Named, rather than left to be discovered

What Braid doesn’t do yet.

Two things are genuinely missing, and a third list matters more: the parts that are written and have never run. “Untested” and “absent” are different claims, and only one of them is safe to round off.

06

Get it

One shared core, four surfaces

Six places to run it, in three states of readiness.

The web app is deployed and the desktop and Android builds exist as files you can download. Two platforms have no artefact yet and are marked as such rather than promised.

Roughly 80 MB is close to the floor for a desktop build that ships its own browser engine. If the size bothers you, install the web app instead — it is the same application and the same offline behaviour.

07

Privacy

An account is optional

Nothing leaves the device unless you sign in.

Braid runs with no account at all. Everything you enter is written to the database on your device first, and that local copy is what the interface reads — not a cache of something held elsewhere.

Signed out, the sync engine asks for a token, finds none, reports itself idle and makes no request. That is a supported permanent state rather than a degraded one, and there is a test whose only job is to assert the server received zero requests while everything was still saved locally.

Signing in is a link emailed to you — there is no password. It exists so a second device can catch up: from then on, your rows are copied to the sync API so both devices can converge. Conflicts resolve to whichever edit was made last, and deleted rows leave a tombstone so a device that was offline can't resurrect them.

Open Braid.

It opens straight into today, with nothing to fill in first. Signing in happens inside the app, later, and only if you want a second device.

Open Braid