← All projects

Beanwatch

Operations platform for the UMD Coffee Club

Inventory, event, and delivery management that tracks every bag of beans from delivery to the bottom of the cup. In daily production use by the club for over a year.

Role
Founder and lead, analytics team
Timeline
Dec 2024 – Present
Stack
  • React 19
  • Supabase
  • PostgreSQL
  • Row Level Security
  • Edge Functions
  • Vercel
  • Resend
  • Groq
Built forCoffee at UMD, the University of Maryland Coffee Club
The Beanwatch analytics page showing spend trends, cost per event, and consumption forecasts
~$3K
club spend managed
26+
events reconciled
3,600+
attendees served
8 → 0
spreadsheets replaced

Why it exists

The club ran on eight spreadsheets that disagreed with each other. Nobody knew how many beans were left, what an event actually cost, or when to reorder. Beanwatch replaced all of it with one app used daily by about twenty members.

What I built

  1. Analytics and projections: spending trends, cost per event and per attendee, consumption velocity, days-until-empty forecasts, and a planning tool that corrects for the club's historical attendance bias (actual attendance runs about 77% of estimates).
  2. Events and reconciliation: plan an event, allocate supplies with reusable equipment groups, then reconcile actual usage so inventory always reflects reality. Reconciliation and delivery confirmation are atomic Postgres RPCs with exact-reversal undo.
  3. Deliveries: multi-item shipments with live carrier tracking through Ship24 and automatic arrival emails sent by a Supabase Edge Function. Confirming a delivery moves items into inventory in one atomic operation.
  4. All multi-step inventory mutations run as SECURITY DEFINER RPCs so partial writes can never corrupt stock counts. Row Level Security on every table, and serverless endpoints verify the caller's JWT server-side.

Also in the box

  • Perishables tracked as batches with best-by dates and first-expiring-first-out autofill.
  • Recurring equipment maintenance tasks with history.
  • An AI assistant grounded in live app data, served through a JWT-verified serverless proxy.
  • A daily cron job that emails the finance team about low stock until it recovers or a delivery is confirmed.

What we're building next

Beanwatch already replaced the spreadsheets. The next round of work is about the club spending less time in the app at all: fewer manual steps, more decisions made for you, and the data reaching people where they already are.

  1. Phone app

    A mobile companion for the two things members do most on their feet: logging usage at an event and confirming deliveries when the boxes show up.

  2. Smarter alerts

    Beyond the daily low-stock email: expiring perishables, events with no supplies allocated, deliveries running late against their tracking estimate, and spend drifting past budget.

  3. Automated reordering

    When the projection says a staple will run out before the next event, draft the purchase order automatically and hold it for one-tap approval from the finance team.

  4. Event and workshop planning engine

    Templates for recurring event types and coffee workshops that pre-fill supplies, equipment groups, and attendance estimates from the club's own history, then learn from the reconciliation afterward.

  5. Open to other clubs

    Every table already sits behind Row Level Security. Making setup self-serve would let other student organizations run their own instance without touching the database.