04 / Website2024Local only

Coffee Digest

A brew log that refuses to be edited.

RoleSolo. Schema and web app.
Built withNext.js, Postgres, Supabase
Where it isRuns locally, never deployed

Why I built it

A brew log is only useful if it remembers your wrong answers. Every app I tried let me edit a past brew in place, which meant that the moment I fixed a number, the reason I changed it was gone.

I also wanted it in a browser. Dialling in a grinder happens at a desk with both hands free, not on a phone screen with wet fingers.

What I built

Events, not rows

Every change appends. The current state of a brew is derived, so the history of a recipe reads down like a diff instead of collapsing into whatever you last saved.

Entry you can do without looking

The whole log form is keyboard reachable, with fields in the order you actually measure them.

Comparison as the point

Two brews side by side with only the differing variables highlighted, because that is the only question anyone really asks of a log.

The hard part

Keeping derived state cheap

Deriving current state on every read is elegant and slow. A materialised view refreshed on write kept the read path to one query without giving up the event trail.

What I would do next

Deploy it. It has never left localhost, which is a strange place to leave a website, and it is the reason the log has only ever had one reader. A shared recipe link is the thing I actually want, and it is not worth building until the site is somewhere a link can point.

NextCoachAI