Sales executive
Own customers only. Locator, GP on their book, customer glass.
Not: Everyone else's deals. Staff admin. Group totals.
How an order ships
The Aberdeen portal is the live prototype. The sales demo is a separate tab with fictional cars. An order is a clone of the desk template — one JSON file, a new database, their domain. Never a copy of App.jsx.
Logo, hex, trading name, phone, legal, domain — written into tenant.json.
Brand pack — one page
GitHub template forecourt-desk. Never a copy of Aberdeen App.jsx. Never a copy of the sales demo.
{
"slug": "harbour-park",
"name": "Harbour Park",
"legal": "Harbour Park Automotive Ltd",
"groupMark": "HP",
"phone": "01202 774 410",
"domain": "portal.harbourpark.example",
"sites": [
"Poole"
],
"franchise": {
"id": "ford",
"word": "FORD",
"accent": "#2A6BAC"
},
"ingest": "excel",
"features": {
"overview": true,
"stock": true,
"locator": true,
"pipeline": true,
"customer": true,
"mind": true,
"manufacturer": false
},
"staff": [
{
"name": "Alex Reed",
"email": "alex@harbourpark.example",
"role": "management",
"site": "Poole"
},
{
"name": "Sam Cole",
"email": "sam@harbourpark.example",
"role": "sales",
"site": "Poole"
}
],
"seedDemo": false
}New Supabase project. Own rows, own staff. Paste 0001_core.sql. Never share Aberdeen.
Excel now (upsert-by-VIN). Manufacturer only if they have credentials, in their project.
Core is upsert-by-VIN. Škoda UK is one adapter. Excel is another. A Ford group does not get the Škoda function pasted into App.jsx.
Vercel + custom domain + magic-link staff login. Half a day once the template exists.
gh repo create desk-harbour-park --template mattgirvan/forecourt-deskFill tenant.json, new Supabase, Vercel domain. The tab they played with is the sales demo. This clone is the live glass. Monthly billing starts here.
Who sits where
Aberdeen already has execs (own book) and management (the floor). A host, a progressor, an accountant are extra seats on the same desk — not extra products. A group with three franchises is still Group: seats scoped to rooftop and badge.
Own customers only. Locator, GP on their book, customer glass.
Not: Everyone else's deals. Staff admin. Group totals.
The floor. Reassign. Month-end. GP on every live deal.
Not: Group roll-up across rooftops (that is principal).
Locator and inbound stock. Stage the car. No GP.
Not: Gross, customer thread, month-end numbers.
Who is coming, which exec, where the car is. Lookup only.
Not: Edit a deal, see GP, move locator.
Staff list, documents, month-end checklist, handover pack.
Not: Reassign live deals (manager). Close GP (accounts).
GP and month-end by deal ref. Export.
Not: Customer thread, phone, email. They get a number, not a person.
7 seats in the product. A John Clark–scale group does not get a custom role named “Škoda Aberdeen sales host”. They get host, on Aberdeen, franchise Škoda.
Name the group and franchise. Open a full desk on its own page — not a widget here. Feature flags above are what a real order would turn on.
Put their name on the glass
Group, rooftop, franchise. Then open a full desk — their book, their badge, not a widget in this page.
Primary franchise
Opens a full Audi desk. Fictional stock. Clickable — locator, GP, customer glass.