Offline
Beerwright is local-first, which is a stronger claim than “it caches things”. Your workspace lives in the browser’s own database and the calculation engine runs in the tab, so with no connection at all the app is not a degraded version of itself — it is the same app, minus the four things that genuinely need a server.
A brewery is a basement, a garage or a shed. This is designed for that.
What works with no connection
Section titled “What works with no connection”- Opening the app cold. Not just reloading the page you were on — navigating between routes as well, because every code chunk is precached rather than fetched on demand.
- The entire workspace: recipes, blending sessions, batches, equipment profiles, inventory.
- The whole calculation engine — gravity, IBU, colour, water, mash pH, volumes, packaging. None of it was ever a server call.
- Catalog search. The malt, hop, yeast and style data is compiled into the app, not fetched.
- Undo, redo and named versions.
- Knowing who you are. The app remembers your last confirmed identity, so an offline start opens your workspace rather than a guest one.
What does not
Section titled “What does not”Four things, and each one fails with a message rather than a spinner:
| What you see | |
|---|---|
| The AI assistant | “Could not reach the assistant. Check your connection.” |
| Version history | An empty timeline, never an error |
| Creating a share link | “That link could not be created. Check your connection and try again.” |
| Signing in or out, and checkout | “Could not reach the server. Check your connection.” |
What the sync indicator means
Section titled “What the sync indicator means”It sits in the sidebar and has five states.
| State | What it means |
|---|---|
| Guest | Saved on this device only |
| Connecting | Opening the sync connection |
| Syncing | Sending your latest changes |
| Synced | Everything is saved to your account |
| Offline | Changes are queued and will sync when you reconnect |
Offline is deliberately not styled as an error. It is grey, not red. Nothing has gone wrong and nothing is at risk; the app is doing what it was built to do.
How changes catch up
Section titled “How changes catch up”Every edit you make is a command, and every command goes into a durable queue in the browser’s database as well as being applied on screen. The queue survives a reload, a crash and a closed laptop.
When the connection returns, the app reconnects immediately — it does not wait out a backoff timer — and does two things in order: pulls whatever the server has, then replays your queued commands on top. Commands are replayed in the order you made them, and the server rejects any it has already seen, so a flaky connection cannot double-apply an edit.
The rule the whole design turns on:
The server’s ordered log is the truth. The screen is that truth with the unacknowledged outbox replayed on top, in outbox order.
Two devices, one workspace
Section titled “Two devices, one workspace”There is no merge step and no conflict dialog, because there is nothing to merge: the server orders everything. If you edited the same field on a laptop and a phone, the one the server saw last wins, field by field.
The one case that cannot be resolved by ordering is an edit to something that no longer exists — you renamed a recipe on the phone that you deleted on the laptop. That single command is dropped rather than the whole batch, and you are told: An edit could not be synced.
How the app itself stays current
Section titled “How the app itself stays current”The offline shell is refreshed in the background while you have the tab open, and when a new version is ready the tab reloads itself once. There is no “a new version is available” prompt to dismiss — a stale app talking to a live server is the thing worth avoiding, and nobody clicks a toast to receive a bug fix.
Installing it
Section titled “Installing it”Not yet. Beerwright works offline but is not installable to a home screen: that needs an icon set the project does not have, and shipping a manifest that points at icons which do not exist would be worse than shipping none. Offline is what has been built; installability is a separate decision.
Guest mode and storage
Section titled “Guest mode and storage”A guest workspace and each signed-in account get their own storage, keyed separately, so signing out does not show you somebody else’s recipes and signing in does not overwrite what you made as a guest. Clearing your browser’s site data does delete a guest workspace — that is the one place a signed-in account is safer, because the server has a copy.