Skip to content

Course exhibits M2-M5 → O2 flat-vector (17 SVGs) + legibility-floor gate - #434

Merged
pftg merged 18 commits into
masterfrom
course-svg-o2-rollout
Aug 1, 2026
Merged

Course exhibits M2-M5 → O2 flat-vector (17 SVGs) + legibility-floor gate#434
pftg merged 18 commits into
masterfrom
course-svg-o2-rollout

Conversation

@pftg

@pftg pftg commented Aug 1, 2026

Copy link
Copy Markdown
Member

M2–M5 exhibit rollout to O2 flat-vector (17 SVGs) + a floor-check gate

Extends the O2 flat-vector exhibit system (shipped for Module 1 in W3 #433, per Paul's style call) across the Module 2–5 lesson spine. Content-scoped (SVGs + alt rewrites); no shared CSS, no templates — campaign-safe.

Why this is a fix, not a repaint

Sprint-Y (W3) measured that 4 of 5 M1 SVGs failed the ≥9px@390px mobile legibility floor. A re-audit (grooming) confirmed the defect is course-wide: 74 of 80 course SVGs were failing — the whole hand-drawn set. This PR converts the 17 numbered-lesson SVGs in M2–M5, every one of which failed. After: all 17 clear the floor (smallest text 9.21px vs the old 4.5–8px).

What shipped (3 sub-waves, one branch)

  • M2 (5): mom-test-script, rehearsal-loop, find10-journey, outreach-funnel-strip (2.4 funnel data byte-preserved — the numbers back its Success check), prototype-build-strip.
  • M3+M4 (5): vibe-prd-template-visual, admin-panel-spaceship, ownership-audit-flow, stack-boundaries, build-phases-strip. Canon numbers intact.
  • M5 (7): sean-ellis-gauge (40% canon), channel-fit-canvas, network-buckets, network-audit-grid, send-day-rhythm-card, free-vs-paid-pilot (deposit cancel-split accurate), ph-vs-ih.

All to one template (W=720, Space Grotesk / JetBrains Mono, white card on #faf7f2, 4px radius, fill=data/stroke=structure, ruby=the one reading, green=money-only, amber=warning). SVG <title>/<desc> + lesson alt text rewritten per exhibit; no other prose touched.

Bonus quality win: the redraws removed two fabricated-cohort stats baked into the old SVGs (5.3's "60-70% / 3-5 conversations", 5.6's "4 founders we worked with… 2026" caption) — unsupported claims gone, consistent with the voice guide.

20%-slot: bin/check-svg-floor (O7b)

A build-time legibility gate: parses each SVG's viewBox width vs its smallest font-size and flags anything rendering <9px@390. The whole defect shipped because the only visual gate masks <img> — this is the root-cause net. Report-only today (SVG_FLOOR_BLOCK=1 to block); flips to a build gate once the rest converts. Confirms all 17 rollout + 6 M1 SVGs clear; enumerates the 46 reference/walkthrough SVGs still failing — the precise burn-down for the deferred follow-on wave.

Verification & gates

  • Structural sweep (all 17): W=720, 17px min-font (floor holds), zero Caveat leakage, consistent O2 — verified by main. Each rasterized + read at 720 and 390 by its sub-wave; 4-criteria new-media score PASS on all. Zero em-dashes added.
  • bin/hugo-build 8/8 every commit; all SVGs render in _dest; bin/check-svg-floor clean on the 17.
  • Coverage note: course tests mask img, so these <img>-embedded SVGs are NOT captured by the pixel suite — verification is rendered-review + source-consistency + the new floor gate (same masking on Linux → no course baseline moves). Honest bin/dtest from main: 34/34 green, zero failures (first run flaked on a transient env abort; clean re-run fully green). SVGs img-masked → no course baseline moved.

Deferred (own PR, next wave)

The 46 remaining under-floor SVGs — reference/continuation pages + the 5 Mia walkthroughs (incl. the M1-walkthrough straggler) — same defect, enumerated by bin/check-svg-floor. Not smuggled in here.

🤖 Generated with Claude Code

Summary by CodeRabbit

  • Accessibility

    • Improved alternative text across course illustrations, diagrams, and workflows, making visual content clearer for screen-reader users.
    • Updated descriptions to better explain processes, outcomes, scoring, and key instructional details.
  • Documentation

    • Added guidance for monitoring SVG text legibility on mobile-sized screens.
    • Documented the 9px readability threshold and rollout validation status.
  • Quality Improvements

    • Added an automated check to identify course graphics with text that may be difficult to read on mobile devices.

pftg and others added 18 commits August 1, 2026 23:47
…2 flat-vector

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… -> O2 flat-vector

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…-vector

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…VG -> O2 flat-vector

Funnel data byte-preserved: 30 sent, 20-30% reply, ~7 replied, ~50%+ show,
2-3 booked, plus the under-10%/10-20%/20-30% reply-rate guardrail.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…le SVG -> O2 flat-vector

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…lat-vector

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… -> O2 flat-vector

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… -> O2 flat-vector

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…e-2026 SVG -> O2 flat-vector

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… flat-vector

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ctor

Redraw the Sean Ellis gauge as a horizontal O2 signal meter (the
smoke-test-signal archetype): under-40% amber = product problem,
40%+ green = must-have user, ruby 40% threshold line = the one
actionable reading. Same 40% canon; alt text updated to match.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…flat-vector

Redraw channel-fit-canvas as an O2 rubric: four dimension score cards
(price fit / buyer type / time budget / signal, 1-3 each) + a 3-tier
gate (9+/12 green commit, 7-8 amber pilot top two, 6 or less ruby
re-read transcripts). Fill-in worksheet stays in the linked PDF per the
house-spec phone-worksheet ceiling. Same scoring + gate canon; alt updated.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…lat-vector

Redraw network-buckets as four neutral numbered O2 cards (priority 1-4)
with counts + one-line definitions and a send-order strip. Drops the
O1 heat-colour coding (semantic colours reserved under O2) and the
fabricated conversion stat; keeps 5/10/15/20 = 50 canon and the
champions-first order. Alt updated.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…O2 flat-vector

Redraw network-audit-grid as an O2 audit table (name / last contact /
warm-intro path) with one worked example + fill rows, plus three
mapping cards turning last contact into opener warmth (recent hot,
6-24mo warm, no path cold/drop in ruby). Same audit + warmth rule; alt updated.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…t-vector

Redraw send-day-rhythm-card as three numbered O2 day cards (Day 1
champions+hot, Day 2-3 warm, Day 4+ cold) + a green success gate
(10+ replies, 3-5 demos; expect 15-25 from 50). Same rhythm + gate
canon; existing alt already matches.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…-vector

Redraw free-vs-paid-pilot as an O2 two-bar comparison (free ~12% ruby,
paid ~65% green = money) with a deposit-terms note band: $500+,
10-30% of year-one ACV, forfeited if the customer cancels early,
100% refund if you cancel - matching the DPA canon. Drops the O1
fabricated-cohort caption; basis marked illustrative. Alt updated.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ector

Redraw ph-vs-ih as two O2 separate-metric stat cards: Product Hunt
3.1%/launch (ruby, one-day-spike motif, 387 launches, 89% would not
launch again) vs Indie Hackers 23.1%/engaged post (green, sustained-
motion motif). Same OpenHunts 2024 canon + takeaway; existing alt matches.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…20%-slot); 46-SVG burn-down for the deferred wave

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@pftg
pftg merged commit 133f8f4 into master Aug 1, 2026
3 checks passed
@pftg
pftg deleted the course-svg-o2-rollout branch August 1, 2026 22:39
@coderabbitai

coderabbitai Bot commented Aug 1, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 625deab0-c369-4f87-91d5-4eabf2950e0c

📥 Commits

Reviewing files that changed from the base of the PR and between 0e98924 and d432883.

⛔ Files ignored due to path filters (17)
  • content/course/tech-for-non-technical-founders-2026/ai-persona-pre-validation-mom-test-prep/rehearsal-loop.svg is excluded by !**/*.svg
  • content/course/tech-for-non-technical-founders-2026/channel-selection-before-outbound/channel-fit-canvas.svg is excluded by !**/*.svg
  • content/course/tech-for-non-technical-founders-2026/clickable-prototype-validation-2-hour-lovable/prototype-build-strip.svg is excluded by !**/*.svg
  • content/course/tech-for-non-technical-founders-2026/find-10-people-where-to-look/find10-journey.svg is excluded by !**/*.svg
  • content/course/tech-for-non-technical-founders-2026/find-10-people-with-problem-outreach-2026/outreach-funnel-strip.svg is excluded by !**/*.svg
  • content/course/tech-for-non-technical-founders-2026/first-ten-customers-network-list/network-buckets.svg is excluded by !**/*.svg
  • content/course/tech-for-non-technical-founders-2026/first-ten-customers-outreach-message/network-audit-grid.svg is excluded by !**/*.svg
  • content/course/tech-for-non-technical-founders-2026/first-ten-customers-send-track/send-day-rhythm-card.svg is excluded by !**/*.svg
  • content/course/tech-for-non-technical-founders-2026/github-aws-database-ownership-checklist/ownership-audit-flow.svg is excluded by !**/*.svg
  • content/course/tech-for-non-technical-founders-2026/mom-test-ask-about-past-not-future/mom-test-script.svg is excluded by !**/*.svg
  • content/course/tech-for-non-technical-founders-2026/must-have-segment-pmf-test/sean-ellis-gauge.svg is excluded by !**/*.svg
  • content/course/tech-for-non-technical-founders-2026/one-page-product-brief-vibe-prd/vibe-prd-template-visual.svg is excluded by !**/*.svg
  • content/course/tech-for-non-technical-founders-2026/outbound-without-sales-team/ph-vs-ih.svg is excluded by !**/*.svg
  • content/course/tech-for-non-technical-founders-2026/paid-pilot-charge-before-ship/free-vs-paid-pilot.svg is excluded by !**/*.svg
  • content/course/tech-for-non-technical-founders-2026/self-serve-mvp-stack-build-phases/build-phases-strip.svg is excluded by !**/*.svg
  • content/course/tech-for-non-technical-founders-2026/self-serve-mvp-stack-lovable-supabase-stripe-2026/stack-boundaries.svg is excluded by !**/*.svg
  • content/course/tech-for-non-technical-founders-2026/stop-specifying-features-start-outcomes/admin-panel-spaceship.svg is excluded by !**/*.svg
📒 Files selected for processing (16)
  • bin/check-svg-floor
  • content/course/tech-for-non-technical-founders-2026/ai-persona-pre-validation-mom-test-prep/index.md
  • content/course/tech-for-non-technical-founders-2026/channel-selection-before-outbound/index.md
  • content/course/tech-for-non-technical-founders-2026/clickable-prototype-validation-2-hour-lovable/index.md
  • content/course/tech-for-non-technical-founders-2026/find-10-people-where-to-look/index.md
  • content/course/tech-for-non-technical-founders-2026/find-10-people-with-problem-outreach-2026/index.md
  • content/course/tech-for-non-technical-founders-2026/first-ten-customers-network-list/index.md
  • content/course/tech-for-non-technical-founders-2026/first-ten-customers-outreach-message/index.md
  • content/course/tech-for-non-technical-founders-2026/mom-test-ask-about-past-not-future/index.md
  • content/course/tech-for-non-technical-founders-2026/must-have-segment-pmf-test/index.md
  • content/course/tech-for-non-technical-founders-2026/one-page-product-brief-vibe-prd/index.md
  • content/course/tech-for-non-technical-founders-2026/paid-pilot-charge-before-ship/index.md
  • content/course/tech-for-non-technical-founders-2026/self-serve-mvp-stack-build-phases/index.md
  • content/course/tech-for-non-technical-founders-2026/self-serve-mvp-stack-lovable-supabase-stripe-2026/index.md
  • content/course/tech-for-non-technical-founders-2026/stop-specifying-features-start-outcomes/index.md
  • docs/20-29-testing-qa/screenshot-testing/20.10-visual-suite-speed-research-reference.md

📝 Walkthrough

Walkthrough

The PR adds a Ruby checker for SVG font-size legibility at 390px and expands alt text for course images. Documentation records the checker’s rollout status and deferred SVGs.

Changes

SVG legibility and image accessibility

Layer / File(s) Summary
SVG legibility checker and rollout record
bin/check-svg-floor, docs/20-29-testing-qa/screenshot-testing/20.10-visual-suite-speed-research-reference.md
The checker reports course SVG text below 9px at 390px and optionally fails with SVG_FLOOR_BLOCK=1. The testing reference records the check and deferred SVGs.
Expanded course image descriptions
content/course/tech-for-non-technical-founders-2026/*/index.md
Lesson image alt text now describes workflows, scoring thresholds, outcomes, tool boundaries, and comparison details.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Possibly related PRs

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch course-svg-o2-rollout

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

pftg added a commit that referenced this pull request Aug 1, 2026
…n wave

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
pftg pushed a commit that referenced this pull request Aug 8, 2026
Tranche 5 (JD hygiene) + the OKF log entry for the whole simplification:

- SAFLA corpus archived: 76-safla-neural-xp-coordination/ (7 files, 6,382
  lines, zero external inbound, bare-76 invalid JD area) moved under
  70-79-ai-intelligence/_ARCHIVED_76-safla.../ + the 75.01-75.04 set
  prefixed _ARCHIVED_ (README links updated). It described claude-flow
  machinery that is not installed.
- docs/30-39-architecture/ (7 CSS-era files, no README, zero inbound,
  colliding with the sanctioned 30-39-architecture-design/) folded into
  2509's archives as 30-39-architecture-css-era/.
- 80-89: Jekyll patterns archived (this is a Hugo site) + the ruby-expert
  validation report archived (report-file ban).
- docs/visuals/ dissolved: the Excalidraw SVG guide archived into
  design-system/ with a supersession banner (O2 flat-vector +
  .okf/design/house-visual-spec.md replaced it in W3/#434);
  running-case-studies re-homed to 90-99.
- design-system/course-landing-components-2026-08.md moved into 2605's
  30-39-architecture-design/ (project material in a site-wide area);
  both inbound links repaired.
- docs/adr/ double-0001 fixed (second file renamed 0002-) + README
  declaring adr/ the ONE site-wide ADR home, project ADRs stay in
  project trees.
- READMEs added where their absence caused misfiling:
  70-79-templates-boilerplates (documents the tolerated 70-79 range
  collision + internal 70.08 duplicate) and
  linkedin-posts/course-promo (mirrors the icp-validation entry point).
- .okf/log.md: dated entry with the six durable lessons from tranches
  1-5 (config-documents-only-installed-tools, supreme-authority-must-
  resolve, keep-lists-arent-existence-proofs, generated-not-asserted
  indexes, trackers-are-queues, per-file inbound checks on cohort
  archives).

Deferred deliberately (documented in the OKF entry): the 60.xx duplicate
renumbering + 60-69->20-29 testing-doc moves (M effort, inbound risk);
.junie//GEMINI.md/QWEN.md mirrors (other tools' files).

Gates: docs-only; course validators 8/8 green; inbound-link sweeps clean.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LtDh9gdEPMZjaFKauRaRRs
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant