The Enigma Field · Infrastructure Blueprint

One Watchtower,
many islands

Enigma's machinery lives on one guarded Oracle tenancy behind Cloudflare. Every client hosts on an island of their own: their cloud account, their data, our operator key. Enterprise patterns from day one, every exit door left open.

£0infra / month
1 + ∞watchtower + islands
27work packages
5spines, one system

Live now: watchtower · 2 cores / 12 GB ARM · Cloudflare tunnel sealed (0 open web ports) · Access SSO at the-enigma-field.cloudflareaccess.com · Coolify running · £0 guardrailed

The £0 discipline

Oracle's free allowance is 1,500 OCPU-hours + 9,000 GB-hours per month for every tenancy, paid or free: exactly one 2-core / 12 GB ARM machine running continuously. The estate is designed to live inside that line on purpose.

portal.enigma · guardrails console
free pool · this month
ARM hours1,391 / 1,500
Spend£0.00 of £1 budget
alert rules
Actual spend ≥ £0.01 → email + Telegram
Forecast ≥ £1 → email
Weekly free-tier audit

Guardrails console · the £0 line, visible and switched

Target architecture

Your watchdog question, answered by the diagram: the monitor never lives on the box it watches. Each tenancy's free x86 micro watches the other tenancy, and one external check (Better Stack or UptimeRobot, free) watches both from outside Oracle entirely, so even an Oracle-wide outage still pages you.

Where every gigabyte lives

One free OCI account, carved deliberately. First the whole account, then inside the Watchtower itself, so every moving part is visible against the memory it actually occupies.

One free OCI account · what the free tier hands you

ARM compute · the Watchtower2 OCPU / 12 GB · runs the entire Enigma machine
2× x86 micros1 GB each · watchdogs
200 GB block storageboot volumes + 5 free backups
20 GB objectstaging archives
10 TB / month egress~10× a paid droplet
Vault · Monitoring · Alerts · 1 LBall free, all used

Inside the Watchtower · 12 GB, split by job

Payload portal + Postgres~1.5 GB · the product
Gateway~0.4 GB · credentials + audit
Hermes + Steward + Sentinel~1.2 GB · the agent crew
OS + Coolify~1.8 GB
Second brain~0.5 GB · CouchDB
Planka~0.4 GB · kanban
Buzz pilot~0.6 GB · team + agents chat
Staging (ephemeral)~1.0 GB · per-branch, torn down at merge
Headroom · ~4.6 GB freethe Sentinel watches this line and forecasts before it thins

Client sites appear nowhere in these maps on purpose: every client's workload lives on their own island, spending their own free tier. The Watchtower's headroom belongs to Enigma alone.

The product, in frames

What the moving parts look like as screens. Mockups, not screenshots: the build targets exactly these.

portal.enigma · fleet
Davidehealthylaunch live
client 2update proposed
client 3healthy
+ new clientprovisioner · login link in <5 min

The fleet board · super-admin home

portal.enigma · estate map
humansAI agentsblocked bots
Instagram · 312
Google · 188
AI answers · 64
Email · 41
/ retreat door
/ home door
/ blog door
offer room · 1:42
pricing room · 0:38
about · 0:21
checkout · 23
drop-off · 61%
pricing room loses 61% on mobile →run page check

The Estate Map · doors, rooms, drop-offs

My courses2 active
Subscriptionmember+
Purchases4 items
Ask the agent about your products…
Continue course · module 3

The member portal · same code, web → app store

Watchtower · Enigma's accountwhat flowsClient island · their account
Gatewayholds every credential + audit line
enigma-operatorleast-privilege IAM user in THEIR cloud
Coolifythe deploy hand
WordPress containertheir site, their CMS, their VM
Update Stewardwatches every CVE + release feed
Staging cloneside-tree on their island, behind Access
Capacity Sentineltrend forecasts
Island guardrailstheir budget, their alerts, installed by API
Watchdog micros ×2plus one monitor outside Oracle
Health beacontunnel + site + services answering
Payload portalfleet board · tiles · Estate Map
WP API · Stripe · bot indextheir data stays home; the portal is a window
Backup jobnightly, encrypted
Site + databaserestorable anywhere in under an hour
The whole relationship is the key: grant it and the machine runs; revoke it and the island sails on, whole. That is white glove with the exit door open.

Watchtower ↔ island · the working relationship

Also queued for frames when we mock the sales page proper: Launch Command's live war room, the connect wizard with its grant switches, the client vault (services + off/read/act dials), the agent registry card, the infrastructure map (these treemaps, live), the machine-surface tile showing what AI read this week, and a daily-brief card as it lands in the client's chat.

Layer 0 · Edge

Cloudflare as the perimeter

portal.enigma · crawl control
verified AI crawlers
GPTBotallowsearch-onlyblock
ClaudeBotallowsearch-onlyblock
PerplexityBotallowsearch-onlyblock
Unverified bots1,204 challenged this week
Tunnels: 2 active · open ports: 0sealed

Crawl control · welcome the agents, repel the swarm

AI-era crawl policy (the edge welcomes agents, repels swarms)

Layer 1 · Tenancy 1

The hosting plane

portal.enigma · deploys
enigma-landing1.5 GB caplive
portal1.9 GB caplive
stagingfeature/estate-map · preview URL · torn down at mergebranch
Promote to main acceptance check ✓ required

Deploys · side-tree to main, gated by the check

Layer 2 · Tenancy 2

The agent plane

portal.enigma · agent registry
Hermesbriefsalerts142 runs · audit ✓
Stewardpropose-only4 proposals · 0 unauthorized
steward standing rules · per severity
Critical, actively exploited → patch now, notify after
High → rehearse + propose, wait for approval
Medium/low → weekly digest

Agent registry · what each agent may do, written as switches agents obey

Idle-reclaim warning, and it aims at this VM. Oracle stops free instances under 10% CPU and network for 7 days. A live WordPress box clears that bar; a quiet agent box may not. The watchdog doubles as the heartbeat, and PAYG accounts are reportedly exempt, one more reason the hosting side upgrades first.

Layer 3 · Infra identity

Permissions below the web layer

Cloudflare Access governs humans at the front door. Agents and automation get governed at the cloud layer, and this is the blind spot most self-hosted builds never close:

client dashboard · vault grants
connected services · your grants to Enigma
Stripeoffreadact
GA4offreadact
Mailchimpoffreadact
Zoomoffreadact
Every use audited · revoke is instant · Enigma never sees the keys

The vault · access as dials the client owns

Layer 4 · Survival

The layer that makes it a business

The honest ceiling: free tier gives you enterprise patterns, zero trust, isolation, IaC, cross-monitoring, but not enterprise guarantees. No SLA, no support contract, and free Oracle tenancies have a documented history of termination with little recourse. You cannot buy those guarantees for £0. What you can build for £0 is the ability to not care.

portal.enigma · continuity console
Nightly backup02:14 · encrypted → R2off-Oracle ✓
Restore drilllast pass: 41 min, clean VM
EmailSPF ✓ DKIM ✓ via API route
DNSCloudflare · repoint in minutes
Run restore drill Export handoff bundle

Continuity console · the ability to not care, as buttons

What the estate looks like on paper

PieceWhereRunsCost
watchtower builtARM 2/12 · one VMEnigma machinery ONLY: Coolify · Payload (portal + Enigma site content) · gateway · Hermes/Steward/Sentinel · second brain · Planka · Buzz£0
Client islandseach client's own OCIClient workloads live on client accounts from client #1 (Davide), own free tier, own PAYG + guardrails, enigma-operator key. The Watchtower never hosts client sites.£0 to Enigma
watchdog-hx86 microUptime Kuma watching tq-core + its twin micro, heartbeat£0
Growth valvedormantSecond 2/12 VM (~$28/mo, minutes from IaC) or second free account, opened only on a Sentinel forecast£0 until used
watchdog-ax86 microUptime Kuma watching tq-core (second angle)£0
3D frontendsCloudflare PagesNext.js + Three.js scroll experiences per client£0
PerimeterCloudflareDNS, tunnels, Access SSO, WAF, R2 backups£0
EmailBrevo / ResendTransactional mail for all sites£0 to start
External monitorBetter Stack / UptimeRobotOutside-Oracle check on both tenancies£0

Worth paying for, when the time comes

Layer 5 · Clients

The client tenancy model

The product above the infrastructure: white-glove service, built so a client could walk away whole, which is exactly why they won't.

portal.enigma · new client
NameAurora Wellness
CMS rungWordPressPayload
Email rungBrevoListmonkBeehiiv
Islandtheir OCIinherited server
☐ Cloudflare account signup (tracked manual seam, at signing)
Spin up client · login link in ~5 min

The provisioner · a client is a form and a button

One Cloudflare account per client

The Enigma Portal (the product)

The Estate Map (the flow visualization)

Launch Command (campaign mode)

Fleet view (managing many clients as one)

The Capacity Sentinel (proactive, not reactive)

The Agent Registry (every agent, fully visible, editable)

Component ladders (every layer, lowest sufficient rung wins)

The commerce ladder generalizes: each component is chosen per client, bottom-up. Rung 1 is nearly always Cloudflare/Stripe-native at £0; the top rung is self-hosted heavyweight machinery sold at flagship pricing. Never sell a top rung to a rung-1 client.

Rung admission rule: a tool only earns a rung if it has a robust, scriptable API whose key or OAuth grant we can scope, store in Vault, and hand to the gateway, that is what lets the wizard connect it once and the agents auto-populate tiles, reports, and briefs from it forever. No API, no rung (it can still be connect-only for inherited clients). Cautionary example: WPForms, a good human product with a weak machine API: inherited installs are kept patched and connect-only, never chosen for new builds. An inherited install running on a third party's license is a dependency to record and remedy at handover. A working revenue path is never migrated for taste; sales move to rung 1 (Stripe Checkout) at the next natural change.

Command-centre patterns (adopted from the ARMS guide, Aug 2026)

Agency billing (Enigma gets paid inside the product)

The provisioner (one button spins up a client)

Onboarding doctrine: a login is the whole onboarding

Sales automation recipes (preset, per-client toggles)

The link engine (short links as managed inventory)

The Hormozi metrics layer

Communications: Buzz (piloted, not promised)

Client islands: bring any infrastructure (the default hosting model)

The mobile layer (deferred build, day-one architecture)

The membership layer (every site gets members)

The client vault: connect once, grant by switch

Contacts into the client's second brain

The explain-it-simply layer (the eye icon)

Client zero: The Enigma Field itself

Client #1: Davide

Custom client services (the extension point)

Frame of reference: the Wix and Squarespace AI wave

Data & IP doctrine (contract language, not vibes)

Inherited from the August research

Nick's 13 Aug research thread and its audited distillation (the Tech-stack selection brief in the Enigma Library) were reviewed against this design on 27 Aug. The verdicts:

Already agreeing, now confirmed as doctrine

New obligations this blueprint now carries

One honest gap the research exposes: EU data residency. Davide is in Luxembourg with EU clients, and the brief rightly weighs GDPR. This tenancy is homed in US East (Ashburn) and free ARM compute is home-region only, an OCI free account cannot host EU-resident client data in the EU. For EU-sensitive clients the options are: static-on-Cloudflare (data lives at the edge), a future EU-homed OCI account, or a small paid EU droplet for that client alone. Flagged now so it's a pricing conversation, not a surprise.

Security posture: the audit

An adversarial pass over the whole design (28 Aug). Strong by construction: sealed ports, container isolation, one credential-holder, grants-not-keys, the hash-chained Ledger, off-cloud backups, least-privilege island keys, invariant checkers. The audit added seven upgrades, now part of the spec:

  1. MFA everywhere it matters: OCI console accounts carry account-level MFA; Cloudflare Access requires MFA for Owner and super-admin surfaces, hardware security keys recommended for the Owner.
  2. Step-up authentication: vault grant changes, Owner-locked settings, de-provisioning, and restores demand fresh re-auth in the moment, a stolen session can look, never touch.
  3. No static secrets on disk: the Watchtower reaches OCI Vault via instance principals (the VM's own identity); there is no credential file to steal.
  4. Ransomware-resistant backups: the R2 token is write-and-list only, a compromised Watchtower can add history, never read or erase it, plus object versioning.
  5. Rotation as routine: operator keys, API keys, tunnel credentials on a 90-day cycle, Steward-proposed, inventory visible in the registry. The build-phase tenancy-admin key is demoted to scoped automation users before the first client.
  6. Security signals locked on: failed admin logins, new-device sign-ins, grant changes, and agent permission edits join the un-removable signal set.
  7. No secrets in any frontend, enforced: browsers hold only their Access session; keys live in Vault, read only by the gateway. The deploy pipeline scans every built frontend bundle for key patterns and refuses to ship on a match, a checker, not a habit.
  8. Injection-proof by construction: raw SQL is a code-review rejection, every data path uses parameterized engines (Payload's ORM, WordPress prepared statements); plugin-land is watched by the Steward + WPScan; Cloudflare's WAF managed rules filter injection patterns at the edge as depth.
  9. Stored HTML is never trusted (XSS): the default is free, React/Vue auto-escape all normal rendering. HTML-bearing fields (rich text, anything that will ever render as markup) are allowlist-sanitized before they enter the database. The few declared raw-HTML sinks (dangerouslySetInnerHTML, v-html, WP content output) sanitize at render as well, they also receive content that bypassed our write path (inherited client databases, migrations, bot-composed HTML), and every such sink is explicitly declared and review-flagged, so "where do we render raw HTML" is a short known list, not a search. CSP header on every property as depth.
  10. The break-glass runbook: written, rehearsed procedures for Access lockout, key compromise (rotate everything via IaC in one command), and a Cloudflare outage. Enterprise-grade means the bad day is rehearsed, not improvised.

The honest ceiling stands: patterns and discipline are enterprise-level; contractual guarantees (SLA, indemnity) remain what £0 cannot buy. Everything above is enforced by the invariant contract, not by memory.

One system, top to bottom

Every part above assembles into a single stack. Read it bottom-up; each layer only talks to its neighbors through the stated interface, which is why any component is a swappable rung and the whole is not a patchwork.

LayerWhat runs thereInterface upward
MetalOCI: the watchtower (2/12 ARM, Enigma only), 2 x86 micro watchdogs, Vault, block storage, £0, plus client islands (each client's own OCI account) operated via scoped keys. All declared in the IaC repo.OCI API (scoped keys)
RuntimeDocker via Coolify: Enigma stack on the watchtower; client containers on their islandsCoolify + container APIs
DataPayload Postgres (agency truth: tenants, roles, registry, glossary, links, launches) · per-client WP databases on islands (content truth) · client Vectorize indexes in client CF accounts (bot truth) · Supabase where a custom app needs iteach system's own API; credentials only in Vault
GatewayThe single credential-holder and audit line: every agent action and every portal button resolves here, one permission table, Owner → Super-Admin → client-admin → member → agentauthenticated internal API
EdgeCloudflare: tunnels (no open ports), Access SSO, Pages (Enigma landing + client frontends + machine surfaces), Workers (forms, sync jobs), R2 (backups), AI Crawl ControlHTTPS to the world; tunnels inward
ProductThe Payload portal: fleet board, infrastructure map, Estate Map, Launch Command, tiles + connect wizard, membership layer, Hormozi metrics, machine-surface tile, agent registry, view-as, ELI5 glossary, provisionerone web app, role-scoped; mobile later via Capacitor from the same codebase
GovernanceThe invariant contract (Owner-locked), Dual-Control doctrine, ownership doctrine, component ladders, Update Steward + Capacity Sentinel + watchdogspolicy-panel switches; healing-loop proposals to the Owner

Environments: side-tree to main (Enigma and client infra alike)

The five spines that make it one system rather than parts: (1) everything is an API and every surface, button, schedule, agent, calls the same one; (2) one permission table governs every human and agent; (3) one IaC repo declares every resource on every cloud, so any of it can be rebuilt from git; (4) one invariant contract that every change is reviewed against; (5) one ownership rule, client things live in client-portable accounts, agency things in ours. A component that honors the five spines can be swapped without touching its neighbors; that is the difference between a stack and a Frankenstein.

Execution spec, the work packages

Written so a competent worker can execute without needing the reasoning above: each package states what it produces, what must exist first, the guardrails that must not be violated while building it, and the check that proves it done. Build in dependency order; packages with the same dependencies can run in parallel.

WPDeliverableDepends onGuardrails while buildingDone when
00PAYG upgrade + billing guardrails: £1 monthly budget, spend alert rule, cost-API watcher scriptNick completes console upgrade (only Nick, payment credentials)No new resources before the budget + alert exist. Never cite service limits as free-tier headroom.Budget visible in console; test alert fires to email
01tq-agents VM: 2 OCPU/12GB A1, Ubuntu 22.04 aarch64 image, agents subnet, Docker + Compose via cloud-initWP-00ARM image only (x86 image on A1 shape fails silently). 48-hour billing watch before any workload lands: any non-zero charge → terminate VM, report, fall back to second-account plan.SSH in, docker run hello-world passes, 48h watch shows £0
02Cloudflare tunnels on both VMs; ingress rules per service; ports 80/443 closed in OCI security listsWP-01 + domain decision (open)Close ports only after the tunnel serves traffic (verify, then close, never a dark window). SSH 22 stays open until the tunnel carries SSH too.Site loads via domain through tunnel; external port scan shows 80/443 closed
03Coolify on the watchtower (Enigma stack only); per-client WordPress container template retained, but deployed to client islands via operator keys, never to the WatchtowerWP-02One client per container, no shared DBs. Memory cap per container (512MB–1GB) so one client cannot starve the rest. Existing WP install becomes container zero or is rebuilt into the pattern, never left as a snowflake.Two demo client containers run side by side; killing one doesn't touch the other
04Two x86 micro watchdogs (Uptime Kuma) + one external monitor (Better Stack/UptimeRobot free)WP-00A monitor never watches only its own host. External check is mandatory, both micros now share one tenancy, so outside-Oracle is the only true independence.Stopping nginx on either VM produces an alert from a different machine within 5 min
05IaC repo (OpenTofu + Compose in git) + nightly encrypted backups to Cloudflare R2WP-02 (R2)Backups must leave Oracle, boot-volume backups alone are forbidden as the only copy. Restore is part of the deliverable, not an afterthought.A test restore of one client container from R2 onto a clean VM succeeds
06Transactional email: Brevo or Resend wired into every WP container's SMTPDomain decisionPort 25 is blocked by OCI, never debug "email not sending" at the server level; it is always the API route. SPF/DKIM records set per client domain.Password-reset email from a demo site lands in an inbox, passes SPF/DKIM
07Hermes Agent on tq-agents (Docker, free models) + Telegram alert route; watchdog + billing alerts flow through itWP-01Hermes gets its own scoped credentials via the gateway pattern, never the tenancy-admin key. Oracle email alerts stay live as the Hermes-independent fallback.A forced test alert arrives in Nick's Telegram via Hermes AND as fallback email
08Second brain (CouchDB + Obsidian LiveSync, and/or Outline, open decision) + Planka Kanban + Buzz pilot, all behind AccessWP-01, WP-02Buzz is internal-only until 1.0, never offered to a client while piloted. Every service behind Cloudflare Access; nothing gets its own password store.Nick's phone syncs a note; team member logs into Planka via Access SSO
09Ops dashboard (Homepage/Homarr): tiles for every service, health widgets, the landing page after tunnel loginWP-02Read-only widgets only; the ops dashboard never holds write credentials.One login → one page → every service reachable in one click
10Portal v1 on Payload CMS (decided 27 Aug): Cloudflare Access auth, role table (super-admin / client-admin / member roles / agent identities) as Payload collections with field-level access control, WordPress + Stripe tilesWP-03Dual-Control from the first line: every action is an API endpoint; UI buttons and agents call the same endpoint; identical audit rows. Roles for humans and agents live in ONE table. Build on proven open source, never from scratch, Payload provides admin, auth, and access machinery; we build only what is Enigma-specific.Nick sees two demo tenants; a demo client-admin sees only theirs; audit log shows both paths
11Connect wizard + credential plane: OAuth flows (Google, later Meta/TikTok), paste-once fields (Mailchimp, Calendly), all tokens in OCI Vault behind the gatewayWP-10Tokens are write-only from the UI, never displayed again, never in the frontend or browser storage. Start Meta/TikTok app review now, weeks of lead time. Scope every token read-only unless a recipe requires write.Demo client connects GA4 by OAuth; token visible nowhere; tile renders live data
12Link engine: self-hosted shortener per client subdomain, registry (destination, campaign, channel, creator, placements), weekly sweeper agentWP-10Links are created ONLY through the registry API, a link without a registry row is a build bug. Deleting a campaign archives links and lists placements to clean; sweeper flags 404s, never auto-deletes.Create → place → archive cycle leaves zero orphans; sweeper catches a planted dead link
13Launch Command: launch declaration, UTM link generation via WP-12, live funnel (GA4 realtime + Stripe/Shopify events), annotations, anomaly alerts, auto-retrospective reportWP-11, WP-12Every campaign link comes from the link engine (attribution is only clean if this is absolute). Retro report generation is part of v1, not a follow-up. Action buttons gate through the role table.A simulated launch produces a live funnel and, at close, an archived retro report
14Hormozi metrics layer: LTV/CAC verdict tiles, client-financed-acquisition KPI in Launch Command, Core Four lead tagging, speed-to-lead alertWP-11; FireCrawl + NotebookLM research pass FIRST (playbook doctrine)Formulas ship from the research pass, from primary sources, not from memory or blog summaries. Benchmarks (3:1 / 6:1) render as verdicts with the eye-icon explainer.Demo client tile shows ratio + verdict; a test form submission fires the 60-second alert
15Client site bots: Vectorize + AutoRAG + Workers AI in each client's own Cloudflare account, auto-syncing from their WordPress content; chat widgetWP-03, client CF account createdThe index lives in the CLIENT's account (portability doctrine). Bot answers only from the client's index, no open-ended model chat on a client site. Free-tier usage monitored per client; overage becomes a client line item, flagged before it bills.Widget answers a question about a demo product; index re-syncs on WP publish
16Contacts → second brain: CRM cards auto-created/enriched from Stripe/Shopify customers, Calendly bookings, form submissions; agent-queryableWP-11, WP-15Cards live in the client's lane. Enrichment appends with source + timestamp, never silently overwrites. PII stays out of any cross-client learning.A test Stripe purchase creates a card; a booking enriches it; the agent answers "who is X?"
17Update Steward: feed watchers (Ubuntu/WP/WPScan/Docker/Cloudflare), blast-radius from the IaC graph, staging rehearsal, proposal cards, policy panelWP-05 (graph), WP-07 (channel), WP-10 (policy panel)NEVER executes to production without an approval or a pre-agreed standing rule (rules live in the policy panel as switches, per severity per client). Staging rehearsal is mandatory before any proposal. One product at a time, watchdog-verified, auto-revert on failed health check.A staged plugin update produces a proposal card; approval applies it; a planted failing update auto-reverts
18Theme Manager plugin: git-backed design versions (v1 Original, v2 Ethereal, …), preview, pointer-flip activation, rollbackWP-03Themes ARE code: versions live in git, the plugin is a switcher UI over git, it never stores designs itself. Activation must be atomic (no half-applied theme).Two themes swap back and forth on a demo site with zero manual file edits
19Sales automation recipes: abandoned checkout, welcome, dunning, upsell, win-back, Stripe + Shopify + WooCommerce triggersWP-11, WP-16Dual-Control per recipe (toggle + manual run + agent, same API). Sends go through the client's connected email provider only. Every recipe has a dry-run mode that reports what it WOULD send.Dry-run of abandoned-checkout on demo data lists correct targets; live run sends via Brevo/Resend
20ELI5 glossary layer: hover explainers on every metric, term, and setting, with "connects to" lines; glossary as maintained contentWP-10, grows continuouslyEvery NEW tile or metric ships with its glossary entry, a tile without one fails review. Agent-drafted, human-reviewed before publish.Spot-check: 10 random dashboard terms all have a hover explanation a non-technical reader passes a comprehension check on
21Agency billing: Enigma's Stripe connected in super-admin; retainer subscriptions per client; invoices + payment status in both dashboards; dunning on Enigma's receivablesWP-10Enigma's Stripe keys live in Vault like any client credential. Lapsed retainer degrades gracefully with visible warning, never a hard cutoff during an active launch. Client card data never touches our servers (Stripe-hosted checkout/portal only).A demo client subscribes to a retainer, sees their invoice; super-admin sees receivable status; a failed test payment triggers dunning
22Onboarding wizard: first-login guided walkthrough, connect accounts, meet the dashboard, meet the agent, add team, skippable, resumable, eye-icon explainers throughoutWP-11, WP-20, WP-21One login link is the entire client-side onboarding; any step requiring action outside the dashboard is treated as a bug. Wizard completion state tracked per tenant so support can see exactly where a client stalled.A fresh demo tenant goes from login link to connected GA4 + Stripe + retainer without leaving the dashboard or asking a question
23Fleet board: super-admin home listing every client, health, retainer, alerts, launches, resource weight, steward proposals, sorted by needs-attention; new tenants pinned until onboarding + first health check passWP-10, WP-21Reads only from existing APIs (tiles, watchdogs, billing), the fleet board owns no data of its own. Must stay fast at 20+ tenants (paginate, don't fan out live calls per row).With three demo tenants in different states, the board orders them correctly and every row links into that tenant in one click
24Capacity Sentinel: trend collection (VM + per-container RAM/CPU/disk/traffic, bot usage vs free caps), forecast engine, heads-up cards with costed options; thresholds in the policy panelWP-04 (metrics source), WP-07 (channel), WP-10 (policy panel)Forecasts, never guesses: every card cites the trend data and horizon. Never auto-scales, options are proposed with costs, Nick decides (Dual-Control). Free-tier cap warnings fire BEFORE overage bills, not after.A memory-growth simulation on a demo container produces a heads-up card with ≥2 costed options before the container hits its cap
25Agent Registry: dashboard page rendering every agent's spec (identity, connections, rules, schedule, runs, audit) from live gateway config; super-admin full edit; client simplified surface + capped "under the hood" modeWP-10, gateway from WP-11The registry renders and edits the SAME config the gateway enforces, a divergence between page and enforcement is a critical bug. Client edits are capped by Enigma-set bounds; every edit is itself an audited action. New agents don't run until registered.Editing a demo agent's allowlist on the page changes what the gateway permits on its next run; an unregistered agent is refused
26The provisioner: "New client" button → short form → automated tenant spin-up (container, tunnel route, portal tenant + roles, link subdomain, bot index, Stripe retainer, onboarding email); tenant defined as a git-versioned IaC file; de-provisioning = the same pipeline reversed + ownership handoff checklistWP-03, WP-10, WP-12, WP-21, WP-22The form writes IaC and applies it, the provisioner never creates anything the tenant file doesn't declare. The Cloudflare-account manual seam is a tracked checklist item per tenant, never silently skipped. De-provisioning archives, exports, and hands off; it never hard-deletes client data.Button → form → a working demo tenant with login link in under 5 minutes; reversing it produces a complete handoff bundle and a clean estate

The invariant contract: every guardrail below compiles into a living INVARIANTS.md in the IaC repo, named invariants with enforcement mappings, each mapped to its enforcing mechanism: no agent side-doors (gateway is the only credential holder), links exist only via the registry, client-owned data lives in client-portable accounts, £0 spend (budget + billing watcher), nothing ships without its acceptance check. Changes are reviewed against the contract (IBR invariant review); every checker is self-tested against the incident that motivated it; violations surface as healing-loop proposals under Owner acceptance. The contract is Owner-locked in the portal. This is a standalone build inside the Enigma estate: the contract lives in the Enigma IaC repo, its checkers run on the Watchtower, its proposals surface in the Enigma portal, the discipline is inherited from proven prior systems, the machinery shares nothing with them and depends on nothing outside this estate.

Standing rules that apply to every package: build on proven, supported open source rather than from scratch, custom code is reserved for what is Enigma-specific, and a component with an active community beats a component we must maintain alone; nothing ships without its acceptance check passing; every capability lands as API-first (buttons and agents are both callers); every credential lives in Vault behind the gateway; every change to infrastructure goes through the IaC repo; anything client-owned lands in a client-portable account.

Decisions I need from you

  1. Lane, DECIDED (27 Aug): Lane B. Upgrade this account to Pay As You Go with a £1 budget, spend alerts, a 48-hour billing watch on the second VM, and a weekly free-tier audit. Alerts route via Hermes → Telegram (primary) with Oracle email as the independent fallback.
  2. Hermes, IDENTIFIED: Nous Research's Hermes Agent (MIT, self-hostable via Docker). Runs on tq-agents on free models for basic automation; inference credits are the one metered cost to watch.
  3. Which domain and Cloudflare account front the platform? (theenigmafield's Cloudflare already exists, use it, or a fresh one for hosting?)
  4. Second brain flavor: Obsidian-first (LiveSync, personal, matches your current workflow) or team-wiki-first (Outline)? Both is fine too, they're just two containers.
  5. Go order (revised 28 Aug, portal-first per Nick): WP-02 tunnels + close ports → WP-03 Coolify on the watchtower → WP-10 Portal v1: the super-admin login is the next visible deliverable → WP-05 IaC + backups → WP-07 Hermes + Telegram → WP-04 watchdogs → product tiles in spec order. Client hosting begins on Davide's island, not the watchtower.

Prepared by Claude for Nick · The Enigma Field · Prices checked August 2026 · Live estate: the Watchtower behind the-enigma-field.cloudflareaccess.com, blueprint served at blueprint.theenigmafield.com