Sanity Check bet-architecture audit (2026-04-30)
Why this exists
Founder asked Ray to apply the four-layer RDCO bet-architecture playbook (2026-04-30-rdco-bet-architecture-playbook) to Sanity Check, the newsletter live at https://sc.raydata.co (production state v9.7.4 per ~/.claude/state/working-context.md). Squarely was the worked example; SC is the second bet to get the audit. Eat-our-own-dog-food: SC has more tooling surface than any other bet (most skills, freshest production deploy), so it’s the cleanest test of whether the playbook scales beyond the Squarely template.
The targeting systems
- Sub-process targeting system: reader comprehension + trust + paid conversion. “Good” issue = reader finishes it, replies/forwards, and (later) converts to a paid tier. Proxies today: open rate, reply rate, forward rate, subscribe-form completion, time-on-page for the web essay, qualitative read of replies.
- P&L meta-layer: NOT YET A REAL P&L. Currently subsidized by personal time + Cloudflare Pages free tier + Resend free tier. Future shape (per ../01-projects/newsletter/revival-strategy): free tier indefinitely; sponsorships at 1k subs ($200-500/issue → $500-1k); newsletter as conduit to MAC paid engagements (reputation/optionality engine, not direct revenue vehicle). LTV > CAC is the eventual target; today CAC = personal time + zero ad spend, LTV = 0 monetary, non-zero brand. The P&L meta-layer is a deferred constraint that will bite when sponsorship enters scope.
Layer 1: Targeting system
✅ Exists — sub-process layer is well-articulated (revival-strategy.md sections 2-3: who reads it, what they get, voice, recurring formats, cadence). 1,000 True Fans is the explicit unit-of-success per Kelly. ⚠️ P&L layer is deferred-constraint — no economic targeting yet because the bet is pre-monetization by design (revival-strategy section 6: “do not monetize before issue 25 and 500 subscribers”).
Layer 2: Sensors / instrumentation
| Sensor | Status | Notes |
|---|---|---|
| Resend send/delivery metrics | ✅ | Welcome email + (future) issue sends instrumented |
| Subscribe-form conversion (v9.7.4 Turnstile + cookie + dedupe) | ✅ | New + already-subscribed paths both return structured status; rate-limit 429 surfaced |
| Cloudflare Pages analytics (visits, top pages) | ⚠️ partial | Available but not consolidated into a weekly snapshot |
| Reply rate (qualitative read) | ⚠️ manual | Founder reads replies; no structured capture |
| Forward rate | ❌ GAP | No way to attribute forwards; would need referral-link or Resend-tracking |
| Open rate per issue | ❌ GAP | Resend supports open tracking but not yet wired into a per-issue dashboard |
| CTR per issue (which sections drive clicks) | ❌ GAP | Same as above — not yet wired |
| Subscriber cohort engagement (true-fan core vs passive) | ❌ GAP | No segmentation; can’t tell if 1,000 True Fans target is being approached |
| Per-issue diagnostic (“which angle landed”) | ❌ GAP | Most load-bearing missing sensor — the loop closer |
| Cost-routing discipline (SC-attributed costs) | ⚠️ partial | xAI image gen tracked in working-context.md per-version; not aggregated |
The honest read: SC has world-class production instrumentation at the subscribe surface (Turnstile, dedupe, cookie recognition, rate limit, audit-grade) but ad-hoc instrumentation on the actual newsletter loop (open/CTR/reply per issue). Subscribe form is over-instrumented; issue performance is under-instrumented.
Layer 3: Tools / actuators
| Tool | Status | Notes |
|---|---|---|
| Site build/deploy (Astro + Cloudflare Pages) | ✅ | v9.7.4 in production, 45s GH Actions build |
build-landing-page skill | ✅ | Four-layer review loop; closed the design-quality gap |
sanity-check-design skill | ✅ | Brand spec v0.3, palette + bento + sticker discipline |
design-critic skill | ✅ | Autonomous critic; 9 structural rules (bento integrity, palette temp, sticker zones) |
draft-review skill | ✅ | Hook strength, tangible vs abstract, CopyThat patterns |
voice-match skill | ✅ | Compares draft against archive |
/research-brief skill | ✅ | 3 angles + hooks + arc positioning; the Wed-before pipeline step |
/remix skill | ✅ | LinkedIn + X thread + CTAs from published issue |
/process-newsletter skill | ✅ | Inbound newsletter ingestion (sources, not own pub) |
| Image generation (xAI grok-imagine) | ⚠️ workable | $0.02-0.07/gen; quality “so-so but workable”; v8.1 + v9 doodles regenerated successfully |
| Mailing-list management (Resend audience API) | ✅ | GET-first dedupe pattern; idempotent |
| Cookie-based subscribed-state recognition | ✅ | v9.5; FOUC-free swap |
| Bot protection (Turnstile + rate limit) | ✅ | v9.5 |
| Issue-send pipeline (write → send → log) | ❌ GAP | No automated issue-send tool; the actual newsletter sending is still manual |
| Distribution multi-surface posting (LinkedIn + X) | ⚠️ partial | /remix drafts but doesn’t post; manual LinkedIn copy-paste |
| Paid acquisition (X/LinkedIn ads for SC) | ❌ GAP | paid-ads skill exists but no SC campaigns running |
| Archive search/SEO surface | ⚠️ partial | Archive page exists; SEO not audited; Vol I tile grid is curatorial not exhaustive |
| 3 new research-brief tasks queued 2026-04-30 | 🟡 ready | dbt-models-tickered + CTO-IC-inversion + kit-stage-AI-invisible — tool-layer assets ready for development |
| Recovered 5 SC essays via /sc-restore.py + Wayback dig | 🟡 ready | Content assets ready for archive integration (Analytics Arcade + Silly Simple Question still pending Wayback) |
Layer 4: Feedback loop
⚠️ Partial — under-formalized. What exists: founder reads replies qualitatively; design-critic runs structurally per design variant. What’s missing: per-issue post-mortem that asks (a) which hook/angle landed (open + reply signal), (b) which CTA converted (subscribe + click signal), (c) what to feed forward into next research-brief. Today’s loop is heroic-founder-reads-replies, not structured-diagnostic-to-experiment. The instrumentation gaps in Layer 2 (open rate, CTR, cohort engagement) are upstream blockers — you can’t formalize a feedback loop without the sensors that feed it.
The revival-strategy already specifies the loop shape (section 7: weekly metrics snapshot, monthly trend report, audience analysis), but those routines aren’t running yet.
Synthesis: load-bearing gaps
- Per-issue open/CTR/reply-rate dashboard (sensors layer) — the single most binding gap. Without it, the feedback loop stays heroic. Resend’s API supports it; needs a weekly snapshot routine, not new infra.
- Per-issue diagnostic → next-brief feedback loop (loop layer) — directly downstream of #1. Once sensors exist, formalize the “which angle landed → next research-brief input” cycle.
/research-briefis the actuator already; it just needs the diagnostic input. - Issue-send pipeline (write → send → log) (tools layer) — the actual newsletter delivery is still manual. v9.7.4 shipped the subscribe surface; the send surface is unbuilt. This is what makes #1 expensive — every issue is bespoke instead of templated, so per-issue metrics aren’t naturally captured.
- Subscriber cohort engagement segmentation (sensors layer) — the 1,000 True Fans target is unmeasurable without it. Lower priority than #1-3 because pre-launch the cohort is small enough to read by hand.
- Distribution actuator (LinkedIn + X auto-post or scheduled-draft) (tools layer) —
/remixproduces drafts; nobody schedules/posts them. Coupled with the X-voice mismatch feedback already in Ray’s memory — voice quality matters more than automation here, so this is a “formalize the loop” gap not a “build the bot” gap.
The coupled cluster is #1 + #2 + #3: sensor (open/CTR per issue) + actuator (templated send pipeline that auto-captures the sensor data) + loop (diagnostic feeds next brief). Building #3 in a way that emits sensor data for free solves #1 mechanically and unblocks #2. This is the SC analog of Squarely’s “Amazon ads sensor + actuator” coupled pair.
Modular-components mapping
| Gap | Modular component it builds | Other bets it pays off |
|---|---|---|
| Open/CTR per-issue dashboard | Email-engagement instrumentation (Resend webhook → DB → snapshot) | Squarely (transactional emails to puzzle buyers); MAC (drip course); RDCO ops (any list mgmt) |
| Issue-send pipeline | Templated-send tool (write Markdown → Resend send → log delivery + opens) | MAC drip course, Squarely customer-retention emails, future RDCO product launches |
| Distribution actuator | Multi-surface post-and-track (LinkedIn + X scheduled drafts → click attribution) | MAC (LinkedIn primary), Squarely (X for indie-shop discovery), every public-surface bet |
| Cohort segmentation | Audience-engagement segmentation | Every bet with a recurring audience touchpoint |
| Cost-routing discipline | Cost-routing per bet (xAI gens, Resend sends, Pages bandwidth tagged to SC P&L) | Already flagged as cross-bet need in playbook (Squarely audit too) |
The high-leverage observation: gaps #1-3 build email-engagement-instrumentation + templated-send-tool, which are infrastructure for every future RDCO list bet (MAC drip, Squarely retention, any product launch list). The cross-bet payoff is strong. This is a load-bearing modular investment, not a single-bet local fix.
The cost-routing-per-bet component appears for the second time (also flagged in Squarely audit) — pattern confirmed: every bet’s P&L meta-layer needs cost-routing as table stakes. Worth building once at the RDCO ops layer.
Related
- 2026-04-30-rdco-bet-architecture-playbook — the playbook this audit applies
- 2026-04-30-rdco-thesis-targeting-systems-feedback-loops — canonical thesis
- ../01-projects/newsletter/index — SC project home
- ../01-projects/newsletter/revival-strategy — strategy doc; sections 5-7 prefigure the loop shape this audit asks to formalize
~/.claude/state/working-context.md— SC v9.7.4 production state- Notion task
337f7d49-36d1-8124-9e0b-f7795821fdec— SC v3 revival strategy (broader strategic scope) - 3 research-brief tasks queued 2026-04-30 (dbt-models-tickered + CTO-IC-inversion + kit-stage-AI-invisible) — tool-layer content assets ready for development
- 2026-04-28-mrbeast-production-playbook — Critical Component field discipline; SC’s Critical Component should be one of gaps #1-3
~/.claude/skills/build-landing-page/,~/.claude/skills/sanity-check-design/,~/.claude/skills/design-critic/,~/.claude/skills/draft-review/,~/.claude/skills/voice-match/,~/.claude/skills/research-brief/,~/.claude/skills/remix/— tool-layer skill inventory