This is the other half of Fasco. The shopper-facing store has its own writeup; this is the admin panel the store owner logs into to actually run the business.
A shopping cart is the easy part of e-commerce. The admin side, inventory, orders, who-bought-what, refunds, is where the real work lives. I built it with React, TypeScript, and Vite on top of the same Supabase backend the storefront uses.
The dashboard answers one question first
When the owner logs in, the first screen answers "how is the business doing right now": total revenue, products sold, customer count, and stock on hand. Under that, the top-selling products and a live feed of recent transactions.
I kept this screen deliberately plain. An admin dashboard is something you check ten times a day, so it should load fast and show you the state of things at a glance instead of making you hunt.
Inventory, with real CRUD
Product management is full create, read, update, delete: add a product, edit price and description, swap images, adjust stock. TypeScript earned its keep here. A product has a specific shape, and once that type was defined, a whole class of bugs (a missing price, the wrong image field) turned into compile errors instead of broken pages in production.
Catching abandoned carts
This is my favourite feature, because it ties the two halves of the app together. Carts live in Supabase tied to a user, so the admin can see exactly who added items and never checked out. That turns a lost sale into a list of people to email a discount to. The data was already sitting there; I just surfaced it.
Roles and access that the database enforces
The Customers section lists every user, and an admin can change a role or remove an account. The part that matters isn't the UI, it's that Supabase row-level security decides what each role can touch at the database level. A regular user physically cannot query another user's orders, no matter what the frontend asks for.
A support channel built into the product
There's a support page that emails me, the developer, directly. A store owner who can't reach the person who built their site will quietly abandon it, so I wired that line of communication straight into the panel.


