← Back

Apps

Things I built because the spreadsheet stopped working.

Internal tools for a nine-location food business. Every one of these replaced a manual process I was doing myself — which is why they solve the actual problem instead of the one a vendor imagined.

Dude, how many donuts should we make?

Sales forecasting & production planning

Forecasts demand per location per day, then turns the forecast into a production sheet the commissary actually works from — donut counts by type, catering on its own row, a dough schedule behind it, and ready times the stores can override. Locations are geocoded, so weather and nearby events feed the forecast.

  • Stack Next.js · Drizzle · Neon Postgres · Recharts
  • Data Square + Toast sales, synced nightly
  • Scope Eight retail stores, 21 flavors, password-protected
Step 1 — set the week's menu: 21 flavors with percentage splits totalling 100%.
Step 2 — confirm each day: a grid of flavors by store with weather and ready times.
Step 3 — week summary: totals by store and day, with a dough estimate.
Step 4 — production sheet: flavors by store with a total-to-make row.
Dough summary for the week.

Cash Deposit

End-of-day cash handling for store staff

Staff sign in, pick a store and the days they're depositing for, and count the cash. The app pulls what Square says should be there, computes the variance, captures a signed sign-off, emails accounting, and logs the deposit. All money math happens server-side in integer cents — a client-computed total is never trusted.

  • Stack React · Express · Postgres · TypeScript
  • Auth Google Workspace, domain-restricted
  • Integrations Square Reporting API, Gmail, Google Sheets
Task chooser with four cash-handling tasks.
Location picker listing seven stores.
Day selection showing expected cash per day from Square.
Denomination count grid for bills and coins.
Deposit summary showing counted total, Square expected, and zero variance.

Tips Payout

Bi-weekly tip allocation across two POS systems

Pick a pay period, upload the scheduling export, and the app pulls tips from Square for the retail locations and Toast for the food hall, then splits them across employees by hours worked. It reproduces the hand-built spreadsheet it replaced — exactly, to the cent, enforced by a test that runs on every change.

  • Stack React · Express · Postgres · TypeScript
  • Proof Acceptance test reproduces a real pay period to the cent
  • Output On-screen payout plus a downloadable workbook
Pay period selection screen.
Hours upload step with export instructions.
Event day allocation table with daily tip totals.
Payout review showing tip pool, payout total, leakage, and per-employee allocation with names blurred.