05 — OUTPUT SKILL: Case Study Kit
Scope
Produces: Three files per Mode 1 run — V1 named HTML (approval-required), V2 anonymized HTML (publishable on day one), and a markdown delivery doc that contains both versions inline plus an email to the practice owner. Audience for the output: The practice owner whose website will host the case studies. Their prospects are the ultimate readers. Filenames:
[client-first-last]-case-studies-v1-approval-required.html
[client-first-last]-case-studies-v2-anonymized.html
[client-first-last]-case-study-delivery.md
where [client-first-last] is the practice owner. Lifecycle: One-shot per extraction. New cases trigger new runs, not edits to existing files.
Required Inputs (restated for standalone use)
Before producing anything, confirm all of the following are set. If any are missing, halt and request — do not improvise.
| # | Input | Source |
|---|---|---|
| 1 | Practice owner identification (name + business name) | Client card or extraction |
| 2 | Profession type — cpa / ea / cfp / ria / insurance / attorney / general | Extraction or asked of Kathryn |
| 3 | Extraction output (filled case-study-extraction-template.html) OR raw transcript | Upstream — practice owner provides |
| 4 | Brand colors (primary, secondary, accent) | Practice owner's design system / website. AOS defaults if explicitly chosen as fallback. |
| 5 | Brand fonts (heading, body) | Practice owner's design system. AOS defaults if explicitly chosen as fallback. |
| 6 | CTA destination URL | Extraction or asked of Kathryn — never invented |
| 7 | Number of stories | Set by extraction — kit does not invent additional or collapse existing |
| 8 | Convertri hosting flag — true / false | Asked of Kathryn if not specified — never assumed |
| 9 | Team member name (optional) | Extraction — only if practice owner wants a team member FAQ card |
Content Rules (numbered, enforceable)
- Case studies are third-person narrative. Tell the featured client's story in the practice owner's voice. Never put words in the featured client's mouth.
- Zero fabricated quotes. No invented quotes. No paraphrased "feelings as quotes." If the extraction has a real verbatim quote worth using, place it in the delivery email's introduction — not inside a case study card.
- Every dollar figure, percentage, and timeline is sourced to the extraction. Verbatim. If a number isn't in the extraction, it doesn't appear in the output.
- Forward-looking figures use "projected" or "estimated." Never "will save," "guaranteed," "you'll see."
- Active voice always. "We restructured the business," not "the business was restructured."
- Specific verbs, not vague ones. Replace "streamlined" with the actual action. Replace "optimized" with the actual change. Replace "transformed" with what specifically changed.
- Zero forbidden words. See
02-case-study-terminology.mdForbidden Terms — leverage, synergy, unlock, empower, journey, coaching, mindset, crush it, game-changer. - Zero hedging language. Strip "might," "could," "would likely," "may." State what happened.
- V1 is named, V2 is anonymized. They are not the same document with different cosmetic edits — V2 is rebuilt against the Anonymization Table, every transformable element transformed.
- The anonymization test is the gate, not a guideline. Could the featured client identify themselves in V2? If yes, anonymize further before delivering.
- V1 must include the HTML approval-required comment block at the top of
with the full checklist (replace[CLIENT NAME], get written permission, confirm numbers, have client review). - Disclaimer matches profession exactly. Per
02-case-study-terminology.mdDisclaimer Templates. V1 omits the "anonymized" phrase; V2 includes it. - Brand source is the practice owner's design system, not AOS defaults. AOS defaults are fallback only and require an explicit choice — never silently applied.
- When Convertri = true, all Convertri rules apply (no CSS variables, no mailto, no separate scripts, explicit
text-align, gold scrollbar with AOS defaults). When Convertri = false, those constraints relax. - Delivery email does not pitch. Connects to practice owner's language, mentions V1/V2, opens the door to an Advisory OS conversation. No pricing, no standalone build offer.
Conditional Logic
Disclaimer Selection
IF profession_type IN [cpa, ea]:
USE cpa_disclaimer
ELSE IF profession_type IN [cfp, ria]:
USE financial_disclaimer
ELSE IF profession_type = insurance:
USE insurance_disclaimer
ELSE IF profession_type = attorney:
USE attorney_disclaimer
ELSE:
USE general_disclaimer
For V1: same template as V2 but with the "have been anonymized to protect client confidentiality" phrase removed.
Convertri Compliance
IF convertri_hosting = true:
APPLY all Convertri rules (see 02-terminology Convertri Rules):
- Hardcode all hex colors (no var(--))
- No mailto: links — only the configured CTA URL
- No separate <script> blocks — inline JS only
- Explicit text-align on every content element
- Gold scrollbar (only when using AOS defaults)
ELSE:
CSS variables permitted
Mailto permitted (though typically still avoid in favor of CTA URL)
Separate <script> blocks permitted
Brand Source
IF practice_owner_design_system_extracted:
USE practice_owner_brand_colors AND practice_owner_brand_fonts
ELSE IF kathryn_explicitly_chooses_aos_default:
USE aos_default_colors (charcoal/cream/gold) AND aos_default_fonts (Cormorant Garamond + Inter)
ELSE:
HALT — surface the gap, ask for brand source
Team Member FAQ
IF team_member_name IN extraction:
INCLUDE "Can [TEAM MEMBER] be involved?" FAQ card
(Note: FAQ cards are an optional element — only when extraction calls for them)
ELSE:
OMIT
V1 vs V2 Content (per story)
| Element | V1 | V2 |
|---|---|---|
| Title | [CLIENT NAME] — [Story Title] | [Story Title] only |
| Industry | Specific (per extraction) | Archetype (per Anonymization Table) |
| Strategy tags | Specific names (per extraction) | Generic names (per Anonymization Table) |
| Locations | Included | Removed |
| Family/business names | Included | Removed |
| Future plans | Specific | Generic forward-looking |
| Disclaimer | Profession template without anonymization phrase | Profession template with anonymization phrase |
| Approval block | Present (HTML comment at top of ) | Not present |
Production Workflow
Step 1 — Intake Confirmation
Before reading the extraction, confirm with Kathryn:
"Here's what I understood:
- Practice owner: [name + business]
- Profession type: [type] → applying [disclaimer template] disclaimer
- Story count: [N] stories
- Brand source: [practice owner design system / AOS default]
- Convertri hosting: [true / false]
- CTA URL: [url]
- Team member FAQ: [yes / no]
Does this match your intent, or am I missing something?"
Wait for confirmation. Do not proceed on silence.
Step 2 — Pre-Build Gate (Gate 1 from 04-case-study-quality.md)
Run all eight binary checks. If any fails, halt.
Step 3 — Read Extraction Thoroughly
For each story in the extraction, extract:
- Story title (will be paired with
[CLIENT NAME] —for V1) - Industry (specific for V1; transform via Anonymization Table for V2)
- Headline savings number (for the Savings Badge)
- The Situation narrative — emotional starting point, not the practice owner's process
- The actions taken (What We Did)
- Strategy names used (specific for V1; generic for V2)
- Results metrics (2–3 per story)
- What's Next narrative
- Any verbatim quote — only for the delivery email, not for case study cards
Step 4 — Read Reference Files
business-aos/reference/core/voice.md— tone, cadence, forbidden phrasesbusiness-aos/reference/core/audience.md— practice-owner prospect language patterns02-case-study-terminology.md— kit-specific vocabulary, Anonymization Table, Disclaimer Templates, Convertri Rules- The 03a / 03b / 03c golden examples — section structure, component patterns, voice
Step 5 — Generate V1 HTML
Use the Full Template (below). For each story:
- Title with
[CLIENT NAME] —placeholder - Industry tag with the specific industry from the extraction
- Savings Badge with the headline number
- Situation: open with the featured client's emotional starting position
- What We Did: active voice, specific strategy names, Strategy Tags
- Results Grid: 2–3 Result Items with sourced numbers
- What's Next: specific forward-looking plans
Wrap in the HTML approval comment block at the top of . Apply profession disclaimer without the anonymization phrase.
Apply Convertri rules if convertri_hosting = true.
Step 6 — Generate V2 HTML
Same source, transformed via the Anonymization Table:
- Title without the
[CLIENT NAME] —prefix - Industry tag = archetype mapping (real estate agent → high-performing sales professional)
- Savings Badge unchanged (numbers don't anonymize)
- Situation: same beats, identifying details removed
- What We Did: generic strategy tags (S-Corporation Conversion → Entity Restructuring)
- Results Grid: numbers unchanged
- What's Next: generic forward-looking language (no signature plans)
No HTML approval comment block. Apply profession disclaimer with the anonymization phrase.
Apply Convertri rules if convertri_hosting = true.
Run the anonymization test (Gate 3 from 04-case-study-quality.md) on V2 before continuing. If it fails, re-anonymize.
Step 7 — Generate Delivery Markdown
Structure (per 03c-case-study-golden-example-delivery.md):
- Email body to the practice owner — connects to their language, mentions V1/V2, opens the door, no pitch
- "A Note on Case Studies vs. Testimonials" section
- VERSION 2: ANONYMIZED (Ready to Use) — full inline content of V2 in markdown form, plus V2 disclaimer
- VERSION 1: FULL DETAIL (Requires Client Permission) — full inline content of V1 in markdown form, with
[CLIENT NAME]placeholders intact, plus the "Before Publishing Version 1" approval checklist, plus V1 disclaimer (without anonymization phrase)
Step 8 — Run Copy-QC
Run business-aos/reference/brand/copy-qc.md (the 11 AI-pattern checks) on every prose paragraph in V1, V2, and the delivery email body. Fix all P1 and P2 violations.
Step 9 — Run Gate 4 Weighted Scorecard
Score each artifact and the kit as a set against 04-case-study-quality.md Gate 4. Target ≥ 90.
Step 10 — Deliver
Save the three files to the production directory (Kathryn's session output folder, or wherever the run was launched from). Present to Kathryn:
- The three filenames
- Gate 1, 2, 3 status (pass / failed checks)
- Gate 4 score
- Any
[GAP: ...]flags still in the output - New Anonymization Table mappings added during the run that need Mode 2 propagation back to
02-case-study-terminology.md - Any judgment calls made (e.g., new profession archetype, ambiguous extraction value resolved one way or another)
Component Templates
Card Header
<div class="case-study-header">
<div>
<h2 class="case-study-title">{{TITLE}}</h2>
<p class="case-study-industry">{{INDUSTRY}}</p>
</div>
<div class="savings-badge">
<div class="savings-amount">{{HEADLINE_NUMBER}}</div>
<div class="savings-label">{{HEADLINE_LABEL}}</div>
</div>
</div>
Body Section (one of four — Situation / What We Did / Results / What's Next)
<div class="case-section">
<span class="case-section-label">{{SECTION_LABEL}}</span>
<h3>{{SUBHEAD}}</h3>
<p>{{NARRATIVE_PARAGRAPH}}</p>
<!-- Optional: second paragraph with margin-top: 12px -->
<!-- Optional: strategies-list (What We Did only) -->
<!-- Optional: results-grid (Results only) -->
</div>
Strategies List (inside What We Did)
<div class="strategies-list">
<span class="strategy-tag">{{STRATEGY_1}}</span>
<span class="strategy-tag">{{STRATEGY_2}}</span>
<span class="strategy-tag">{{STRATEGY_3}}</span>
<!-- 1-N tags -->
</div>
Results Grid (inside Results)
<div class="results-grid">
<div class="result-item">
<div class="result-number">{{NUMBER_1}}</div>
<div class="result-description">{{DESCRIPTION_1}}</div>
</div>
<div class="result-item">
<div class="result-number">{{NUMBER_2}}</div>
<div class="result-description">{{DESCRIPTION_2}}</div>
</div>
<!-- 2-3 items -->
</div>
Approval Block (V1 only, top of )
<!-- ═══════════════════════════════════════════════════════════════════════════
VERSION 1: CLIENT APPROVAL REQUIRED
This version contains detailed client information. Before publishing:
☐ Replace [CLIENT NAME] placeholders with actual names (if approved)
☐ Get written permission from each client to use their story
☐ Confirm all numbers are accurate
☐ Have client review final copy before publishing
If client declines to be named, use Version 2 (Fully Anonymized) instead.
═══════════════════════════════════════════════════════════════════════════ -->
Full Template (HTML — both V1 and V2 share this skeleton)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Client Success Stories | {{PRACTICE_OWNER_BUSINESS}}</title>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family={{HEADING_FONT}}&family={{BODY_FONT}}&display=swap" rel="stylesheet">
<style>
/* ── COLORS (apply Convertri rule: hardcoded hex when convertri = true; CSS vars OK otherwise) */
{{COLOR_DEFINITIONS}}
/* ── RESETS */
* { margin: 0; padding: 0; box-sizing: border-box; }
html { scroll-behavior: smooth; }
body {
font-family: '{{BODY_FONT}}', sans-serif;
background: {{BG_COLOR}};
color: {{TEXT_COLOR}};
line-height: 1.7;
font-size: 16px;
}
/* ── HEADER, INTRO, CASE STUDIES, RESULTS GRID, STRATEGIES, CTA, DISCLAIMER, RESPONSIVE
— see 03a / 03b for full canonical CSS */
</style>
</head>
<body>
{{V1_APPROVAL_BLOCK_OR_BLANK}}
<header class="header">
<span class="header-label">Client Success Stories</span>
<h1>Real Results. Real Savings.</h1>
<p class="header-subtitle">{{HEADER_SUBTITLE}}</p>
</header>
<section class="intro">
<p>{{INTRO_PARAGRAPH}}</p>
</section>
<section class="case-studies">
{{CASE_STUDY_CARDS}} <!-- Repeat one <article class="case-study"> per story -->
</section>
<section class="cta-section">
<h2>{{CTA_QUESTION}}</h2>
<p>{{CTA_INVITATION}}</p>
<a href="{{CTA_URL}}" class="cta-button">{{CTA_BUTTON_TEXT}}</a>
</section>
<footer class="disclaimer">
<p><strong>Disclaimer:</strong> {{DISCLAIMER_TEXT}}</p>
</footer>
</body>
</html>
For the canonical CSS, refer to 03a-case-study-golden-example-v1-named.html or 03b-case-study-golden-example-v2-anonymized.html — they contain the full Foncannon styling that this template skeleton omits for brevity.
Delivery Checklist
Before presenting the three files to Kathryn:
- [ ] Step 1 intake confirmation completed (Kathryn confirmed before production began)
- [ ] Gate 1 binary pre-build gate passed (all 8 checks)
- [ ] Gate 2 Convertri compliance passed (when applicable) — zero
var(--if Convertri = true; zero mailto; zero separate scripts; explicit text-align; gold scrollbar (when AOS-default brand) - [ ] Gate 3 V2 anonymization test passed (subjective gate applied with care; if uncertain, anonymized further)
- [ ] Gate 4 weighted scorecard ≥ 90
- [ ] Copy-QC P1 and P2 violations resolved
- [ ] Three files saved with correct filenames
- [ ] Numbers in V1 and V2 reconcile across header / Results Grid / narrative
- [ ] V1 has the HTML approval-required comment block at top of
- [ ] V2 has zero
[CLIENT NAME]placeholders, zero proper-noun leaks - [ ] V1 disclaimer omits the "anonymized" phrase; V2 disclaimer includes it
- [ ] Brand colors and fonts match the practice owner's design system (or AOS-default if explicitly chosen)
- [ ] CTA URL set on both V1 and V2 + in the delivery email
- [ ] Delivery email connects to practice owner's language, mentions V1/V2, opens the door — no pitch, no pricing, no separate build offer
- [ ] Any new Anonymization Table mappings used in this run are flagged for Mode 2 propagation back to
02-case-study-terminology.md
Testing Discipline — Don't Interrupt the Run
On the first run of this kit (or after any Mode 2 update), run the full production without mid-process correction. Compare the three outputs to the 03a / 03b / 03c goldens. Document every gap between what the kit produced and what the goldens show. Fix the kit files (this file, plus 02 / 04 as needed) so the gap closes on the next run. Do not fix the output by hand — that teaches the kit nothing.
Change Log
2026-04-27: Initial build via kit-builder Mode 1. Workflow derived from case-study-agent.md (Proof Engine project) plus the V1/V2 Foncannon goldens. Production order (V1 → V2 → delivery MD) follows the Proof Engine spec. Gate ordering (binary pre-build → binary Convertri → binary anonymization test → weighted scorecard) is new — chosen to enforce non-negotiable compliance before the weighted score is permitted to override anything.