Skip to content
ar13.dev
← All work

PartSync

2026

A 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.

PartSync admin dashboard
Admin dashboard — usage analytics and stock levels
PartSync parts catalog
Searchable parts catalog