SelfScale · Internal
Brief for Bill · May 2026
Why we're rebuilding the cold-start, sunsetting the wizard, and adding a CTA layer, without rewriting anything you've built.
Three movements
Cold-start lowered
1 sample, not 5. Default voice fills the gap.
Wizard sunset
Mandatory 5-step gate becomes opt-in coaching.
Intent / CTA layer
New explicit slot: posts know what they're FOR.
These ship as peers, not in sequence. They're coupled by one re-frame: voice fidelity is the mechanism, not the outcome.
Cold-start
1
minimum sample required
5 chunks minimum before any generation. creator-bible-auto.ts · CHUNK_THRESHOLD = 5. 10–15 min total time-to-first-generation.
1 sample → usable draft via default-voice splice + cold-start bible. Ladder rebuilds at 1 / 5 / 20 / 50 chunks. Quality lifts as the ladder climbs.
Activation impact
Funnel: trial start → first sample → first draft → first ship. ChatGPT is ~5 sec to first useful output. We sit at 6–12 min on the wizard alone, 100–180× slower than category baseline on time-to-wow.
trial → first ship within 72h
trial → first ship within 72h
Wizard sunset
What it did
step-sources.tsx:179)What replaces it
0.62 soft / 0.42 hardThe net-new dimension
Every post is hired to do a job: funnel to product, build authority, ask a question, take a sponsor pitch. The engine never knew which, so it averaged. Six explicit types, one user-authored chip per generation.
Funnel
Skool, course, list, podcast
Sponsor
Brand deals, disclosure required
Engagement
Question, hot take, attention is the asset
Build-in-public
Ship log, community-building
Authority
Pure expertise display, no ask
Reactive
News/trend, perishable
Runtime capture
Inventory setup
/voice → CTAs. 3–10 cards. 5 min, opt-in. Editable any time. Engine never edits this.
Per-generation chip
intent: [▼ none] under the composer. One click before Generate. Default is always 'none': anti-marketer guardrail.
Inferred intent
After ~50 generations, engine pre-fills the chip from brief topic. Sara accepts or overrides. v2.
The most important slide
Rule: CTAs ship verbatim from inventory unless the user types one in the box.
The engine never improvises "Curious to learn more?" phrasing. That's the difference between voice-fidelity-positive and voice-fidelity-negative.
Channel awareness
Small rule engine (~100 LOC). Sits between CTA inventory and prompt assembler.scoreVoiceMatch atblueprint-service.ts:1427 keeps scoring honest across platforms.
The default mix
The engine biases toward Authority and Engagement. Funnel CTAs ship sparingly, not on every post, because conversion ≠ voice. If Sara picks Funnel twice in a row, the composer surfaces a soft nudge with one-click switch. The engine doesn't refuse; it just doesn't make over-CTA the path of least resistance.
What 'good' means
We never anchored a phase-success metric to a proxy score alone. The binding signal is the founder's IS_me rating on real generations.
content_items.is_me_founder_rating: boolean + Likert (1–5) + reason. Cohort rating ≥ 75% is the activation threshold.
scoreVoiceMatch (per-gen proxy) · VAG 0.62/0.42 (publish gate) · EQI (daily aggregate).
New paired metric: IS_me × CTA conversion for posts with a CTA attached.
Untouched
This is additive, not a rewrite. Everything below is preserved exactly as you built it.
Up for re-litigation
Wizard 5-step gate
Deprecated to opt-in. Surfaced inside /voice after gen #1.
CHUNK_THRESHOLD = 5
Hard floor lowered to 1, becomes a ladder (1 / 5 / 20 / 50).
Implicit-only CTA inference
Now explicit. User-authored cta_inventory + per-gen chip.
Single-CTA-per-user assumption
Now inventory: 3–10 cards, frequency-capped, type-tagged.
Voice fidelity as the product
Voice fidelity is the mechanism. Conversion is the outcome.
Need your input
Ranked by impact. These are the questions I can't answer alone. Each has a default, but I want pushback on any of them before we draft the GSD phases.
Where does CTA inventory schema live? Separate table vs JSONB on voice_profiles.
Pre-blueprint generation: ship at 1 sample, or block until 3?
Wizard sunset: hard cut or feature-flag rollout?
CTA picker placement: composer chip, sidebar inventory, or both?
Voice scorer recalibration: bake new IS_me signal into scoreVoiceMatch now or after R3-B?
Per-channel CTA rules: hardcoded adapter or per-channel config table?
Founder override: allow inline CTA override even when inventory is empty?
Rollout
Phase A
Cold-start fix + wizard kill switch behind FF.
Phase B
CTA inventory + inline picker chip.
Phase C
Per-channel adapter + 60/30/10 mix logic.
Phase D
Founder-rated IS_me wired into the gate.
Phase A is single-PR scope: lowest-risk, highest-impact, unblocks everything else. Phase D closes the loop with the binding outcome gate.
Scope discipline
The honest summary
“We had a great voice engine that nobody could feel inside 5 samples. We're not making the engine smarter. We're making it faster to feel and clearer about what it's writing for.”
- the rethink
Next
Brief lives at ~/Desktop/BILL-BRIEF-voice-engine-rethink.md
Thanks for reading. - David