Milly's Franchise Portal
Franchise operating system
“A page that does not know something should say so. Silence and zero look identical on a dashboard, and only one of them is honest.”
We had already helped Milly’s turn one beloved women’s footwear store into something franchisable — a documented playbook, real unit economics, a phased expansion plan. This build answered the question that arrives next: what the franchisor actually runs the network on. A franchisor scaling past two or three stores usually ends up operating out of spreadsheets, group chats and email attachments, where nobody can quickly answer which stores are out of the sizes that actually sell, or whose insurance expired last month. Rather than buy a generic franchise SaaS and bend the business to it, we built the system around how Milly’s actually works.
98 routes
console, store portal & warehouse
192 tests
across 15 files, plus types and lint
Two doors
head office and every franchisee
No API key
the insight layer is pure arithmetic
The Problem
A franchisor scaling past two or three stores usually ends up operating out of spreadsheets, group chats and email attachments — where nobody can quickly answer which stores are out of the sizes that actually sell, or whose insurance expired last month. Rather than buy a generic franchise SaaS and bend the business to it, we built the system around how Milly’s actually works.
How It Works
Start to finish.
- 01
Foundation and tenancy
Two-level tenancy — a franchisee owns locations — with row-level security from the first migration and 158 policies across the schema, so a franchisee cannot read another franchisee’s data even if the application asked for it.
- 02
The franchisor console
Catalogue with size and colour variants, warehouse stock, vendor purchase orders, an order-approval queue with line-by-line trims, transfers, buy windows, floor sets, royalties, audits, documents and store openings.
- 03
The franchisee portal
The same system behind a second door, scoped to the stores a person owns: stock on hand, size-run ordering, replenishment ranked by that store’s own sales, statements, training with recorded sign-off, and a support thread to head office.
- 04
The intelligence pass
Dead stock ranked by money committed, a staged markdown ladder, broken size runs, replenishment that subtracts what is already on a truck, and anomaly detection on median and MAD — all of it arithmetic a franchisor can recompute.
Inside The Product
Find a size
A customer wants a 7 this store hasn’t got. Search the network, raise the transfer from the same screen — a sale that used to walk out.
Broken size runs
A style with seventeen pairs and no 7 reads healthy on every aggregate report and is dead on the floor. Core sizes are weighted double.
Append-only stock ledger
On-hand is a sum of movements, not a column somebody overwrites, so any count traces back to what caused it.
Honest scorecards
Components with no data drop out and the weights renormalise, because scoring a missing measure as zero ranks an unmeasured store below a bad one.
Standards and compliance
Audits with photographic evidence, product holds with per-store acknowledgement, and a document vault with expiry tracking.
Money in integer cents
A balance that cannot be read renders as a dash, never as $0.00 — a zero that means “we don’t know” is how bad decisions get made.
Screens
Inside Milly's Franchise Portal.
Real screens from the running product. Open any one to inspect it full size.
Under The Hood
How it’s built.
The decisions that are load-bearing — the ones that decide whether this still works in three years, and the reason each was made.
- 01 Two-level tenancy from the first migration
- A franchisee owns locations, and 158 row-level policies decide what each may read. A franchisee cannot see another franchisee’s data even if the application asked for it.
- 02 The stock ledger is append-only
- On-hand is a sum of movements, never a column somebody overwrites, so any count can be traced back to what caused it.
- 03 Money in integer cents
- No floating point anywhere near a balance. A figure that cannot be read renders as a dash rather than $0.00 — a zero that means "we don’t know" is how bad decisions get made.
- 04 Arithmetic, not a model
- Dead stock, markdown ladders, broken runs and anomaly detection are all recomputable on paper. package.json carries no AI SDK at all, so there is no key to expire and no vendor to go dark.
- 05 98 routes, 192 tests
- A franchisor console, a franchisee portal and a warehouse ledger across 89 pages and 9 route handlers, with the suite run alongside types, lint and a production build.
What Changed
Before, and after.
Before
Stock counts kept in spreadsheets and corrected from memory.
After
An append-only ledger where on-hand is a sum of movements that traces back to its cause.
Before
A style with seventeen pairs and no size 7 reading as healthy.
After
Broken size runs surfaced explicitly, with core sizes weighted double.
Before
A customer wanting a size this store hasn’t got, walking out.
After
A network search and a transfer raised from the same screen — and the demand signal recorded.
Before
Head office guessing which stores were actually struggling.
After
Scorecards that drop components with no data and renormalise, rather than scoring an unmeasured store as zero.
Before The Build
The strategy came first.
The advisory engagement that came first — the documented playbook, the unit economics and the phased expansion plan this portal was built to run.
Case study
Milly's: Turning a Beloved Women's Footwear Store into a Franchise System
Read the engagementThings We Have Built
More things we have built
Every one of these is live, and we designed and shipped all of it.

AI personal styling app
Tailr
CMA's own product
A consumer AI styling app — brand, marketing site, and product built end to end.
See how we built Tailr
Multi-tenant operations platform
CMA Client Portal
CMA's own product
A multi-tenant client portal — scheduling, deliverables, and QuickBooks-synced billing. Built and run in-house.
See how we built CMA Client Portal
Property management platform
DW Capital Portal
Built for DW Capital Holdings
A property-management platform for long-term and short-term rentals: leases, rent and maintenance, channel calendars and owner statements.
See how we built DW Capital Portal