Back to Projects
N

Nib

Building

Espresso dosing companion app

Web Audio APIPWA
Visit

The Problem

Pulling a good espresso shot is a ritual of precision. You weigh beans, grind them, tamp, and extract — but the one variable that's hardest to control consistently is dose weight. Most home baristas eyeball it or weigh manually between grinds, which is slow and inconsistent.

What It Does

Nib is an espresso dosing companion that listens to your grinder:

  • Audio-based grind detection — uses the Web Audio API to detect when the grinder is running and automatically tracks grind time
  • Target weight countdown — set your target dose, and Nib counts down based on your grinder's flow rate (which it learns over time)
  • Dial-in logging — track your shots over time to find the sweet spot for each bean

No bluetooth scale needed. No hardware. Just your phone, your grinder, and better espresso.

How It's Built

Nib is a Progressive Web App built with the Web Audio API for grind detection. It runs entirely in the browser — no server needed for the core experience. Shot logs are stored locally with optional Supabase sync.

The audio detection uses frequency analysis to distinguish grinder noise from ambient sound. It's surprisingly accurate once calibrated.

What I Learned

Nib taught me about the Web Audio API in ways no tutorial could. Building real-time audio processing in the browser is a fascinating constraint — you're working with buffers, sample rates, and FFT analysis in JavaScript.

It also reminded me why I build side projects: this started as a genuine itch. I was tired of eyeballing my dose every morning. Now I don't have to.