carlos / platform Public

docs: Carloku business-model design — the ladder, the pool, fleet pricing

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Paul Campbell fb3a4b20b5f660b05a19888430cd6f71bbdd3f4e parent f906a30
1 file changed, +163 −0
  • docs/superpowers/specs/2026-08-13-carloku-business-model-design.md +163 −0
diff --git a/docs/superpowers/specs/2026-08-13-carloku-business-model-design.md b/docs/superpowers/specs/2026-08-13-carloku-business-model-design.md
new file mode 100644
index 000000000..28c138280
--- /dev/null
+++ b/docs/superpowers/specs/2026-08-13-carloku-business-model-design.md
@@ -0,0 +1,163 @@
+# Carloku business model — the ladder, the pool, and fleet pricing
+
+**Date:** 2026-08-13 (approved in conversation 2026-08-13/14, Paul)
+**Status:** Approved direction — a starting point, tweakable by construction:
+every number here lives in scenario JSON or in this doc, not in code.
+**Grounding:** the live unit-economics instrument
+(`2026-08-11-unit-economics-design.md`): real meters, real pulled AWS
+bills, per-account cost attribution on both consoles since 2026-08-12.
+
+## What this is
+
+The commercial model for Carloku (the flagship CARLOS deployment):
+who pays, what they pay on, what free means, and what operating a
+customer fleet charges. It is a modelling-instrument output — prices are
+decision-grade anchors to be tuned against real usage in the economics
+dashboard, not published commitments.
+
+## The one rule
+
+**You pay per app or per box, never both.**
+
+- **App-months** bill only on shared multi-tenant capacity (our boxes,
+ many tenants).
+- **Box-months** bill for metal we operate whole for you: your own boxes
+ (fleet) or our boxes rented dedicated. A box that bills runs unlimited
+ apps free.
+- **Egress and storage** are their own metered axes everywhere and never
+ fold into either price above. Fleet direct-served traffic never bills —
+ it never touches our infrastructure, and the meter boundary is the cost
+ boundary.
+
+## The ladder
+
+| Rung | Who | Pays | Anchor price |
+| --- | --- | --- | --- |
+| **Try** | everyone, forever | $0 (our permanent marketing cost) | 1 tiny hosted app; hard caps (1 GB egress/mo, 250 MB storage); sleeps aggressively |
+| **Free pool** | hobbyists | $0 (pool-funded — see below) | generous limits (10 GB egress, 1 GB storage shape) while the pool covers it |
+| **Hosted** | indies, agencies | per app | **$5/app-month**; egress $0.15/GB past allowance; storage $0.05/GB-month past allowance |
+| **Fleet** | self-hosting companies (Eleven shape), edge/IoT (Pi shape), agencies on own metal | per box, tiered by device class | **$5/box-month server class**, **$1/box-month device class**; 10+ boxes → 40% off; relay egress $0.15/GB past 20 GB/box/mo; direct-served traffic free (unmetered by construction); **apps free** |
+| **Dedicated** | big orgs wanting the efficiency without self-hosting | per dedicated box we run | **cost × multiple** all-in; at the standard 5× a t4g.small is ≈ $95/box-mo and a t4g.medium ≈ $170 (2026-08 all-in costs ≈ $19/$34) — the dedicated multiple is expected to settle LOWER than 5× (managed capacity competes with raw EC2 at ~$13); it is a first-class knob. **Apps free**; metered egress/storage on top; idle included — they rent the whole box, so no idle-smearing question exists |
+
+Graduation is monotonic (Try → pool → Hosted → Fleet → Dedicated) and the
+vocabulary never changes. Named plans (Heroku-style bundles) are a
+POSSIBLE FUTURE presentation layer over this model, not part of it.
+
+## The pool (the free tier is a budget, not a promise)
+
+Mechanism (Paul's Eleven-conversations design, made concrete):
+
+- `pool = 10% × recognised monthly revenue + bootstrap top-up`.
+- The bootstrap top-up is set by hand monthly during the kickstart phase;
+ starting anchor **$200/month** (~2× the entire flagship fleet's current
+ all-in cost, so genuinely generous).
+- Free-pool accounts draw from the pool at **cost** — the economics
+ dashboard's per-account cost-to-us figure (allocated box share + direct
+ meters) IS the draw. The pool report is arithmetic over numbers the
+ dashboard already computes.
+- As the month's draw approaches the pool, **generosity degrades, never
+ availability**: pool-tier limits step down toward Try caps for new
+ consumption. Nothing is killed for budget reasons; apps sleep harder and
+ cap harder.
+- Try sits outside the pool: unconditional, permanent, small.
+
+Properties this buys: the free tier is self-limiting by construction
+(no "free tier is eating us" cliff); "how generous can we afford to be"
+is a dashboard line, not a debate; paying customers visibly fund the
+commons, which is a story we can tell.
+
+## Fleet axis — rulings
+
+- **Box-months from presence**: a fleet box's metrics reporting into the
+ deployment bucket is its billable presence; box-months prorate by
+ metered hours (attach mid-month = half a month; honest by default).
+- **Device class is a tag**: `class=server` (default when untagged) or
+ `class=device`, set via `carlos fleets tag-box` by the customer.
+ Trust-first: a mis-tagged box is visible in its own metrics; auditing
+ is a later policy question, not launch machinery.
+- **Relay is the billing boundary for traffic**: tunnel-relayed traffic
+ flows through our edge and is already metered (`usage/edge/*`) —
+ billable past the allowance. Direct-served traffic is invisible to us,
+ costs us nothing, bills nothing. No code enforces this; the
+ architecture does.
+- **Volume break**: 10+ boxes in an account → 40% off box prices. One
+ break only at launch; more tiers when real fleets exist.
+
+## Dedicated axis — rulings
+
+- Dedicated = one of our boxes, in our AWS account, allocated whole to
+ one account. Priced at that box's **all-in cost × a dedicated
+ multiple**, where all-in cost is the rate card's number for that box
+ (EC2 + EBS + its overhead share). The standard 5× is the starting
+ anchor, but dedicated is the rung where the multiple most plausibly
+ settles lower — managed whole-box capacity competes visibly with raw
+ EC2 — so the multiple is a first-class scenario knob, not a constant.
+- Apps free (the one rule). Egress/storage metered on top — a dedicated
+ box's traffic leaves through our pipes, unlike fleet direct-serve.
+- Idle included: renting the whole box IS buying its idle. The
+ per-box utilization view stays useful to the customer, not to a
+ pricing argument.
+- **Dedicated is per-region** (Paul, 2026-08-14): a box lives in one
+ region, so multi-region presence = one dedicated box per region, each
+ at its region's cost × the dedicated multiple (regional rate-card
+ prices differ and the price follows them). There is no bundled "multi-region dedicated" SKU —
+ the region count IS the box count, which keeps the price sheet honest
+ and makes HA/residency a natural multiplier instead of a negotiation.
+
+## Unit maths (2026-08 real data)
+
+- Whole flagship fleet (4 × t4g.small in IE/US/UK/AU + overheads):
+ ≈ **$91/month all-in** at steady state (live rate card
+ `actual-prices`, AWS Pricing API rates, EIP/Route53/S3-churn/DNS
+ overheads included).
+- A hosted app's marginal cost at current utilization ≈ **$0.60/month**
+ → $5/app-month ≈ 88% margin, comfortably above the 80% target.
+- A fleet box costs us ≈ **$0.20–0.50/month** (control-plane bucket
+ churn) plus relay egress at $0.09/GB when tunnelled → $5/box-month is
+ ~90%+ margin; $1/box-month device class still >50% margin if the
+ device is quiet, and the 20 GB relay allowance bounds the loss if not.
+- Dedicated all-in costs (real rate card): t4g.small ≈ **$19/mo**
+ (730 h × $0.0184 = $13.43 EC2 + $1.78 EBS + $3.65 IPv4 + overhead
+ share) → ≈ **$95/box-month at 5×**; t4g.medium ≈ **$34/mo** → ≈
+ **$170/box-month at 5×**. (An earlier conversational draft said $23/$45
+ — that was an arithmetic error, cost × ~1.2, recorded here so the
+ wrong anchors don't survive in anyone's head.)
+- August whole-account bills for reality-checking: flagship $24 MTD,
+ titogo $3,397 MTD (dominated by non-CARLOS legacy; the reconcile
+ knob's whole point).
+
+## What exists today vs what this needs
+
+**Expressible now (scenarios, no code):** hosted app pricing, egress and
+storage prices/allowances, margin multiples, the free-tier allowance
+shapes — saved as scenarios `ladder-launch` (bootstrap-generous pool
+assumptions) and `ladder-lean` (10%-of-revenue pool only) on the flagship
+console.
+
+**Needs a small build (follow-up spec, rides existing machinery):**
+
+1. `fleet_box_hours` meter (+ device-class split) derived in the
+ statements pass from fleet-labelled metrics presence, attributed to
+ the owning account.
+2. `box_month_usd` (server/device pair) in the rate sheet; fleet volume
+ break as a knob.
+3. Pool ledger line on `/fleet/economics`:
+ `pool = 10% × revenue + top-up · draw = Σ free-pool accounts' cost ·
+ headroom`, with the top-up and percentage as scenario knobs.
+4. An account-tier marker (try/pool/hosted/fleet/dedicated) so the
+ dashboard can group accounts by rung — a console-store column or
+ bucket manifest, decided in that spec.
+
+**Explicitly out of scope here:** payments and invoicing (the
+unit-economics spec's phase-2 stance holds: statements × promoted
+scenario = future invoices); cap ENFORCEMENT for Try/pool (provisioning
+work, own spec); the carloku.com pricing page (follows this doc).
+
+## Follow-ups recorded
+
+- Fleet metering + pool ledger spec (items 1–4 above).
+- Enforcement spec for Try/pool caps (sleep/cap policy hooks).
+- Pricing-page copy for carloku.com once numbers survive a month of
+ dashboard contact.
+- Revisit the volume break and device-class prices when the first real
+ external fleet attaches.