01-projects/printables-product/reviews

unit economics cost basis

·review-and-plan
printablesunit-economicscost-basisgrowth

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)

Filed to ~/.claude/state/studio/escalations.md.

Addendum 2026-09-18 — manual cost line, outside the D1 ledger