A simple, static V60 pour-over coffee brew guide based on James Hoffmann's Ultimate V60 Technique. It is a step-by-step guide, not just a number cruncher — pick a recipe, follow the timed pours, and adjust the ratio to taste.
- Displays a reference table with V60 recipes scaled from 100ml to 500ml in 20ml increments
- Shows coffee dose, bloom water, and pour targets for each brew size
- Highlights the classic 250ml recipe (15g coffee → 250g water)
- Includes an adjustable ratio slider (1:14 – 1:18) that recalculates all values in real time
- Mobile-friendly — designed to be checked on your phone while brewing
- Zero runtime dependencies — a single
index.htmlfile with inline CSS and JavaScript - Hosted via GitHub Pages with automated deployment
- No frameworks and no build step — static files are served as-is
- Treat the service worker cache version as a cache-schema version.
CACHE_NAMEinsw.jsonly needs to change when the cache layout or contents scheme changes. Normal deployed asset updates self-heal: navigation/HTML andmanifest.jsonare network-first, while same-origin static assets are stale-while-revalidate. - iOS PWA wake lock requires a user gesture. The Screen Wake Lock API cannot be granted on iOS / iPadOS standalone PWAs without an explicit user interaction (tap, scroll, keypress). The app therefore acquires the lock on the first gesture rather than on app open, and re-acquires it on the next gesture after returning from the background. In practice the screen stays on from your very first interaction, but a freshly-launched app sitting idle on the table will still dim and lock as usual.
- Recipe by James Hoffmann — The Ultimate V60 Technique
- Built by DevSecNinja