← All projectspersonal product2025Under the hood ↓

FitGuild

The storefront was the easy half. The ERP behind it is the reason I built this.

A storefront with a real back office behind it: nine admin surfaces covering stock, a ten-state order lifecycle, customer records and a sales funnel — the operator's half most shop demos skip.

Role
Personal product · solo
Stack
DjangoReactPostgreSQLStripeChannels
Result
9back-office surfaces, from stock ledger to sales funnel
Access
live site, repo private

A Screens

Click any screen to open it in the zoom viewer. Wheel to zoom, drag to pan.

01Built to sharpen the full-stack loop end to end: storefront, admin and the data between them.
02The shop index.
03A product page.
04Atomic. The order either exists completely or not at all.
05The half most storefront demos skip: the operator's side.
06Product administration.
07Order administration.
08Inventory.

Under the hood

FitGuild

Under the hood

FitGuild

B Architecture

Why the stock number can be trusted

Nothing changes stock quietly. Every movement, whether a sale or a manual correction, is written down with the quantity before it and the quantity after, and who caused it.

How stock stays honest

Every movement of stock is written down. The quantity before and after each change is kept, so the number on the shelf can always be explained.

  • What people use
  • Code I wrote
  • Where it is kept
  • Someone else's service

Stock that can always be explained

A product is not one thing: it is a set of sellable variants, each with its own stock. Every change to that stock is written to a ledger with the quantity before and after, so the number on the shelf is never a mystery.

C Decisions

The calls that made the difference, and what each one bought.

  1. The admin panel is an ERP and a CRM, not a settings page: stock with low-stock thresholds, orders across ten states, promotions, and customer records carrying new, repeat and returning buyers.

  2. Sales leads are measured, not guessed. Every product view, cart add and checkout start is an event, so the funnel down to purchase, average order value, fulfilment and return rates all come out of real traffic.

  3. The full Stripe post-purchase loop lives server-side — payment, order transitions, inventory — and status changes push over WebSockets instead of being polled for.

D What it runs on

  • Django
  • React
  • PostgreSQL
  • Stripe
  • Channels

live site, repo private

↑ Back to the surface