Bar inventory & shift handoff
A PWA that replaced paper par sheets and group-text handoffs at a working bar
Bar closes run on tired memory: what's out, what's low, what the next shift needs to know. I was the bar lead, so I built the fix: a mobile-first PWA where bartenders sign in with a name and PIN, log end-of-night inventory state against par levels, and hand the next shift a live picture instead of a group text.
Role
Personal project · all my own code
Timeline
2026 · built while working as bar lead
Stack
- v1: React + Vite PWA
- AWS Amplify
- v2: Next.js
- Supabase (realtime + RLS)
- Tailwind CSS v4
The problem
End-of-night state lived in group texts and on paper par sheets. The opening bartender walked in blind: no idea what was 86'd, what was running low, or what the close actually looked like. Orders got missed and prep started late.
What I built
A mobile-first PWA with per-bartender name and PIN sign-in, so logging takes seconds on a phone behind the bar. Items carry par levels and a color-coded status: out, very low, running low, good. A needs-attention view surfaces tonight's problems first, and an activity log keeps the handoff honest.
Version 1 shipped as a React/Vite PWA on AWS Amplify with unit tests. Version 2 is a ground-up rebuild on Next.js and Supabase with realtime sync across devices and row-level security, on Tailwind v4.
The close, on a phone




Why it's on this site
It's the pattern I keep repeating: find the operational pain, build the smallest tool that removes it, ship it to the people standing next to you, then rebuild it properly once it proves out. Real users, real constraint (one-handed use at 2 a.m.), two shipped iterations.