Skip to content
Live in production Built for Milly's — Rio Grande Valley, TX

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.

Next.jsPostgresSupabaseVercel
Milly's Franchise Portal — Franchise operating system

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.

  1. 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.

  2. 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.

  3. 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.

  4. 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.

Orders arrive oldest first. Ordered and approved quantities stay separate fields, so a short-ship is visible rather than silently overwritten.
The same action that saves one sale records the demand signal head office needs to fix the size run.
Every figure here can be recomputed on paper — the condition for a franchisor actually acting on it.

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 engagement

Want us to build something like this for you?

A 30-minute call on the product or platform in front of you — and how we'd ship it.

or call (573) 747-5573

Search CMA