Lawrence Plante
← ./all-work

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

Login screen with bartender roster
PIN pad sign-in
Needs-attention dashboard with par status badges
Activity log of inventory updates

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.