Rankine
Operating Company · Scope briefing
The whole system.
The first four surfaces.
Eight surfaces, one gateway, one hierarchy. The first rollout is S1, S2, S3 and S5, in one region, for AC staff.
Measured, not promised. · Go live Friday 2026-11-06 · Owner: Ethan · main @ c855570
One network, local names, one backbone
The network
Rankine is the network and the contracting entity. Customers contract with Rankine, not with each firm.
The operating firms
Firms keep their local names and equity. AC Services DFW is Works No. 1, the first firm on the platform.
The backbone
Eight surfaces, and none owns data. Each is a scoped view onto one multi-tenant hierarchy, reached only through one gateway.
What follows measures the first rollout against that whole: how much is built, how much is switched on, and what turns the rest on.
Plate 02
Source: README.md, packages/contracts/src/surfaces.ts
Two owners, one contracting entity
50%
Industries Direct
Platform, engineering
50%
AC Services DFW
Operating business
Rankine Operating Company, LLC
Signs customer contracts. Owns new IP. Every major decision needs both owners.
Customers
Contract with Rankine
Works firms
AC Services DFW is Works No. 1
Platform
Licensed from Industries Direct
If the owners deadlock
1
Status quo
Last approved budget runs
2
Representatives meet
Within 10 business days
3
Neutral decision or mediation
Within 30 days
4
Buy-sell (shotgun)
After 90 days, key matters only
Plate 02A
DRAFT terms, not signed · platform license, agreed values and ACS entity details still open
Eight surfaces, one backbone, four live
S1
Front door
Everyone, before sign-in
● Live
S2
Service Manager
The office
● Live
S3
Dispatch Console
Dispatchers
● Live
S4
HQ Ops Dashboard
Leadership, read-only
○ Built, not published
S5
Technician fallback
Technicians, offline-first
● Live
S6
Customer Portal
Customers, tier-scoped
○ Built, not published
S7
Vendor Portal
Vendors
○ Disabled, Phase 4
S8
Subcontractor Portal
Subcontractor firms
○ Built, not published
S0 shared shell
→ Gateway: operation catalogue, unit of work →
PostgreSQL 16 · row-level security
Plate 03
Source: SURFACES and ROLLOUT, surfaces.ts
The build is far ahead of the footprint
Built means tested and admitted by the gateway. Live means what AC staff use today. The gap is audience and geography, not code.
Surfaces on the live site
4 of 8
Principal namespaces admitted
anonymous, internal, device
3 of 6
Entities writable from live surfaces
41 of 51
Gateway operations reachable
from S1, S2, S3 or S5
115 of 132
Service regions open
a region is a row, so there is no fixed total
1 · DFW
Operating firms on the platform
Works No. 1; the network is open-ended
1
Plate 04
Computed from packages/contracts at main
Four built surfaces are not yet on the site
Surface
Who it admits
What it opens
State
S6 Customer Portal
Customers, scoped to their own tree
Sites, work, agreements, the site card, requests, payments
Built, not published
S8 Subcontractor Portal
Subcontractor firms
Roster, compliance documents, work, settlement statements
Built, not published
S4 HQ Ops Dashboard
Leadership, read-only
43 company-wide figures from a 15-minute rollup
Built, enabled, not published
S7 Vendor Portal
Vendors, separate namespace
Catalogue prices, purchase orders, shipments, three-way match, returns
Built, disabled, Phase 4
Every external party is still outside: customers, subcontractor firms and vendors. S6 is what carries a multi-site customer end to end.
Plate 05
Source: surfaces.ts, docs/history 25 and 26, hq.ts
Scale is rows, not rebuilds
1
Parent
The customer organisation
2
Region
Our service region, the shard key
3
Location
A customer facility, one dispatching region
4
Site
Equipment group, where vendor terms attach
A customer parent spans our regions.
One master agreement reaches every region we serve. Terms resolve down the path as nearest, ratchet or attach.
Opening a region is a write, not a project.
regions.create is principal-only. DFW is the one region seeded (migration 0038).
Sharding follows the same edge.
Tier 3 is a container per region, a second name in worker.mjs and nothing else.
Plate 06
Source: BACKBONE_CONTRACT §1–3, CLOUDFLARE_PAGES.md
What one backbone already carries
132
gateway operations, each with its own surface list
43
HQ figures in five areas, additive across regions
9
service codes in three work classes: service, install, commissioning
4
invoicing paths that stay four: one-time, membership, enterprise SLA, project
11
contract terms, each with its own authoring and combine rule
12
roles: ten for staff, two for a customer's payer and requester
Plate 07
Computed from packages/contracts at main
Time reclaimed: CFO and CSO
Garrett · CFO · 30 h/wk of admin
● Tracking invoices and payments across sites
10.0 → 3.0
● Timesheets and payroll prep
6.0 → 1.2
● Purchase orders and vendor bills
4.0 → 1.6
○ Subcontractor documents and settlements
5.0 → 2.0
○ Hand-built company reports
5.0 → 1.0
21.2 h/wk back · $203,520/yr
Dylan · CSO · 10 h/wk of admin
● Juggling dispatch tools and sites
4.0 → 1.2
● Chasing job status by phone and text
3.0 → 0.9
● Tracking quotes and follow-ups
2.0 → 0.8
● Looking up agreements, SLA terms, accounts
1.0 → 0.2
6.9 h/wk back · $66,240/yr
Base case at $200/hr, 48 weeks
$269,760 a year
Plate 08
ESTIMATE, not measured · ● live surface · ○ needs S4, S7 or S8
Money slipping through the cracks
Based on $5M to $7M of annual revenue, shown at the $6M midpoint. Rates are estimates for a multi-site service contractor.
Where it leaks
% rev
$ a year
What closes it
Unbilled labor and parts
2.0%
$120,000
● S5 writes time and parts used onto the job
Late or missed invoices, write-offs
0.6%
$36,000
● S2 invoices and payments, recorded by finance
Wrong SLA or rate applied
0.4%
$24,000
● Terms resolve from the agreement; SLA due time derived, never typed
Subcontractor settlement errors
0.2%
$12,000
● A settlement line must equal quantity × rate, with the emergency multiplier
Duplicate or mismatched vendor bills
0.3%
$18,000
○ Three-way match: price to order, quantity to receipt (S7)
Total leaking
3.5%
$210,000
Recaptured at 70%: $147,000 a year
Plate 09
ESTIMATE, not measured · ● live surface · ○ needs S7
A technician's day: 107 minutes back
Today
260 min on site
After
367 min on site
Lost to
Today
After
Back
What closes it
■ Parts runs to the supply house
60
15
45
● Job notes and equipment record arrive first; the office stages parts
■ Travel between calls
100
85
15
○ Region dispatch board; route optimization is not built
■ Return trips for surprises
30
8
22
● Site notes, photos and units on the job before the visit
■ End-of-day paperwork
30
5
25
● Job time and signature closed out at the curb in S5
■ Productive time on site
260
367
+107
+41% in an 8-hour day
Plate 10
ESTIMATE, not measured · minutes per 480-minute day · ● built · ○ not built
Revenue per technician-hour: +41%
$81 → $115
per paid technician-hour, at $150 per productive hour
$32,100
added revenue per technician a year, if half the freed time is filled
$256,800
across 8 technicians, gross revenue a year
Parts runs to the supply house
$13,500
End-of-day paperwork
$7,500
Return trips for surprises
$6,600
Travel between calls ○
$4,500
Per technician, a year. This is gross revenue from time freed, not cost saved.
Plate 11
ESTIMATE · $150/productive hr · 8 technicians · 240 days · 50% filled
What it is worth, base case
$269,760
time back for the CFO and CSO, 28.1 h/wk at $200/hr
$147,000
revenue recaptured, 70% of $210,000 leaking at $6M
$256,800
technician revenue lift, 8 technicians, half the freed time filled
$673,560
a year in total, range $353,436 to $1,087,340
How much the first rollout unlocks
● S1, S2, S3, S5 live: $557,760
○ Needs S4, S7, S8 or routing: $115,800
Assumptions: $200/hr, 48 weeks, $6M revenue (midpoint of $5M to $7M), 70% recapture, $150 per productive technician hour, 8 technicians. The technician lift is gross revenue, not cost saved. Billing every part is counted once, in leakage on plate 09, and not again in the technician lift. Replace the hours with measured ones before this leaves the room.
Plate 12
ESTIMATE, not measured
From four surfaces to the full network
● Now · since 2026-10-31
S1 · S2 · S3 · S5
One region, Dallas–Fort Worth. One firm, Works No. 1. Office, dispatch and technicians.
○ Next · one line each
S4 · S6 · S8
Leadership sees every region. Customers see their own sites. Subcontractor firms upload documents and read settlements.
○ Then · Phase 4 and beyond
S7 · more regions
Vendors join procurement. Each new region opens as a row. Diagnostic-data rights are already stated on every contract.
No surface is registered for Phase 3. Diagnostic-data licensing (OQ5) is the Phase 4 question the schema forces at signature time instead of year six.
Plate 13
Source: surfaces.ts, OPEN_DECISIONS.md (D9, OQ5), SURFACES.md
Widening the rollout is one reviewed line
packages/contracts/src/surfaces.ts
ROLLOUT = ["S1", "S2", "S3", "S5"]
Open before the next surface
Offline technician: S1 needs the gateway, so a device grant gets no further with it down. Owner: Ethan.
S5 shift session on a shared browser outlives a closed tab. Owner: Ethan.
Portal bookmarks keep their own sign-in pages. Owner: Ethan.
What the line does
The Pages build and the gateway both read it. A login whose surfaces are all outside it is told its portal is not open yet.
Nothing else changes: the other surfaces keep their tests and demo.
Plate 14
Source: surfaces.ts, docs/history/30_S1_Front_Door.md