PartSync
2026A maintenance crew was tracking a warehouse of parts through Google Forms and a spreadsheet nobody trusted. PartSync replaced the spreadsheet without asking anyone to change how they already worked.
- Next.js
- TypeScript
- Supabase
- Tailwind CSS
- Recharts
The problem
The crew submitted part usage through a Google Form. That form fed a sheet, and the sheet was the inventory — which meant the inventory was whatever the last person to open it said it was.
Nobody knew what was actually in stock until they walked out to the shelf and looked. Reorders happened when someone noticed an empty bin, which is to say, too late.
What I built
A Next.js dashboard on Supabase Postgres that owns the inventory outright. Stock decrements automatically as usage comes in, low-stock thresholds fire alerts before a bin empties, and submissions naming a part that does not exist get flagged instead of silently dropped.
Admins get usage analytics in Recharts, a full submission log, and a searchable, filterable catalog that is public to the crew but read-only.
The part that mattered
I did not migrate anyone off the Google Form. An Apps Script pushes each submission straight into Supabase, so the crew kept the workflow they already had and the manual data entry just stopped existing.
That decision is the only reason it got adopted. A better tool that requires retraining a working crew is not a better tool.
Access control
Row-level security in Postgres, enforced at the database rather than in the app. The public catalog and the admin surface hit the same tables and get different rows back. Admin actions sit behind authentication on top of that.