Why it exists
I bought an espresso machine and wanted to know whether it was paying off. A single savings number hides the guesses behind it, and prices change over time.
Portfolio / CASE STUDY
Public personal calculator
A local-first calculator that compares home espresso costs with a coffee-shop baseline and projects when a machine pays for itself.
Independent product design and front-end development
I bought an espresso machine and wanted to know whether it was paying off. A single savings number hides the guesses behind it, and prices change over time.
I built a static page with no build step. You enter the machine cost, a daily routine, a bean price and dose, and a shop price. The page shows payback, a projected savings curve, yearly totals, and a price journal.
Dates, prices, savings, payoff, and yearly totals live in a single module, and the views read from it. Tests cover leap days, daylight-saving changes, zero savings, and reconciling yearly totals with lifetime net.
A recorded price changes nothing until you apply it to the model with an effective date. Earlier prices stay in place, so past savings are not rewritten.
Settings and the journal stay in the browser, with JSON backup and CSV export. A fresh visit has no start date, so the page does not invent past cups. Shared results leave out dates and journal notes by default.
A personal calculator with no backend and no live price lookup. The bean price, dose, and coffee-shop price are editable estimates, not measured data. Savings come from the model, not tracked cups. It has had no formal accessibility audit, and data lives in one browser unless you export a backup. The repository is local only.