FlipSite inventory and resale tracker

FlipSite is a resale inventory tracker I built because my spreadsheet started lying to me. Entering data is the easy part — keeping it connected to receipts, photos, and cost splits across months of history is where spreadsheets quietly fall apart.

The bundle math problem

The thing I cared most about was handling items that don’t map cleanly to a single transaction. If I buy a camera kit for one price and sell the body, lens, and accessories separately, each piece needs its own sale state while still sharing the original purchase cost. A spreadsheet can fake this until one edit corrupts three months of history.

Beyond that, the core actions are what you’d expect: add items with photos, prices, platform, and condition; attach receipts; mark things as holding, listed, sold, or keeping; and review profit, ROI, and hold time against a rough pace line.

FlipSite gallery view with item cards and photos FlipSite profit chart and analytics dashboard

Under the hood

Supabase handles auth, Postgres, file storage, and row-level security. TanStack Query keeps data loading predictable, and Recharts powers the analytics views.

FlipSite list view with profit and status columns

Stack

The frontend is React, TypeScript, Vite, and Tailwind CSS, with Supabase behind the data layer. UI components use Radix-style primitives, lucide-react, sonner, and some GSAP on the landing page.

Where it stands

FlipSite replaced my spreadsheet, which is the only success metric that matters here. If I rebuilt it I’d move some analytics closer to the database and tighten import/export earlier, but I’d keep the scope personal. It works because it’s shaped around how I actually buy, keep, and sell things.