Wanna chat? Reach out and I would be happy to speak with you!
I am always striving to learn more and connect with other like-minded devs. If you just want to reach out and chat, all my socials are above!

My Chemex problem was simple and annoying. Every pour-over came out a little different, and the only real variable was how carelessly I’d eyeballed the water. Some days it was bright and thin. Other days it was muddy and over-extracted. I started jotting ratios in my phone’s notes app just to keep myself honest. Notes turned into a tiny calculator. The calculator turned into an app I put in front of a few friends, and they put it in front of r/coffee and r/espresso. Pretty soon a tool I’d built to fix my own bad pours had thousands of people using it.
I’ve rebuilt it twice since then. The second time I got it wrong before I got it right.
V1 was an Ionic app written in Angular, and it stuck around for years with real, loyal users. It just got stale over time, the way most apps do when you stop touching them and everything around them keeps moving.
V2 moved to Next.js, and this is the version I’d take back if I could. Instead of just modernizing the same tool, I added a whole layer of coffee roasters and coffee shops on top of it. The brew calculator, which was the entire reason people used the app, ended up buried a few taps deep. People noticed, and told me about it - a lot of them, not gently. I’d overcomplicated the one thing I’d already solved, and I lost a good chunk of my user base over it.
V3 is what’s live now, a rewrite in Lit using standard Web Components with signals for state instead of a framework sitting on top of the DOM. Functionally it’s closer to V1 than V2: the same simple, calculator-first app people liked in the first place, just faster to load and with a lot less code for me to maintain now that Angular isn’t in the picture.
I’m a better engineer now than I was when I wrote the Ionic version, and it shows in how this one is put together. My patterns are cleaner, components are actually reusable instead of copy-pasted with small tweaks, and I have a much better mental model of the data now. That’s what let me link brew calculations to specific brew types, and tie those brew types into curated guides and recipes, instead of the calculator and the guides being two separate features that happened to live in the same app.
Open BrewMe and the brew calculator is the first thing you see. Punch in a dose or a target yield and it works out your ratio as you type, updating live instead of waiting on a submit button. Every brew you save shows up in a recent brews list on the home screen, along with a day streak, so the app tracks your habit without making you think about tracking anything.
Beyond the calculator there are brew guides for V60, Chemex, French Press, Kalita Wave, Origami, Hario Switch, Clever Dripper, cold brew, drip, AeroPress (with World AeroPress Championship winning recipes you can browse by year), and espresso.
The espresso guide has the most content. It has video walkthroughs from Lance Hedrick and James Hoffmann, plus a glossary covering terms those videos assume you already know: RDT, WDT, tamping, channeling, extraction. That’s the kind of thing that helps when your shot tastes sour and you’re not sure why.
The guides are actually one of the features I’m proudest of in this version. The Ionic app had the same idea on paper, but I never built a good path that actually got people into the guides - they existed, but nothing pointed you toward them. I’m still adding to them and improving them regularly, mostly so someone new to a brew method doesn’t feel stuck trying to learn it. Saved brews link back to their guide too, so if you’ve got a V60 recipe saved, it’s connected to the V60 guide instead of floating there on its own.
Everything in BrewMe is local to your device, but I still wanted a way to share a brew with someone else.
Saved brews can be shared as a link. Query parameters fill in a shared-brew view on the other end, and whoever opens it can save that brew straight into their own library. There’s no account system involved. The data just travels in the URL.
Both the Ionic and Next.js versions made you create an account before you could do anything with the app. Looking back, I think that cost me more users than I realized. Asking someone for their information before they’ve calculated a single ratio is a big ask for a free tool.
The Lit rewrite drops that. You open the app and start brewing right away. Every saved brew, streak, and preference lives in your browser’s local storage, and nothing is synced anywhere because there’s no server to sync it to.
It’s also a PWA, so you can install it to your home screen and it works offline once it’s loaded - useful if your kitchen wifi is bad or you’re brewing somewhere with no signal.
BrewMe is free, and the Lit rewrite is open source under the MIT license. If you want to see how it’s built, or you think a brew method is missing a guide, the repo is public.
The source for BrewMe's current Lit Element rewrite — Lit 3, TypeScript, Vite, and IndexedDB, with no account system and no backend.
A free, local-first coffee brewing companion — brew calculator, recent brews history, and guides for every method, no login required.
I am always striving to learn more and connect with other like-minded devs. If you just want to reach out and chat, all my socials are above!
