Management system · 2026

I designed it and, this time, I also built it.

An internal system for a chain of orthopedic stores: stock, cash register and delivery notes between stores.

The problem
Stock lived in one Excel file per store.
What I did
I audited what was there, designed the system and built it.
The result
Finished and tested.

Six layers. Keep scrolling

Layer 01 of 06

Design

The screens, the states and the flows. This is where my work used to end.

Desktop only, for the stores' PCs

Layer 02 of 06

Interface in code

The design turned into components. When something looks wrong, it's fixed in the component and changes on every screen that uses it.

React and TypeScript · about 17,000 lines

Layer 03 of 06

Business rules

When a sale is voided, the system asks whether the money was returned. If it assumed either answer, someone would lose money.

Every rule, with its reason written down

Layer 04 of 06

Database

The stock of each store and of the warehouse, the cash register, the receipts and the delivery notes. Every piece of data is stored from day one, even if the screen that shows it comes later.

Postgres

Layer 05 of 06

Role-based permissions

Each role sees and edits only what's theirs. Access control lives in the database, not in the UI.

9 of 9 permission checks

Layer 06 of 06

Tests

Automated tests, and the cash register simulated against four real spreadsheets from the business.

273 of 273 tests

Orthopedic store management system: the Cash register screen, with product search, cart, customer, total and payment methods
  • RoleDesign and build
  • TimelineMay to August 2026
The problem

Stock lived in one Excel file per store.

It was updated by hand at the end of the day, depended on a single person, and the spreadsheet that pulled everything together lost products.

What I did

I audited what was there, designed the system and built it.

The complete system: cash register, stock, warehouse, delivery notes, products, suppliers, permissions and statistics.

The result

Finished and tested.

It passed every test and the cash register simulations with the business's real spreadsheets.

Tools: Claude Code, React, TypeScript, Supabase and Vercel.

The Home screen

On sign-in, what needs doing today.

Each role lands on a different Home screen: the store sells, searches and sees its stock; the warehouse sees what to prepare and which shipments are awaiting confirmation; the office, the sales and cash of every store.

Orthopedic store management system: a store's Home screen, with today's sales, cash in the register, delivery notes to confirm and stock alerts

Ringing up a sale

A sale, in three steps.

You find the product, add it to the sale and confirm, all on one screen. On confirmation, the receipt is issued and the stock is deducted.

Orthopedic store management system: the Cash register with a sale in progress and the notice about units not listed in stock
If something shows as out of stock, the sale goes on: it's confirmed, the stock is adjusted and the sale is flagged for the office.
Orthopedic store management system: a receipt's details, with the payment split between credit in installments and cash, the change and the rounding
Up to three payment methods. Cash and change are calculated automatically (the change can be edited) and the rounding is recorded.

Looking up a price

The price, calculated by the system.

Before, you had to find the product and check the price by hand. Now you search by name, code, supplier, brand, color or size, with or without accents and capitals.

Orthopedic store management system: the product list as a store sees it, with the final price and the stock in each location
The store sees the final price and the stock in other locations; costs stay hidden. Items in stock show up first.

Easy to learn

It speaks the language of the shop floor.

It would be used by people coming from Excel, in stores where staff rotates. The screens say “Available stock”, every button says what it does, each store signs in with one account and every product comes with its supplier.

Orthopedic store management system: the panel for adjusting a product's stock, with the question “How many are there now?” and the reason
Adjusting stock is a single question: “How many are there now?”. The system works out the difference.

Audit trail

Everything is recorded.

Every stock movement is logged: what changed, where, how much, why and who. The record is permanent: a manual adjustment requires a reason, and an issued receipt is locked.

Orthopedic store management system: the stock movement audit trail, one row per movement with date, type, change and person responsible
Even an archived product leaves a trace.

Warehouse and delivery notes

From the warehouse to each store.

The warehouse prepares and sends each internal delivery note, and the store confirms it on receipt.

Orthopedic store management system: the Warehouse screen, with the delivery notes to prepare, sent and the history
Orthopedic store management system: the first step of a new internal delivery note, from the central warehouse to one of the three stores

Screenshots with sample data. Brands and stores are blurred; in the audit trail, the people responsible too.

From Excel to the system

Before importing, a report to confirm.

To load the stock, I built an import that first shows a review report.

The import

  1. Upload the spreadsheets with each store's stock.
  2. The review report shows: what couldn't be read, what stays at zero and what gets added.
  3. The person confirms and only then does the stock enter the system.
Uploading the same files again leaves everything unchanged. The full catalog comes in, including what's at zero.

How I built it

Two AI agents, each with its own role.

AI agents wrote the code. I defined what had to be built and validated every step before moving on.

The analyst
Reads and organizes the flows and the business rules.
The builder
Writes the code, in batches.

From the repository, June 3 to August 9, 2026

249commits

49merged deliveries

What I took away

Finished and tested, from the screen to the database.

It was the first time I built one of my own designs all the way through. I used that same way of working to build Liberty's seller dashboard.