2026-09-11 review-and-plan: unit economics + cost basis
Scope: fresh-eyes critic pass, no build work. Reviewed ~/.claude/state/studio/queue.md, ~/.claude/state/studio/escalations.md, the charter's §4 cost model (2026-08-31-studio-charter.md), and the live repo (~/Projects/scribble-works, origin/main @ 268ad79).
What was reviewed and found
1. No per-call cost instrumentation exists in production. escalations.md:52 (audit C, 2026-09-08) proposed "add our own per-call cost counter (tokens × price) in the UGC log row" as the default (AI Gateway logs stay OFF to avoid storing parents' text). Grepped the live repo for it: grep -rn "cost_cents|costCents|cost_estimate" src/ workers/ scripts/ — zero hits. migrations-ugc/ has four migrations (0001_customizations.sql, 0002_feedback.sql, 0004_counters_and_retention.sql, 0008_client_errors.sql) — none carry a cost field. The proposal from three days ago was never built. Right now, with AIG logs off by design, there is no cost visibility at all into what generation is actually spending — not even the proxy the 2026-09-08 note said would substitute for it.
2. The one real observed cost figure is small and old. queue.md:130 (PR #22, shopper API, 2026-09-01): "Real usage ≈3.75k input / ~350 output per call (catalog is 5.7 KB) ≈ $0.011/call at Sonnet 5." This is the only measured per-call dollar figure anywhere in studio state. It predates Customize (art/icon generation via Grok Imagine + FLUX), which is a heavier and now-live cost center with zero equivalent measurement.
3. Cloudflare Browser Rendering pricing was researched and is current. escalations.md:176 (2026-09-07, via the CF docs search tool): Workers Paid $5/mo flat includes 10 browser-hours/month, $0.09/hr overage. This is the real rate for Stage-2 server-PDF rendering (queue.md:122).
4. Workers Paid is still not flipped. escalations.md:21 and :183 (2026-09-07): founder said "turn it on," but flipping a CF plan is dashboard-gated (no clean API path) and stayed "later." No evidence in either file of it being flipped since. Consequence: Stage-2 real-PDF Customize download and Browser Rendering both stay blocked, and the $5/mo + $0.09/hr floor from finding #3 is still hypothetical, not incurred.
5. Resend send volume is unmetered. Daily delivery is live in production (origin/main PR #155 "Prevent concurrent daily playset sends with durable claims", merged; the grandparents' household on live daily delivery per escalations.md 2026-09-05 note). No message-count or Resend-usage figure appears anywhere in queue.md or escalations.md — real sends are happening with no logged volume to cost against.
6. Charter's own per-pack model is a derived ceiling, not a measurement, and says so. §4: $0.71/pack at Sonnet 5, sourced from an 8-call assumption and a 40,000-token/pack derivation, explicitly flagged "carried as a ceiling," with model-rate sourcing dated 2026-06-24 (not fetched live). Nothing since has replaced it with a real production number, because finding #1 means nothing can.
Self-gate check (verify-strategic-output rubric)
No new dollar figure or recommendation is asserted here beyond what's cited above — every number is either a direct quote from a dated file:line or a docs-sourced rate already in the vault. No pricing/tier/spend decision is made. Confidence-calibrated language used throughout ("only measured figure," "hypothetical, not incurred"). Self-gated PASS — flagging to channels-agent for a second look only if it disagrees that finding #1 (the counter was never built) is decision-worthy enough to escalate rather than just queue.
Proposed queue.md change (within growth's autonomous drafting; build itself is engineering's)
+## NEW from 2026-09-11 unit-economics review (growth, review-and-plan slot; full note reviews/2026-09-11-unit-economics-cost-basis.md)
+R5. [engineering, S] Per-call cost counter, proposed 2026-09-08 (escalations.md #12) and never built: add tokens×price
+ cost field to the UGC log row (migrations-ugc/) at write time for shopper/customize calls. Zero cost visibility
+ exists right now — AIG logs are off by design and no substitute was ever shipped. Small, additive migration,
+ reversible, no product judgment required — fits engineering's autonomous lane.
Applied directly to ~/.claude/state/studio/queue.md (this falls in growth's autonomous "drafting copy"/queue-note precedent set by the 2026-09-10 growth/SEO review, which added engineering-tagged items the same way).
Decisions needed (escalated, not applied to queue.md — spend/economics, outside growth's autonomous column)
- Whether to flip Workers Paid now (unblocks Stage-2 Browser Rendering PDF + the $5/mo + $0.09/hr overage cost from finding #3) or keep deferring.
- Whether the AI Gateway logs-off / build-our-own-counter tradeoff from
escalations.md:52is still the founder's preferred shape, given it's been unbuilt for three days with real Customize traffic running uncosted. - No Resend usage figure exists to decide anything from yet — flagging the metering gap (finding #5), not proposing a fix, since that's an engineering/spend call.
Filed to ~/.claude/state/studio/escalations.md.
Addendum 2026-09-18 — manual cost line, outside the D1 ledger
- Arrow 2 (QuiverAI) bake-off, PR #311: 9 calls, $2.36 total, billed against the founder's Quiver credits (not the AI Gateway, not
generation_calls). Per-image $0.14-0.40 vs Grok Imagine ~$0.02. Recorded here because Arrow has no gateway route yet; if Arrow becomes a studio engine, route it through the ledger before the second batch. - Jev moderation bench (PR #310) ran direct against TypeSafe (gateway custom-provider 502'd); spend under $2 per the bench report, also outside the ledger.