The factory

From a pile of invoices to a plan you can execute.

The Factory reads what you actually pay for, asks your team leads what they actually use, and hands back an ordered list: which tools to own first, whether to adopt open-source or build from a blueprint, and what the agent takes over once you do.

LIVE · factory/intake{{ intakeLabel }}
{{ l.mark }}{{ l.text }}{{ l.meta }}
Tools found so far {{ intakeCount }}
The audit, step by step

Two inputs. No agents installed on anyone's laptop.

We don't need read access to your SSO or a browser extension. Billing tells us what you pay for; your team leads tell us what they'd miss.

01 — INGEST
Billing & card statements

Export 12 months from your finance system or card provider. We match vendors, dedupe plans, and find the three teams paying for the same thing.

02 — ASK
Async team-lead questionnaire

Each lead gets a 6-minute form per tool their team owns: what it does for them, what they'd keep, what they built around it in spreadsheets.

03 — SCORE
Complexity × savings

Every tool gets two honest ratings and a verdict: migrate now, phase 2, or leave it alone.

04 — DECIDE
Adopt or build, per tool

An open-source match with the numbers to back it, or a PRD blueprint ready for the platform. Then the agent takes over.

How we score

Two questions per tool. Answered honestly.

No weighted formula pretending to be science. Two ratings, each with the reasoning written out, so your team can argue with them.

Complexity to migrate● ○ ○ ○ ○ → ● ● ● ● ●

How much of the tool is generic, how much data has to move, how many integrations it has, how many custom fields nobody remembers adding. One dot is a day; five is a quarter.

data volumeintegrationscustom workflowswho depends on it
Cost-saving opportunitylow · medium · high

What you pay, minus what it costs to own — hosting, the agent, the platform's share. Plus the things that don't show on the invoice: seats nobody uses, the renewal hike due in March, the spreadsheet somebody maintains next to the tool.

subscriptionidle seatsrenewal riskworkaround cost
Sample inventory report

A 100-person retailer, 14 stores, 12 months of card statements.

Anonymised, numbers real. Click a row or a dot.

REPORT · inventory{{ reportSummary }}
Verdict
Migrate now · big wins
Phase 2 — worth the effort
Migrate now · quick wins
Leave alone
{{ selName }}
← easy · complexity to migrate · hard →↑ savings
DETAIL · {{ selName }}
{{ selName }} {{ selVerdict }}
SPEND / YR{{ selSpend }}
SEATS USED{{ selSeats }}
RENEWAL{{ selRenewal }}
Complexity · {{ selDots }}

{{ selWhyC }}

Savings · {{ selSavingsLevel }}

{{ selWhyS }}

Team lead said

"{{ selQuote }}"

Path {{ selPath }}
Adopt or build

Open-source first. A blueprint when nothing fits.

For each tool the Factory searches the open-source landscape for a project that does the job. It has to clear four bars before we recommend it. If nothing does, you get a full PRD blueprint instead — and either way it runs on the same platform with the same agent.

  • 01Feature fit against what your team lead said they'd miss
  • 02Community health: contributors, release cadence, issue response
  • 03Enterprise support available from at least one vendor
  • 04Licence you can live with, and an import path from your current vendor
LIVE · factory/decide{{ decTool }}
{{ g.mark }} {{ g.name }} {{ g.note }}
Verdict {{ decVerdict }}
What a PRD blueprint contains

Not a brief. A build-ready spec.

Written for an engineer with an AI coding agent. Every screen has acceptance criteria, every entity has a schema, every platform component is already wired in. Below: the first page of the retail shift-scheduling blueprint.

SECTIONS9
USER STORIES24
SCREENS9
ENTITIES7
PRD · shifts.gsaas · v1.0generic-saas Factory · blueprint #BP-041
1 · PROBLEM

Retail shift scheduling for 14 stores

Store managers build a weekly rota for 6–14 hourly staff. Today this happens in a $2,400/yr SaaS plus a spreadsheet per store for overtime, because the tool doesn't know the store's labour rules. 72% of swaps are agreed by phone and typed in afterwards. The goal is a rota that respects availability and labour rules at publish time, and lets staff swap from their phones without a manager retyping anything.

2 · WHO
Store managerBuilds and publishes the week. Approves swaps. 14 people.
Shift leadCovers gaps on the day. Can approve same-day swaps. ~30.
StaffSets availability, sees their week, requests swaps. ~140.
HROwns labour rules and the overtime report. 2 people.
3 · DATA MODEL
Store { id, name, region, opening_hours[], labour_rules → graph:Store }
Person { id, role, home_store, contract_hours → graph:Person via Identity }
Week { store, starts_on, status: draft | published | locked, version }
Shift { week, person?, start, end, role_required, break_min }
Availability { person, weekday, from, to, recurring }
SwapRequest { shift, from_person, to_person, state, approved_by → fn:approvals.route }
LabourRule { store, max_hours_week, min_rest_hours, max_consecutive_days } · never-touch for agent
4 · CORE FLOWS
  1. Publish a week. Manager duplicates last week → adjusts → platform checks every shift against Availability and LabourRule → conflicts block publish with a reason → publish notifies staff via fn:notify.send.
  2. Request a swap. Staff taps a shift → picks a colleague who is available and qualified → request routed via fn:approvals.route (shift lead same-day, manager otherwise) → both parties notified → journal entry.
  3. Overtime report. HR gets a scheduled report per store per month from the Journal — no spreadsheet.
5 · SCREENS · 9, each with acceptance criteria
Week gridShift editorConflict panelMy week (mobile)Swap flow (mobile)AvailabilityApprovals inboxLabour rules (HR)Overtime report
AC · Week grid · Publishing a week with any LabourRule violation is impossible; the violating shift is highlighted with the rule name. Publishing a valid week takes one click and notifies every person with a shift within 60 seconds.
6 · PLATFORM WIRING
Identity — roles: manager, shift lead, staff, HR Knowledge Graph — Store, Person, reporting lines Functions — approvals.route, notify.send, calendar.workingDays Audit — every publish, swap, rule change Inference — draft staff messages, summarise swap patterns Observability — SLO: publish < 2s p95
7 · AGENT BRIEF
WATCHSwap requests by hour and channel · time from draft to publish · shifts edited after publish · exports and screenshots
MAY PROPOSEDefaults, shortcuts, views, notification timing, new reports
NEVER TOUCHLabourRule · contract_hours · anything that changes who gets paid for what
8 · Migration plan · 9 · Open questions — pages 2–4page 1 of 4
After migration

The Factory hands the app to its agent. Here's the first 90 days.

HAND-OFF · shifts.gsaas · day {{ hoDay }}
{{ s.day }}
{{ s.title }}

{{ s.text }}

HAND-OFF · checklist{{ ckDone }}
Before · rented
Day 90 · owned
{{ r.k }}
{{ r.a }}
{{ r.b }}

Bring your questions. Leave with a sample report and a scoping plan.

We walk through a real report on the call; once we have your statements, the audit can start on your own inventory.