Plato environments

Every copy of Plato, where its code comes from, and which database it talks to. Updated 28 Oct 2026.

How it fits together

Automatic: dev updates itself from main; the sandbox is published with every changeManual push: live and demo on Olly's word, Carl dev for a rehearsal, and Carl's handover to OllyThe database each site usesThe colour of the strip across the top of that site: Olly's dev amber, demo sky blue, Carl's sandbox pink, Carl dev coral (live has none)

Each website talks to one database only. Carl's builds rewrite every database address to that site's own database and refuse to publish if any other remains.

Services and where data lives

The outside services Plato uses, what each one is for, and what changes next. Plato's structure (catalogue, customers, venues, inputs) is on the Plato structure map ↗.

Supabase database and sign-in

What
One database per environment (above): every table, sign-in, the rules, the server functions (scanning, notifications)
Next
Database backups from Supabase (daily; point-in-time on a paid plan)

Supabase Storage intended for all files

Today
COSHH safety data sheets only. Every other photo (invoices, labels, products, dishes, checks, logos) sits inside the database as text
Next
All photos and invoice originals as files in private per-venue folders, a link in the database; logos in a public folder (3.2 list)

Second backup copy third party: to be decided

Why
Supabase's database backups don't cover the file store, and a copy outside Supabase protects against a problem with Supabase itself
Plan
Nightly encrypted copy of the database and the files with a second provider (e.g. Cloudflare R2, Backblaze or Amazon S3), versioned, restore tested
Stop
Backups in git and photos on a personal Drive, before real customer data

Cloudflare Pages websites

What
Hosts each environment's website (Olly's account for live, demo, dev; Carl's for Carl dev and the sandbox)

Anthropic (Claude API) AI reading

What
Reads photos and PDFs for every scan: invoices (onboarding and delivery check), labels, recipes, menus, COSHH. Called only from Supabase, its key never reaches a browser
Cost
Per scan; usage recorded per company and venue (3.1 on). Next: record which tool each scan came from

Food data lookups

Open Food Facts
Free public food database: barcode and name search for nutrition. To be reduced once the Plato catalogue holds checked data
UK CoFID
The government's food table, copied in (not looked up live): nutrition for plain foods in Fill nutrition and the Plato catalogue

Notifications email and push

Email
Resend, from the notify server function
Push
Web push to phones and browsers

Smaller third parties

QR codes
api.qrserver.com draws the QR code images (could be made in Plato instead)
Fonts
Google Fonts
Code
GitHub: carlhuelin/plato (Carl), otrjersey/plato (Olly)

How work moves between Carl and Olly

Carl keeps his own copy of Plato (a fork) with his own databases. Olly's work flows in regularly; Carl's work flows back as pull requests that Olly merges.

Automatic: happens by itselfManual push: someone decides and does itCode merged or brought in
  1. Sync. Olly's latest main is brought into Carl's copy every day or two, so the two never drift far apart.
  2. Build. Carl works on a branch and tries it on the sandbox, which has its own database, so nothing reaches Olly.
  3. Rehearse (a manual push). Before a handover, the work is pushed to Carl dev, a copy of Olly's dev, exactly as it will on dev.
  4. Hand over (a manual push). Carl pushes the finished branch to Olly's repository as a pull request. Olly merges it; dev updates, and its database changes run on TEST at that moment.
  5. Promote. Live and demo get it when Olly says so, with its database changes in the same promotion.

Olly's own changes skip steps 1 to 4: a short branch, merged the same day, straight onto dev.

Module versions

Which version of each module each Plato website is running.

ModuleLiveDemoOlly's devSandboxCarl dev
Hub1.631.651.703.2 beta3.1 beta
Pantry & ordering1.941.981.99.53.2 beta3.1 beta
Recipes & menus2.312.352.36.33.2 beta3.1 beta
Food safety1.411.411.423.2 beta3.1 beta
Training & COSHH1.161.161.183.2 beta3.1 beta
Financials0.30.30.43.2 beta3.1 beta
Company adminN/AN/AN/A3.2 beta3.1 beta
Plato platformN/AN/AN/A3.2 beta3.1 beta
HelpN/AN/AN/A3.2 beta3.1 beta

Read from each website when this page was published, 30 Oct 2026 08:06. Carl dev gets its own column once its website exists.

Plato

Live real kitchens

Off The Rails and La Piscine use this every day. Changes only when Olly promotes from dev.

Website
otrorders.pages.dev (rename to plato-live planned)
Database
LIVE · daily backups
Code
otrjersey/plato main, as last promoted
Sign-in
Name + PIN (old route)

Demo showing people

A copy of Off The Rails' data for demonstrations. Promoted on Olly's word, like live.

Website
plato-demo.pages.dev
Database
DEMO
Code
otrjersey/plato main, as last promoted

Olly dev / Test Olly's testing

Updates itself about a minute after anything lands on main. Olly tests here before promoting.

Website
plato-dev.pages.dev
Database
TEST
Code
otrjersey/plato main (branches get preview addresses)
Alerts
Phone and email alerts set up

Carl dev Carl · Plato 3.1 beta

A copy of Olly's dev, logins included, in Carl's own Supabase, with 3.0 and 3.1 together: the dress rehearsal of the single push to Olly's dev.

Website
plato-dev-carl.pages.dev · Plato admin plato-dev-carl-admin.pages.dev
Database
Carl dev · 22 Oct copy of dev, database steps R37-001 to R37-075 applied (27 Oct); allergens switched to the new storage; two Off The Rails products whose old allergen data didn't agree (12oz Coffee Cup Feel Good, Moving Mountains Burgers) are Allergens not checked. Backed up first (27 Oct, on Carl's Mac)
Version
3.1: multi-customer (3.0) plus the allergen work and everything after it, to the 3.1 cut-off
Code
carlhuelin/plato carl/r37-account-layer at the 3.1-cutoff marker
Sign-in
Email + password; PINs unlock kitchen devices
Alerts
Functions copied; no keys set yet

Sandbox Carl · Plato 3.2 beta

The account layer (R37): companies, venues, email sign-in, kitchen devices, Company admin and the Plato platform (on its own address). Olly's latest work merged in on 21 Oct. Newest: food allergens Stage 1 (the allergen list and bulk-review words from the database; Plato platform → Allergen words).

Website
plato-sandbox-carl.pages.dev · Plato admin plato-sandbox-carl-admin.pages.dev
Database
Sandbox · 22 Sep copy of live + test companies
Version
3.2: everything after the 3.1 cut-off (fixes from Olly's testing, bulk review, allergens may change, QR logo and name, and on)
Code
carlhuelin/plato carl/3.2
Sign-in
Email + password; PINs unlock kitchen devices
Alerts
Not set up here (tested on dev at the handover)
The sandbox and Carl dev now both have database steps R37-001 to R37-075 (the 3.1 cut-off plus the agreed late addition) and allergens on the new storage; Carl dev is the dress rehearsal, on Olly's data, of the single push that will go to Olly's dev. They reach dev and live only at the handover, every step in order with nothing held back (Carl, 28 Oct): no shared iPads are in use, and live is shut for its promotion while everyone's login is reset to email.

Other Off The Rails apps

Lunchbox

Now its own repository (otrjersey/lunchbox), separate from Plato.

Website
otr-lunchbox.pages.dev
Database
Lunchbox & events

Events

Event lunches; notes moved to Packed Lunch.

Website
otr-events.pages.dev
Database
Lunchbox & events

Launch HQ

Project planner, outside Plato, on its own database.

Website
otrprojectplanner.pages.dev
Database
Its own, separate from Plato