Skip to content

feat(course): Modules 4+5 v2 - full course now on the v2 template (swarm + 2 cold-eyes rounds)#353

Merged
pftg merged 12 commits into
masterfrom
modules-4-5-v2
Jul 10, 2026
Merged

feat(course): Modules 4+5 v2 - full course now on the v2 template (swarm + 2 cold-eyes rounds)#353
pftg merged 12 commits into
masterfrom
modules-4-5-v2

Conversation

@pftg

@pftg pftg commented Jul 10, 2026

Copy link
Copy Markdown
Member

Summary

Modules 4 and 5 migrated to the v2 lesson format — the entire course is now on the v2 template (all 5 modules, all 5 Mia walkthroughs). Built by a 6-agent conversion swarm with disjoint file ownership, then hardened through two cold-eyes review rounds (8 reviewers, different lenses) and the visual scroll gate.

Structure

  • Flat renumber (a1342a15): 4.3a/4.3b → 4.3/4.4, ceiling signals → 4.5; 5.3a/b/c → 5.3/5.4/5.5, paid pilot → 5.6, outbound → 5.7. Slugs stable; ~120 cross-references swept; cascade collisions caught and fixed.
  • 12 lessons converted (5ce011ec): Progress chains (M4 · n of 5, M5 · n of 7), TL;DRs, 4-slot footers, optional routing (4.5/5.2/5.7), Artifact [WIP] Use section type for blog index page. Add pagination #5/Use section type for blog index page. Add pagination #6 hardcoded indexes retired, 11 in-lesson case blocks removed, glosses at first mention throughout.
  • Module 4 + Module 5 walkthroughs (577d97d7): Mia routes herself self-serve via the 4.1 worksheet, ships TutorMatch, runs the 40% test (38% overall / 55% in-segment), works the warm fifty, signs a $600-deposit group pilot with the ACV math shown.

Review rounds (all findings fixed)

  • R1 — ICP read-back, template/consistency, voice/AI-tells, boundary+canon: 35 findings (a7c6ade0, 2546a884). Three reviewers independently caught the same blocker: Mia's deposit was below the course's own $500 floor.
  • R2 — end-to-end spine walk, unbriefed stranger, claims/citations, diff regression: 35 findings (640ba5ca, 9b67bb33, b22dd3e1). Highlights: M4's 5K-vs-10K ceiling contradiction unified; "vibe coding" correctly attributed to Karpathy; the ICANN "14-day mandate" myth corrected; cold-outbound funnel restated with a realistic 3-8% band; 5.1's opener no longer describes a founder the ICP isn't; the Founder OS folder is now actually established in 1.1.
  • Scroll gate (3832b1cd): 4.1/4.2 mermaid walls compressed 1897/1608px → ~1050px; old-spine "chapter 7.x/8/9" ghosts found in pivot/churn chapters and repointed; zero overflow at 1280×800 and 390×844.

Gates

  • 8/8 course validators (ratchet grew to 100+ signatures; caught out-of-scope live instances 4 times this sprint)
  • bin/rake test:critical: 46 runs / 84 screenshots, clean ×3 runs
  • Production link sweep: 0 missing internal hrefs ×3
  • No templates/CSS touched (content + data + docs only)

Full gate report with triage decisions and carry-forwards: docs/projects/2605-tech-for-non-technical-founders/40-49-review/40.16-m4-m5-release-gate-2026-07-10.md

🤖 Generated with Claude Code

https://claude.ai/code/session_01GYRU9wGepomJo5hSuqtu7V

Summary by CodeRabbit

  • New Features
    • Added Module 4 and Module 5 walkthrough pages covering a full founder journey from MVP setup to getting paid.
    • Updated course guidance to align with the streamlined learning flow (ownership audits, outreach, paid pilots, monthly ceiling checks).
  • Documentation
    • Renumbered Modules 4–5 into a contiguous sequence and updated lesson navigation plus cross-references across FAQs, templates, quickstart, and companion materials.
    • Refreshed instructional wording, thresholds, and completion/next-step blocks, including removing older case-study sections where applicable.
    • Expanded course content validation rules to prevent outdated phrasing from reappearing.

Paul Keen and others added 10 commits July 10, 2026 00:32
Same consistency rule as the M2 flatten (letters retired): 4.3a/4.3b →
4.3/4.4, ceiling signals → 4.5; 5.3a/b/c → 5.3/5.4/5.5, paid pilot →
5.6, outbound → 5.7. Slugs stable. yaml titles/modules, frontmatter,
landing cards, quickstart/FAQ/HTCW, ~120 cross-references across 29
files, collective phrasings (4.3 a+b → 4.3-4.4, 5.3a/b/c → 5.3-5.5).
v1 'Step N of M' banners replaced with v2 Lesson headers (4.5/5.2/5.7
marked OPTIONAL). Also fixed: two pre-existing operating-kit links
labeled 5.4 but pointing at outbound (now 5.7), and stale old-M1
'Ch 1.2 (a + b)' lettering in validation-tools-field-guide.
8/8 validators green.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GYRU9wGepomJo5hSuqtu7V
Every M4/M5 lesson now carries the full v2 template: Progress chains
(M4 · n of 5, M5 · n of 7), TL;DRs, Done/You-have-now/Next/If-blocked
footers, optional-lesson routing (4.5/5.2/5.7). Hardcoded Artifact
#5/#6 indexes retired into You-have-now; all 11 in-lesson Tomas & Mia
case blocks removed (walkthroughs carry them); glosses at first mention
across all pages (2FA, IAM, RLS, webhook, DPA, procurement, Loom...);
cohort-generalization near-misses, 35-prospect drift, rescue framing,
single-point rates, and Stripe rate hardcode fixed; 5.1 core-routing
self-contradiction (5.2 vs 5.3) resolved. HTCW M4/M5 tables expanded
to the full 4.1-4.5 / 5.1-5.7 shape; quickstart optional-skip notes.
Case-study ban scope extended to all M4/M5 slugs; 18 new signatures
(2 narrowed after catching legitimate band/dialogue rates).
8/8 validators green.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GYRU9wGepomJo5hSuqtu7V
… wiring

module-4-walkthrough-mia (worksheet routes her self-serve, domain
transfer from the ownership audit, nine-evening build, RLS hole caught
by the AI audit prompt) and module-5-walkthrough-mia (38% overall /
55% in-segment on the 40% test, warm fifty -> 22 replies -> 9 demos,
group-organizer DPA with  deposit, 5.7 deliberately unopened).
See-it-in-action links added to all 12 M4/M5 lessons in the same
commit per 30.03 §2.7. Cascade-corrupted range refs (4.3-4.5, 5.3-5.7)
from the renumber sweep fixed in 10 sites.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GYRU9wGepomJo5hSuqtu7V
…ld-spine ghosts removed

4.1 decision tree 1897px->1017px and 4.2 ownership flow 1608px->1051px
(diamonds->rects, labels tightened); all 6 M4/M5 mermaids now under
the 1600px wall, zero overflow. Old-spine ghosts found by the gate:
pivot-or-persevere still carried chapter 7.1/7.4/7.5/7.6 refs (+ 7.6
og_title) and churn-triage carried chapter 7.6 + 'chapter 8/9' mermaid
nodes + pivot-ledger.svg said 'Chapter 5.5 floor' - all repointed to
the current spine (5.1, 5.7) or named Going Further chapters.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GYRU9wGepomJo5hSuqtu7V
Canon: Mia's pilot deposit $400->$600 (three reviewers converged - it
was below 5.6's own $500 floor and the course-wide gate); M4 walkthrough
Q-routing now matches 4.1's actual tree (Q4=yes -> self-serve); build
pace anchored to the part-time calendar 4.4 teaches.
Structure: Part 1/Part 2 framing retired (4.3/4.4 are lessons, not
parts); 5.2's stale off-template mini-footer deleted; 4.1/4.2 Next
lines carry the handoff clause + separators; 4.5's ownership-checklist
enumeration aligned to 4.2's real 12 items; cover/OG frontmatter added
to the 5.3/5.4/5.5 trio (covers existed, never wired).
Voice: 4 blocker dodges fixed (lowercase 'most founders', workload-
claim rewording, 'we picked up in Q1', voice-guide banned TL;DR
phrasing); walkthrough aphorism stacks flattened; reveal-twist +
anaphora + canon-quote reuse removed; fabricated-precision stats
dropped; Loom/Calendly 'free' cost-tags removed; reply-rate baseline
unified at 10-15%; 5.6 demo-source mislabel 5.3->5.5; 5.3 tally no
longer assumes optional 5.2.
11 new ratchet signatures. 8/8 validators green.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GYRU9wGepomJo5hSuqtu7V
… framing, signature scoping

The new signatures caught: 2.4 calling itself 'Part 2 of 2' (same
disease as 4.3/4.4, survived the M2 sprint), the build-path worksheet's
'we picked up in Q1 2026' rescue framing on the core path, and the 5.1
frontmatter description. 'we picked up in Q' signature scoped so the
Going Further rescue chapters keep their legitimate framing.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GYRU9wGepomJo5hSuqtu7V
5.1 opener reframed as the explicitly-labeled failure mode (was
describing a $4,200-ads founder the course ICP is not); 'no coding
required' tension defused at the two spots a non-technical reader
balks (RLS check labeled copy-paste-not-programming, Console check
de-jargoned to press-F12-look-for-red); Mia's founding-members vs
first-customer tension named head-on in the M5 intro (pre-sold promise
vs product-earned money); 'exactly as the lesson predicts' too-neat
tell removed; Mia's $600 deposit now shows its math (25% of a $2,400
group plan, inside the 10-30% band); $500-gate vs low-ACV-path
contradiction reconciled in quickstart + HTCW (both spots); one callout
in 4.4's warning wall demoted to prose.

Kept per the reviewer's dont-break list: 4.1 decision matrix, 5.6 DPA
package + objection table, landing NOT-covered section, 4-slot footers.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GYRU9wGepomJo5hSuqtu7V
… realistic funnels

Spine: M4 ceiling unified at ~5,000 users (4.4 said 10K twice against
4.1/4.3's 5K); pivot-or-persevere 'eight Founder OS artifacts' -> six;
5.7 Stripe fee de-hardcoded to match the rest of the course.
Claims: vibe-coding term correctly attributed to Andrej Karpathy
(Levels kept as practice exemplar); 'Sean Ellis has written ten
responses are directional' misattribution -> course's own caveat;
'14-day ICANN-mandated' -> practical buffer (5-day approval + 60-day
lock are the real rules); Figma/Retool first-customer stories softened
to 'reportedly'; Lenny survey precision (21 companies, 60/35/5) reduced
to what the article verifiably says; Airbnb 'WordPress' detail dropped;
Common Paper / Ash Rust attributions softened; Maven course links to
the bare homepage unlinked (platform-table link kept); WorthBuild
(unverifiable vendor) removed from 5.2 + HTCW; domain price unified
~$10; cold-outbound funnel restated with 3-8% realistic band (10-15%
as ceiling) and reply/demo math made internally consistent; 4.4's
survey pre-flight aligned with 5.1's 10-directional/20-useful floor.
Also: Founder OS folder now established in 1.1 pending - see next
commit if split. Ratchet entries from r2-diff scoped.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GYRU9wGepomJo5hSuqtu7V
…ferences

2.1 and every later module save artifacts 'in the same Founder OS
folder as your Founding Hypothesis' - but 1.1 never created it.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GYRU9wGepomJo5hSuqtu7V
@coderabbitai

coderabbitai Bot commented Jul 10, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Warning

Review limit reached

@pftg, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 56 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: cc5ff781-4fc7-439d-82b7-21bcb4e2580a

📥 Commits

Reviewing files that changed from the base of the PR and between 5017452 and 30ed7c7.

📒 Files selected for processing (6)
  • content/course/tech-for-non-technical-founders-2026/github-aws-database-ownership-checklist/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/outbound-without-sales-team/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/vibe-coding-ceiling-signals/index.md
📝 Walkthrough

Walkthrough

Modules 4 and 5 were renumbered into contiguous lesson sequences. Course pages, navigation, cross-references, completion guidance, validation rules, walkthroughs, and release documentation were updated to reflect the new structure.

Changes

Course sequencing and overview

Layer / File(s) Summary
Module sequence and course overview
content/course/tech-for-non-technical-founders-2026/_index.md, data/course_sequence.yaml, .../quickstart/index.md, .../how-this-course-works/index.md
Modules 4 and 5 now use contiguous numbering, with updated workflow tables, gates, artifact guidance, and lesson links.

Module 4 lessons and walkthrough

Layer / File(s) Summary
Module 4 lesson updates
.../should-you-hire-2026-decision-tree/index.md, .../self-serve-mvp-stack-*/index.md, .../github-aws-database-ownership-checklist/index.md, .../vibe-coding-ceiling-signals/index.md
Lesson framing, build guidance, ownership checks, ceiling signals, navigation, and completion blocks were revised for Lessons 4.1–4.5.
Module 4 walkthrough
.../module-4-walkthrough-mia/index.md
A new walkthrough covers Mia’s progression through Lessons 4.1–4.5.

Module 5 lessons and walkthrough

Layer / File(s) Summary
Module 5 execution flow
.../must-have-segment-pmf-test/index.md, .../first-ten-customers-*/index.md, .../paid-pilot-charge-before-ship/index.md, .../outbound-without-sales-team/index.md
Lessons 5.1–5.7, internal links, reply-rate guidance, paid-pilot steps, outbound guidance, and completion navigation were updated.
Module 5 walkthrough
.../module-5-walkthrough-mia/index.md
A new walkthrough describes the 40% test, warm outreach, paid pilot, and conditional cold-outbound path.

Cross-references and release validation

Layer / File(s) Summary
Course references and content validation
content/course/tech-for-non-technical-founders-2026/**, data/course_banned_strings.yaml
Chapter links, artifact references, smoke-test values, wording rules, and banned strings were synchronized with the revised structure.
Release records
docs/projects/2605-tech-for-non-technical-founders/**
Release-gate, project-index, and task-tracker documents record the M4/M5 v2 status and validation results.

Estimated code review effort: 4 (Complex) | ~60 minutes

Possibly related PRs

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately summarizes the v2 template rollout for Modules 4+5 and reflects the review rounds mentioned in the changes.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch modules-4-5-v2

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.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 8

Note

Due to the large number of review comments, Critical, Major severity comments were prioritized as inline comments.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (2)
content/course/tech-for-non-technical-founders-2026/how-this-course-works/index.md (1)

176-176: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Update the Build & Launch tool count.

After removing the WorthBuild row, the table contains five tool groups, but its heading still says “6 tools.” Update the heading to prevent a visible documentation inconsistency.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@content/course/tech-for-non-technical-founders-2026/how-this-course-works/index.md`
at line 176, Update the Build & Launch section heading to say “5 tools” instead
of “6 tools,” reflecting the five remaining tool groups after removing the
WorthBuild row.
content/course/tech-for-non-technical-founders-2026/github-aws-database-ownership-checklist/index.md (1)

102-119: 🔒 Security & Privacy | 🟡 Minor | ⚡ Quick win

Clarify the domain-ownership and transfer-timing wording. WHOIS/RDAP data can be redacted or proxy-managed, so it doesn’t always show the registrant’s name. Also, the “14-day” wait isn’t a fixed ICANN rule; ICANN’s transfer policy separates the 5-day lock-removal window from the 60-day transfer-lock scenarios.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@content/course/tech-for-non-technical-founders-2026/github-aws-database-ownership-checklist/index.md`
around lines 102 - 119, Clarify the domain ownership criterion and timing claims
in the checklist: update the “Domain registrar” pass criterion to acknowledge
that WHOIS/RDAP may be redacted or proxy-managed, and replace the fixed “14-day”
ICANN wording in the surrounding ownership explanation with accurate
distinctions between the five-day transfer lock-removal window and applicable
60-day transfer-lock scenarios.
🟡 Minor comments (21)
docs/projects/2605-tech-for-non-technical-founders/PROJECT-INDEX.md-4-4 (1)

4-4: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Do not mark the course fully v2 before the pending PR merges.

This line simultaneously says M4+M5 is on a branch with “PR pending” and that the course is fully on the v2 template. Change the final status to “pending merge” or equivalent until deployment.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/projects/2605-tech-for-non-technical-founders/PROJECT-INDEX.md` at line
4, Update the status line in PROJECT-INDEX.md to remove the claim that the
course is fully on the v2 template; replace it with wording such as “pending
merge” until the M4+M5 PR is merged and deployed.
content/course/tech-for-non-technical-founders-2026/customers-leaving-churn-triage-not-acquisition/index.md-111-112 (1)

111-112: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Make the “Going Further” destinations actionable.

Go to the rescue chapters Going Further is grammatically incomplete, and the diagram no longer identifies a clear destination after removing chapter numbers. Use a clear section-first label such as:

Proposed wording
-    C --> CK[Go to Pivot or Persevere<br/>in Going Further]
-    D --> DK[Go to the rescue chapters<br/>Going Further]
+    C --> CK[Go to Going Further<br/>→ Pivot or Persevere]
+    D --> DK[Go to rescue chapters<br/>in Going Further]
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@content/course/tech-for-non-technical-founders-2026/customers-leaving-churn-triage-not-acquisition/index.md`
around lines 111 - 112, Update the Mermaid destination labels in the C and D
flowchart edges so they are grammatically complete and actionable without
chapter numbers. Use section-first wording that clearly names the destination,
such as “Go to Going Further: Pivot or Persevere” and “Go to Going Further:
Rescue chapters.”
content/course/tech-for-non-technical-founders-2026/reference/smoke-test-channel-guide/index.md-22-22 (1)

22-22: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Update the LinkedIn 300-visit budget to match the new CPC.

At $5.70 CPC, 300 visits cost $1,710, not $1,650. Update the table to $1,710-$6,600 and synchronize the repeated budget statement in smoke-test-landing-page-7-day-demand-test/index.md (line 47).

Also applies to: 65-65, 124-124

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@content/course/tech-for-non-technical-founders-2026/reference/smoke-test-channel-guide/index.md`
at line 22, Update the LinkedIn row in the channel guide table so the 300-visit
budget is $1,710-$6,600, and synchronize the repeated LinkedIn budget statement
in the smoke-test landing page document and the other referenced occurrences.
content/course/tech-for-non-technical-founders-2026/channel-selection-before-outbound/index.md-100-100 (1)

100-100: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Keep the channel count consistent.

The section heading says “4 channels,” but the table contains five: LinkedIn DM, cold email, community outreach, social organic, and Engineering as Marketing. Rename the heading to “5 channels” or remove one row so the worksheet matches its instructions.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@content/course/tech-for-non-technical-founders-2026/channel-selection-before-outbound/index.md`
at line 100, Update the channel-count section heading to “5 channels” so it
matches the five rows in the channel-selection table: LinkedIn DM, cold email,
community outreach, social organic, and Engineering as Marketing.
content/course/tech-for-non-technical-founders-2026/paid-pilot-charge-before-ship/index.md-295-295 (1)

295-295: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Point no-demo readers to the complete warm-network sequence.

This fallback sends readers only to Chapter 5.3, but the paid-pilot input is produced by the full 5.3–5.5 flow: build the list, write the message, then send and track until demos exist. Link or refer to Chapters 5.3–5.5 so readers do not stop after creating the list.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@content/course/tech-for-non-technical-founders-2026/paid-pilot-charge-before-ship/index.md`
at line 295, Update the no-warm-demos fallback in the paid-pilot
charge-before-ship content to direct readers to the complete Chapters 5.3–5.5
sequence: build the network list, write the outreach message, then send and
track outreach until demos exist, rather than linking only to Chapter 5.3.
content/course/tech-for-non-technical-founders-2026/paid-pilot-charge-before-ship/index.md-321-321 (1)

321-321: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Keep the “Stuck here?” paragraph inside the blockquote.

MD028 is triggered by the blank line before the next > paragraph. Add > to the blank separator or remove the blank line.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@content/course/tech-for-non-technical-founders-2026/paid-pilot-charge-before-ship/index.md`
at line 321, The “Stuck here?” paragraph is separated from the blockquote by an
unquoted blank line, triggering MD028. In the relevant markdown block, update
the blank separator to include the blockquote marker or remove the blank line so
the entire paragraph remains inside the blockquote.

Source: Linters/SAST tools

content/course/tech-for-non-technical-founders-2026/find-10-people-with-problem-outreach-2026/index.md-43-43 (1)

43-43: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Keep the blank line inside the blockquote.

MD028 is triggered because Line 43 is a blank line between blockquote paragraphs. Prefix it with > or remove the blank line so the rendered blockquote remains consistent.

Proposed fix
 > **Read [Chapter 2.3 - Where to Look](/course/tech-for-non-technical-founders-2026/find-10-people-where-to-look/) first.** It covers the ICP mapping, reading threads, and building the 30-name list. You need that list before the templates below will work - generic openers collapse to 1-5% reply rates.
-
+>
 > **How this chapter relates to Ch 2.6:** this chapter recruits 10 fresh interviewees and runs PAST-BEHAVIOR interviews about whether the problem is real.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@content/course/tech-for-non-technical-founders-2026/find-10-people-with-problem-outreach-2026/index.md`
at line 43, Fix the MD028 violation in the blockquote by ensuring the blank line
between its paragraphs is prefixed with “>”, or remove the blank line if
paragraph separation is unnecessary. Locate the affected blockquote in the
document around the reported line and keep its formatting consistent.

Source: Linters/SAST tools

content/course/tech-for-non-technical-founders-2026/first-ten-customers-send-track/index.md-35-35 (1)

35-35: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Keep the progress callout contiguous.

The blank line inside this blockquote triggers MD028 and may break the callout’s rendered formatting. Remove it or prefix it with >.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@content/course/tech-for-non-technical-founders-2026/first-ten-customers-send-track/index.md`
at line 35, Remove the blank line within the progress callout blockquote in the
course lesson content, or prefix that line with “>” so the blockquote remains
contiguous and renders correctly.

Source: Linters/SAST tools

content/course/tech-for-non-technical-founders-2026/first-ten-customers-outreach-message/index.md-35-35 (1)

35-35: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Keep the TL;DR blockquote contiguous.

The blank line inside this blockquote triggers MD028 and may split the callout in the rendered lesson. Remove it or prefix it with >.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@content/course/tech-for-non-technical-founders-2026/first-ten-customers-outreach-message/index.md`
at line 35, Remove the blank line within the TL;DR blockquote in the lesson
content, or add the blockquote prefix to that line, keeping the entire callout
contiguous and preventing MD028.

Source: Linters/SAST tools

content/course/tech-for-non-technical-founders-2026/must-have-segment-pmf-test/index.md-39-39 (1)

39-39: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Keep the progress callout contiguous.

The blank line inside this blockquote triggers MD028 and may split the callout in the rendered lesson. Remove it or prefix it with >.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@content/course/tech-for-non-technical-founders-2026/must-have-segment-pmf-test/index.md`
at line 39, Remove the blank line within the blockquote progress callout in the
lesson content, or prefix that line with “>”, so the callout remains contiguous
and does not trigger MD028.

Source: Linters/SAST tools

content/course/tech-for-non-technical-founders-2026/first-ten-customers-network-list/index.md-35-35 (1)

35-35: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Keep the TL;DR blockquote contiguous.

The blank line inside this blockquote triggers MD028 and can split the callout during rendering. Remove the blank line or prefix it with >.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@content/course/tech-for-non-technical-founders-2026/first-ten-customers-network-list/index.md`
at line 35, Remove the blank line within the TL;DR blockquote in the course
content so all consecutive callout lines remain contiguous; alternatively,
prefix that line with “>” to keep it part of the blockquote.

Source: Linters/SAST tools

content/course/tech-for-non-technical-founders-2026/outbound-without-sales-team/index.md-39-39 (1)

39-39: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Keep the opening blockquote contiguous.

These blank lines inside the blockquote trigger MD028 and may split the introductory callout during rendering. Remove them or prefix them with >.

Also applies to: 41-41, 47-47

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@content/course/tech-for-non-technical-founders-2026/outbound-without-sales-team/index.md`
at line 39, Remove the blank lines within the opening blockquote in the
introductory section of index.md, including the referenced lines, or prefix each
blank line with “>” so the blockquote remains contiguous and renders as one
callout.

Source: Linters/SAST tools

content/course/tech-for-non-technical-founders-2026/first-ten-customers-network-list/index.md-66-66 (1)

66-66: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Restore the missing table cell.

This row has only two cells, while the header defines three columns. The reduced-warm explanation and the Ch 5.7 path should occupy separate cells so the rendered decision table preserves its structure.

Proposed fix
-| **15-29** | Reduced warm motion. Build smaller buckets: 2 champions + 5 hot + 8 warm + 5 cold. You'll need cold outbound ([Ch 5.7](/course/tech-for-non-technical-founders-2026/outbound-without-sales-team/)) in parallel. |
+| **15-29** | Reduced warm motion. Build smaller buckets: 2 champions + 5 hot + 8 warm + 5 cold. | You'll need cold outbound ([Ch 5.7](/course/tech-for-non-technical-founders-2026/outbound-without-sales-team/)) in parallel. |
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@content/course/tech-for-non-technical-founders-2026/first-ten-customers-network-list/index.md`
at line 66, Restore the missing table cell in the decision-table row for “15-29”
so it matches the three-column header. Keep “Reduced warm motion” in its own
cell and place the bucket guidance with the Ch 5.7 outbound link in the separate
third cell.

Source: Linters/SAST tools

content/course/tech-for-non-technical-founders-2026/vibe-coding-ceiling-signals/index.md-254-254 (1)

254-254: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Remove the blank line inside the blockquote.

This standalone > line violates Markdownlint MD028 and can break blockquote rendering.

Proposed fix
 > **If blocked:** if 2+ signals are red but you are not sure whether to hire, book one free Fractional CTO call. The first call is usually free and the diagnosis alone is worth the hour.
->
 > **Module 4 closes here.** Before opening Module 5, you should have: ...
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@content/course/tech-for-non-technical-founders-2026/vibe-coding-ceiling-signals/index.md`
at line 254, Remove the standalone blank blockquote line (`>`) in the affected
blockquote in the course content, keeping the quoted lines contiguous to satisfy
Markdownlint MD028 and preserve rendering.

Source: Linters/SAST tools

content/course/tech-for-non-technical-founders-2026/vibe-coding-ceiling-signals/index.md-51-61 (1)

51-61: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Source or qualify the Karpathy/Levels framing. The paragraph states the origin and “2026 default” claims as fact, but they aren’t supported in the chapter’s references. Add a citation or rephrase this as editorial framing.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@content/course/tech-for-non-technical-founders-2026/vibe-coding-ceiling-signals/index.md`
around lines 51 - 61, Qualify the unsupported attribution and adoption claim in
the opening “Vibe Coding” paragraph. Either add references supporting Andrej
Karpathy’s coinage and Pieter Levels’ influence/2026-default framing, or
rephrase those statements as editorial framing rather than established facts,
while preserving the rest of the paragraph.
content/course/tech-for-non-technical-founders-2026/vibe-coding-ceiling-signals/index.md-107-111 (1)

107-111: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Mark this anecdote as illustrative or add a source.
Lines 107-109 read like a real customer story with specific numbers and no attribution. If it's a composite, label it; if it's a real engagement, cite the source.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@content/course/tech-for-non-technical-founders-2026/vibe-coding-ceiling-signals/index.md`
around lines 107 - 111, The anecdote beginning “a fitness-coaching SaaS we
reviewed” presents specific customer details without attribution. In the “Cost
of leaving it alone” section, either add a credible source for the engagement or
clearly label the example as illustrative/composite and adjust the wording to
avoid implying an identifiable real customer story.
content/course/tech-for-non-technical-founders-2026/self-serve-mvp-stack-build-phases/index.md-126-126 (1)

126-126: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Clarify that these are onramp accounts, not Phase 4 accounts.

Phase 4 currently requires one non-interview ICP user to reach the paywall, while the later onramp section expects 4–6 accounts from the 10-person invite wave. Calling them “Phase 4's 4–6 onramp accounts” makes the gate and timing ambiguous.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@content/course/tech-for-non-technical-founders-2026/self-serve-mvp-stack-build-phases/index.md`
at line 126, Clarify the “Pre-flight before M5.1” note by distinguishing Phase
4’s single non-interview ICP paywall user from the later onramp cohort. State
that the 4–6 onramp accounts come from the 10-person invite wave described in
the relevant onramp section, so the Phase 4 gate and Module 5 timing are
unambiguous.
content/course/tech-for-non-technical-founders-2026/should-you-hire-2026-decision-tree/index.md-38-38 (1)

38-38: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Fix the blank line inside the blockquote.

markdownlint reports MD028 for this completion callout. Remove the empty quoted line or split the callout into separate blockquotes.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@content/course/tech-for-non-technical-founders-2026/should-you-hire-2026-decision-tree/index.md`
at line 38, Remove the blank quoted line within the completion callout
blockquote in the markdown content, keeping the callout as one continuous
blockquote; alternatively, split it into separate blockquotes if the separation
is intentional.

Source: Linters/SAST tools

content/course/tech-for-non-technical-founders-2026/self-serve-mvp-stack-lovable-supabase-stripe-2026/index.md-40-44 (1)

40-44: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Fix the blank lines inside blockquotes.

markdownlint reports MD028 for the blank lines in this callout block. Remove the empty blockquote lines or split the paragraphs into separate blockquotes.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@content/course/tech-for-non-technical-founders-2026/self-serve-mvp-stack-lovable-supabase-stripe-2026/index.md`
around lines 40 - 44, Remove the blank lines within the blockquote callout after
the TL;DR paragraph, keeping the content as one contiguous blockquote or
splitting it into separate blockquotes so markdownlint MD028 passes.

Source: Linters/SAST tools

content/course/tech-for-non-technical-founders-2026/self-serve-mvp-stack-build-phases/index.md-40-44 (1)

40-44: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Fix the blank lines inside blockquotes.

markdownlint reports MD028 for these callout paragraphs. Remove the empty blockquote lines or split the callouts into separate blockquotes so the release lint stays clean.

Also applies to: 125-125

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@content/course/tech-for-non-technical-founders-2026/self-serve-mvp-stack-build-phases/index.md`
around lines 40 - 44, Remove blank lines within the blockquoted callouts in the
self-serve MVP build phases content, including the callout near the TL;DR and
the additional occurrence identified at the referenced location. Keep each
paragraph continuously prefixed as a blockquote, or split distinct callouts into
separate blockquote blocks, so markdownlint MD028 passes.

Source: Linters/SAST tools

content/course/tech-for-non-technical-founders-2026/should-you-hire-2026-decision-tree/index.md-162-162 (1)

162-162: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Link the Fractional CTO rate to the source note — this page uses the $80-$120/hour / $400-$600/week band as a routing input, but the citation lives only in the supplementary reference. Add an inline link here or label it as an approximate 2026 estimate.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@content/course/tech-for-non-technical-founders-2026/should-you-hire-2026-decision-tree/index.md`
at line 162, Update the Q5 engineering-budget guidance to link the $80–$120/hour
and $400–$600/week Fractional CTO rate directly to the relevant supplementary
source note, or explicitly label the figures as approximate 2026 estimates.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In
`@content/course/tech-for-non-technical-founders-2026/github-aws-database-ownership-checklist/index.md`:
- Around line 143-145: Update the Escalate decision label in the flowchart to
match the defined recovery timelines: use 3–5 business days for AWS/code
recovery and 14 days for domain transfer, ensuring founders are directed to
escalate based on the correct path.

In
`@content/course/tech-for-non-technical-founders-2026/module-4-walkthrough-mia/index.md`:
- Line 37: Revise the AI audit passage in the walkthrough to state that Claude’s
response and a corrected RLS policy do not prove tenant isolation. Require a
real negative test using separate parent accounts and data, and warn readers not
to paste secrets, production data, or sensitive schema details into external AI
models.

In
`@content/course/tech-for-non-technical-founders-2026/outbound-without-sales-team/index.md`:
- Line 40: Revise the TL;DR sentence near the top of the page to present results
from 30 personalized cold messages as a probabilistic target, not a guarantee:
align it with the detailed funnel’s expected 1–2 replies and potentially one
paid-pilot conversation, and avoid promising 1–2 paid pilots.
- Line 214: The stated 3–8% realistic reply range conflicts with the funnel
table and stop rule that treats anything below 5% as a failure. Update the
outbound guidance and corresponding section around the funnel decision rule so
the expected range is clearly distinct from the minimum acceptable threshold, or
align the thresholds consistently throughout the page.

In
`@content/course/tech-for-non-technical-founders-2026/self-serve-mvp-stack-build-phases/index.md`:
- Line 87: Revise the “No-code path” guidance to prohibit directly applying
AI-generated Supabase RLS policies. In the instruction beginning “Audit my
Supabase RLS policy,” require the founder to manually verify table ownership,
restrictive SELECT/INSERT/UPDATE/DELETE behavior, and both USING and WITH CHECK
clauses, then perform a two-user read/write isolation test before applying any
SQL.

In
`@content/course/tech-for-non-technical-founders-2026/self-serve-mvp-stack-lovable-supabase-stripe-2026/index.md`:
- Line 171: Update the “Stripe webhook handler must be idempotent” guidance to
require an events table with a unique constraint on event IDs and an atomic
insert-or-claim operation, such as INSERT ... ON CONFLICT handling, before
applying subscription updates. Ensure only the delivery that successfully claims
the event proceeds, while duplicates and already-claimed events exit without
repeating the update; remove the unsafe processed-flag check as the primary
mechanism.

In
`@content/course/tech-for-non-technical-founders-2026/self-serve-stack-walkthrough/index.md`:
- Around line 382-384: Update the architectural-ceiling guidance paragraph to
trigger escalation only when 2 or more ceiling signals appear, and change the “5
ceiling signals” link to the dedicated self-serve MVP stack build-phases
ceiling-signals page. Use the surrounding “architectural ceiling” guidance as
the edit target and preserve the Fractional CTO bridge destination.

In
`@content/course/tech-for-non-technical-founders-2026/should-you-hire-2026-decision-tree/index.md`:
- Around line 119-120: Update the Mermaid diagram’s Q1 definition in Start -->
Q1 to match the later Q1 rule, adding the Chapter 2.6 prototype criterion
requiring 4 of 5 testers to reach the right screen; keep the validation criteria
consistent across both locations.

---

Outside diff comments:
In
`@content/course/tech-for-non-technical-founders-2026/github-aws-database-ownership-checklist/index.md`:
- Around line 102-119: Clarify the domain ownership criterion and timing claims
in the checklist: update the “Domain registrar” pass criterion to acknowledge
that WHOIS/RDAP may be redacted or proxy-managed, and replace the fixed “14-day”
ICANN wording in the surrounding ownership explanation with accurate
distinctions between the five-day transfer lock-removal window and applicable
60-day transfer-lock scenarios.

In
`@content/course/tech-for-non-technical-founders-2026/how-this-course-works/index.md`:
- Line 176: Update the Build & Launch section heading to say “5 tools” instead
of “6 tools,” reflecting the five remaining tool groups after removing the
WorthBuild row.

---

Minor comments:
In
`@content/course/tech-for-non-technical-founders-2026/channel-selection-before-outbound/index.md`:
- Line 100: Update the channel-count section heading to “5 channels” so it
matches the five rows in the channel-selection table: LinkedIn DM, cold email,
community outreach, social organic, and Engineering as Marketing.

In
`@content/course/tech-for-non-technical-founders-2026/customers-leaving-churn-triage-not-acquisition/index.md`:
- Around line 111-112: Update the Mermaid destination labels in the C and D
flowchart edges so they are grammatically complete and actionable without
chapter numbers. Use section-first wording that clearly names the destination,
such as “Go to Going Further: Pivot or Persevere” and “Go to Going Further:
Rescue chapters.”

In
`@content/course/tech-for-non-technical-founders-2026/find-10-people-with-problem-outreach-2026/index.md`:
- Line 43: Fix the MD028 violation in the blockquote by ensuring the blank line
between its paragraphs is prefixed with “>”, or remove the blank line if
paragraph separation is unnecessary. Locate the affected blockquote in the
document around the reported line and keep its formatting consistent.

In
`@content/course/tech-for-non-technical-founders-2026/first-ten-customers-network-list/index.md`:
- Line 35: Remove the blank line within the TL;DR blockquote in the course
content so all consecutive callout lines remain contiguous; alternatively,
prefix that line with “>” to keep it part of the blockquote.
- Line 66: Restore the missing table cell in the decision-table row for “15-29”
so it matches the three-column header. Keep “Reduced warm motion” in its own
cell and place the bucket guidance with the Ch 5.7 outbound link in the separate
third cell.

In
`@content/course/tech-for-non-technical-founders-2026/first-ten-customers-outreach-message/index.md`:
- Line 35: Remove the blank line within the TL;DR blockquote in the lesson
content, or add the blockquote prefix to that line, keeping the entire callout
contiguous and preventing MD028.

In
`@content/course/tech-for-non-technical-founders-2026/first-ten-customers-send-track/index.md`:
- Line 35: Remove the blank line within the progress callout blockquote in the
course lesson content, or prefix that line with “>” so the blockquote remains
contiguous and renders correctly.

In
`@content/course/tech-for-non-technical-founders-2026/must-have-segment-pmf-test/index.md`:
- Line 39: Remove the blank line within the blockquote progress callout in the
lesson content, or prefix that line with “>”, so the callout remains contiguous
and does not trigger MD028.

In
`@content/course/tech-for-non-technical-founders-2026/outbound-without-sales-team/index.md`:
- Line 39: Remove the blank lines within the opening blockquote in the
introductory section of index.md, including the referenced lines, or prefix each
blank line with “>” so the blockquote remains contiguous and renders as one
callout.

In
`@content/course/tech-for-non-technical-founders-2026/paid-pilot-charge-before-ship/index.md`:
- Line 295: Update the no-warm-demos fallback in the paid-pilot
charge-before-ship content to direct readers to the complete Chapters 5.3–5.5
sequence: build the network list, write the outreach message, then send and
track outreach until demos exist, rather than linking only to Chapter 5.3.
- Line 321: The “Stuck here?” paragraph is separated from the blockquote by an
unquoted blank line, triggering MD028. In the relevant markdown block, update
the blank separator to include the blockquote marker or remove the blank line so
the entire paragraph remains inside the blockquote.

In
`@content/course/tech-for-non-technical-founders-2026/reference/smoke-test-channel-guide/index.md`:
- Line 22: Update the LinkedIn row in the channel guide table so the 300-visit
budget is $1,710-$6,600, and synchronize the repeated LinkedIn budget statement
in the smoke-test landing page document and the other referenced occurrences.

In
`@content/course/tech-for-non-technical-founders-2026/self-serve-mvp-stack-build-phases/index.md`:
- Line 126: Clarify the “Pre-flight before M5.1” note by distinguishing Phase
4’s single non-interview ICP paywall user from the later onramp cohort. State
that the 4–6 onramp accounts come from the 10-person invite wave described in
the relevant onramp section, so the Phase 4 gate and Module 5 timing are
unambiguous.
- Around line 40-44: Remove blank lines within the blockquoted callouts in the
self-serve MVP build phases content, including the callout near the TL;DR and
the additional occurrence identified at the referenced location. Keep each
paragraph continuously prefixed as a blockquote, or split distinct callouts into
separate blockquote blocks, so markdownlint MD028 passes.

In
`@content/course/tech-for-non-technical-founders-2026/self-serve-mvp-stack-lovable-supabase-stripe-2026/index.md`:
- Around line 40-44: Remove the blank lines within the blockquote callout after
the TL;DR paragraph, keeping the content as one contiguous blockquote or
splitting it into separate blockquotes so markdownlint MD028 passes.

In
`@content/course/tech-for-non-technical-founders-2026/should-you-hire-2026-decision-tree/index.md`:
- Line 38: Remove the blank quoted line within the completion callout blockquote
in the markdown content, keeping the callout as one continuous blockquote;
alternatively, split it into separate blockquotes if the separation is
intentional.
- Line 162: Update the Q5 engineering-budget guidance to link the $80–$120/hour
and $400–$600/week Fractional CTO rate directly to the relevant supplementary
source note, or explicitly label the figures as approximate 2026 estimates.

In
`@content/course/tech-for-non-technical-founders-2026/vibe-coding-ceiling-signals/index.md`:
- Line 254: Remove the standalone blank blockquote line (`>`) in the affected
blockquote in the course content, keeping the quoted lines contiguous to satisfy
Markdownlint MD028 and preserve rendering.
- Around line 51-61: Qualify the unsupported attribution and adoption claim in
the opening “Vibe Coding” paragraph. Either add references supporting Andrej
Karpathy’s coinage and Pieter Levels’ influence/2026-default framing, or
rephrase those statements as editorial framing rather than established facts,
while preserving the rest of the paragraph.
- Around line 107-111: The anecdote beginning “a fitness-coaching SaaS we
reviewed” presents specific customer details without attribution. In the “Cost
of leaving it alone” section, either add a credible source for the engagement or
clearly label the example as illustrative/composite and adjust the wording to
avoid implying an identifiable real customer story.

In `@docs/projects/2605-tech-for-non-technical-founders/PROJECT-INDEX.md`:
- Line 4: Update the status line in PROJECT-INDEX.md to remove the claim that
the course is fully on the v2 template; replace it with wording such as “pending
merge” until the M4+M5 PR is merged and deployed.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 98fb3d0a-52cd-47ff-9e9e-f9b1486e00c0

📥 Commits

Reviewing files that changed from the base of the PR and between 9212a78 and a0f8299.

⛔ Files ignored due to path filters (1)
  • content/course/tech-for-non-technical-founders-2026/pivot-or-persevere-decision-framework/pivot-ledger.svg is excluded by !**/*.svg
📒 Files selected for processing (39)
  • content/course/tech-for-non-technical-founders-2026/_index.md
  • content/course/tech-for-non-technical-founders-2026/build-path-decision-worksheet/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/customers-leaving-churn-triage-not-acquisition/index.md
  • content/course/tech-for-non-technical-founders-2026/faq/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-paying-customer-operating-kit/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/first-ten-customers-send-track/index.md
  • content/course/tech-for-non-technical-founders-2026/five-tech-words-stop-nodding-at/index.md
  • content/course/tech-for-non-technical-founders-2026/form-your-founding-hypothesis-90-minute-sprint/index.md
  • content/course/tech-for-non-technical-founders-2026/github-aws-database-ownership-checklist/index.md
  • content/course/tech-for-non-technical-founders-2026/hire-track-supplementary-reference/index.md
  • content/course/tech-for-non-technical-founders-2026/how-this-course-works/index.md
  • content/course/tech-for-non-technical-founders-2026/module-4-walkthrough-mia/index.md
  • content/course/tech-for-non-technical-founders-2026/module-5-walkthrough-mia/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/outbound-without-sales-team/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/pivot-or-persevere-decision-framework/index.md
  • content/course/tech-for-non-technical-founders-2026/quickstart/index.md
  • content/course/tech-for-non-technical-founders-2026/reference/smoke-test-channel-guide/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/self-serve-stack-walkthrough/index.md
  • content/course/tech-for-non-technical-founders-2026/should-you-hire-2026-decision-tree/index.md
  • content/course/tech-for-non-technical-founders-2026/smoke-test-landing-page-7-day-demand-test/index.md
  • content/course/tech-for-non-technical-founders-2026/stop-specifying-features-start-outcomes/index.md
  • content/course/tech-for-non-technical-founders-2026/validation-tools-field-guide/index.md
  • content/course/tech-for-non-technical-founders-2026/vibe-coding-ceiling-signals/index.md
  • data/course_banned_strings.yaml
  • data/course_sequence.yaml
  • docs/projects/2605-tech-for-non-technical-founders/40-49-review/40.16-m4-m5-release-gate-2026-07-10.md
  • docs/projects/2605-tech-for-non-technical-founders/PROJECT-INDEX.md
  • docs/projects/2605-tech-for-non-technical-founders/TASK-TRACKER.md

Comment on lines +143 to 145
Recovery --> Escalate["Contractor cooperated within<br/>7 days code / 14 days cloud?"]
Escalate -->|Yes| Pass
Escalate -->|No| Lawyer[Retain lawyer.<br/>$2K-$5K beats<br/>a stalled checkout]

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Fix the escalation timing label.

The flowchart asks whether the contractor cooperated within “7 days code / 14 days cloud,” but the branches define AWS recovery as 3–5 business days and domain transfer as the 14-day case. This mislabels the recovery path and can cause founders to delay the wrong escalation.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@content/course/tech-for-non-technical-founders-2026/github-aws-database-ownership-checklist/index.md`
around lines 143 - 145, Update the Escalate decision label in the flowchart to
match the defined recovery timelines: use 3–5 business days for AWS/code
recovery and 14 days for domain transfer, ensuring founders are directed to
escalate based on the correct path.


The [four phases](/course/tech-for-non-technical-founders-2026/self-serve-mvp-stack-build-phases/) took her nine build evenings spread across ten calendar weeks - the part-time pace Chapter 4.4 tells you to plan for. The UI phase went fastest because the prototype had already settled the layout arguments: search by the kid's need, profiles with reviews, credentials, response time, and the session rate the fifth test parent had gone looking for. Auth was parent accounts with the same magic-link sign-in her brief specified. Stripe was the founding-member checkout she had been running manually since Module 1, now wired into the product. The deploy phase ended with her domain - the one she now owned - pointing at a live TutorMatch.

The scare came from the AI audit prompt in the build rules. She pasted her Supabase table definitions and row-level security policy into Claude and asked whether a logged-in parent could read another parent's rows. The answer was yes - the policy she had accepted from a Lovable default checked that a user was signed in, not which user they were. One corrected policy later, the check came back clean. It was the cheapest security review she will ever run.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔒 Security & Privacy | 🟠 Major | ⚡ Quick win

Do not treat the AI audit as proof of RLS security.

A Claude response cannot establish that tenant isolation is correct, and the walkthrough currently presents one corrected policy plus an AI “clean” result as sufficient security validation. Require a real negative test using separate parent accounts/data, and warn readers not to paste secrets, production data, or sensitive schema details into an external model.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@content/course/tech-for-non-technical-founders-2026/module-4-walkthrough-mia/index.md`
at line 37, Revise the AI audit passage in the walkthrough to state that
Claude’s response and a corrected RLS policy do not prove tenant isolation.
Require a real negative test using separate parent accounts and data, and warn
readers not to paste secrets, production data, or sensitive schema details into
external AI models.

```

Expect a 10-20% reply rate on a properly filtered, properly personalized 30-message batch. That is 3-6 replies, of which 2-4 will agree to a 15-minute demo. Of the demos, 1-2 will agree to a paid pilot. Of the pilots, the [Chapter 5.4](/course/tech-for-non-technical-founders-2026/paid-pilot-charge-before-ship/) deposit-to-year-one conversion math holds.
Expect 3-8% replies on a realistic first batch - 1-2 replies per 30 messages - and treat 10-15% as what a tightly filtered, heavily personalized batch can reach: 3-4 replies, of which 1-2 agree to a 15-minute demo, of which one becomes a paid-pilot conversation. Of the pilots, the [Chapter 5.6](/course/tech-for-non-technical-founders-2026/paid-pilot-charge-before-ship/) deposit-to-year-one conversion math holds.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Reconcile the realistic reply band with the stop threshold.

The page calls 3–8% the realistic first-batch band, but the funnel table and decision rule say anything below 5% requires stopping and diagnosing. That tells readers to stop within the lower half of the “realistic” range. Distinguish the expected range from the minimum success threshold, or change one of the thresholds.

Also applies to: 232-232

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@content/course/tech-for-non-technical-founders-2026/outbound-without-sales-team/index.md`
at line 214, The stated 3–8% realistic reply range conflicts with the funnel
table and stop rule that treats anything below 5% as a failure. Update the
outbound guidance and corresponding section around the funnel decision rule so
the expected range is clearly distinct from the minimum acceptable threshold, or
align the thresholds consistently throughout the page.

> **Self-test your RLS policy before going live (two paths).**
>
> *No-code path (the default for a non-technical founder).* In Claude or ChatGPT, paste: *"Audit my Supabase RLS policy. Here is my schema: [paste your table definitions from Supabase Table Editor]. Here is my current RLS policy: [paste from Authentication -> Policies]. Tell me whether a logged-in user with a fake user-id can read rows that belong to other users. If yes, give me the exact policy SQL to fix it."* Paste the AI's suggested policy into Supabase Authentication -> Policies.
> *No-code path (the default for a non-technical founder - this is copy-paste verification, not programming: the AI writes the fix, you paste it and read the answer).* In Claude or ChatGPT, paste: *"Audit my Supabase RLS policy. Here is my schema: [paste your table definitions from Supabase Table Editor]. Here is my current RLS policy: [paste from Authentication -> Policies]. Tell me whether a logged-in user with a fake user-id can read rows that belong to other users. If yes, give me the exact policy SQL to fix it."* Paste the AI's suggested policy into Supabase Authentication -> Policies.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔒 Security & Privacy | 🟠 Major | 🏗️ Heavy lift

Do not instruct users to paste AI-generated RLS policies without review.

RLS is the tenant-isolation boundary, and an AI-generated policy can be permissive, omit WITH CHECK, or use the wrong ownership column. This instruction can turn an audit failure into a production data leak. Require manual policy review plus a two-user read/write test before applying generated SQL.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@content/course/tech-for-non-technical-founders-2026/self-serve-mvp-stack-build-phases/index.md`
at line 87, Revise the “No-code path” guidance to prohibit directly applying
AI-generated Supabase RLS policies. In the instruction beginning “Audit my
Supabase RLS policy,” require the founder to manually verify table ownership,
restrictive SELECT/INSERT/UPDATE/DELETE behavior, and both USING and WITH CHECK
clauses, then perform a two-user read/write isolation test before applying any
SQL.

6. **Set up GitHub sync in Lovable Settings on day 1.** Lovable can drop the work; GitHub is your backup. Skipping this is the #1 reason founders cannot retrieve their source.
7. **Enable Row-Level Security on every Supabase table from day 1.** RLS is the rule that says "Coach A can only read Coach A's rows." Skipping it ships the cross-tenant data leak that ends pilots (see Ch 4.4 Signal 4).
7. **Enable Row-Level Security on every Supabase table from day 1.** RLS is the rule that says "Coach A can only read Coach A's rows." Skipping it ships the cross-tenant data leak that ends pilots (see Ch 4.5 Signal 4).
8. **Stripe webhook handler must be idempotent.** Idempotent means "safe to run twice without breaking anything" - Stripe sometimes sends the same payment event more than once, and your handler must not double-charge or double-activate. Check `WHERE event_id = $1 AND processed = true` before re-running the update. (See production hardening section of [hire-track reference](/course/tech-for-non-technical-founders-2026/hire-track-supplementary-reference/#production-hardening-checklist-what-your-fractional-cto-will-look-for) for details.)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🗄️ Data Integrity & Integration | 🟠 Major | 🏗️ Heavy lift

Make webhook idempotency atomic.

WHERE event_id = $1 AND processed = true is not a safe idempotency implementation: concurrent deliveries can both pass the check, and an unprocessed row can be handled repeatedly. Store event IDs under a unique constraint and atomically claim the event before applying the subscription update.

Suggested guidance
- Check `WHERE event_id = $1 AND processed = true` before re-running the update.
+ Insert the event ID into a table with `UNIQUE(event_id)` inside the same transaction.
+ Process the event only when the insert succeeds; treat a uniqueness conflict as a duplicate.
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
8. **Stripe webhook handler must be idempotent.** Idempotent means "safe to run twice without breaking anything" - Stripe sometimes sends the same payment event more than once, and your handler must not double-charge or double-activate. Check `WHERE event_id = $1 AND processed = true` before re-running the update. (See production hardening section of [hire-track reference](/course/tech-for-non-technical-founders-2026/hire-track-supplementary-reference/#production-hardening-checklist-what-your-fractional-cto-will-look-for) for details.)
8. **Stripe webhook handler must be idempotent.** Idempotent means "safe to run twice without breaking anything" - Stripe sometimes sends the same payment event more than once, and your handler must not double-charge or double-activate. Insert the event ID into a table with `UNIQUE(event_id)` inside the same transaction. Process the event only when the insert succeeds; treat a uniqueness conflict as a duplicate. (See production hardening section of [hire-track reference](/course/tech-for-non-technical-founders-2026/hire-track-supplementary-reference/#production-hardening-checklist-what-your-fractional-cto-will-look-for) for details.)
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@content/course/tech-for-non-technical-founders-2026/self-serve-mvp-stack-lovable-supabase-stripe-2026/index.md`
at line 171, Update the “Stripe webhook handler must be idempotent” guidance to
require an events table with a unique constraint on event IDs and an atomic
insert-or-claim operation, such as INSERT ... ON CONFLICT handling, before
applying subscription updates. Ensure only the delivery that successfully claims
the event proceeds, while duplicates and already-claimed events exit without
repeating the update; remove the unsafe processed-flag check as the primary
mechanism.

Comment on lines +382 to +384
- **Watch for the architectural ceiling**: when any of the [5 ceiling signals](/course/tech-for-non-technical-founders-2026/should-you-hire-2026-decision-tree/) appears (covered in detail in Chapter 4.5), pause feature work and route to the [Fractional CTO bridge](/course/tech-for-non-technical-founders-2026/hire-track-supplementary-reference/#the-fractional-cto-bridge). The shed does not collapse overnight, but you stop adding load once you see the signal.

If you want the doctrine in long form, [Chapter 4.3a](/course/tech-for-non-technical-founders-2026/self-serve-mvp-stack-lovable-supabase-stripe-2026/) walks through what each tool does, the role boundaries, the cost reality, and the architectural ceiling preview.
If you want the doctrine in long form, [Chapter 4.3](/course/tech-for-non-technical-founders-2026/self-serve-mvp-stack-lovable-supabase-stripe-2026/) walks through what each tool does, the role boundaries, the cost reality, and the architectural ceiling preview.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟠 Major | 🏗️ Heavy lift

Align the ceiling threshold and destination link.

This paragraph routes on any signal and links [5 ceiling signals] to the 4.1 hiring decision tree. The build-phases guidance uses 2+ signals and links to the dedicated 4.5 ceiling-signals page (self-serve-mvp-stack-build-phases/index.md, Line 191). Align both the trigger and URL to avoid premature escalation and misrouting.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@content/course/tech-for-non-technical-founders-2026/self-serve-stack-walkthrough/index.md`
around lines 382 - 384, Update the architectural-ceiling guidance paragraph to
trigger escalation only when 2 or more ceiling signals appear, and change the “5
ceiling signals” link to the dedicated self-serve MVP stack build-phases
ceiling-signals page. Use the surrounding “architectural ceiling” guidance as
the edit target and preserve the Fractional CTO bridge destination.

Comment on lines +119 to +120
Start(["Default: self-serve.<br/>Five questions test it."])
Start --> Q1["Q1: Problem validated?<br/>10+ calls, 7+ signals, smoke test 6%+"]

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟠 Major | 🏗️ Heavy lift

Keep the Mermaid gate consistent with the Q1 definition.

The diagram accepts 10+ calls, 7+ signals, smoke test 6%+, but the later Q1 rule at Line 156 also requires the Chapter 2.6 prototype test with 4 of 5 testers reaching the right screen. As written, following the diagram can route an insufficiently validated founder into self-serve. Add the prototype criterion to Q1 or remove it from the later rule.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@content/course/tech-for-non-technical-founders-2026/should-you-hire-2026-decision-tree/index.md`
around lines 119 - 120, Update the Mermaid diagram’s Q1 definition in Start -->
Q1 to match the later Q1 rule, adding the Chapter 2.6 prototype criterion
requiring 4 of 5 testers to reach the right screen; keep the validation criteria
consistent across both locations.

Paul Keen and others added 2 commits July 10, 2026 07:33
…ount decoupling

r3 landing cold-eyes (no blockers): M3/M4/M5 cards now carry the same
'See it in action' walkthrough links as M1/M2 - the Mia through-line no
longer disappears at the payoff modules; the 6-artifacts sentence no
longer equates the count with the five You-leave-with lines.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GYRU9wGepomJo5hSuqtu7V
Blockers: garbled edit-merge sentence in 4.5's scoreboard step ('Score
green when the symptoms are firing...') repaired; 5.1's two out-of-6
verdict tables gave opposite answers at 2/6 and 4/6 - intro block
conformed to the conservative special-case bands (0-2 NO / 3-4 MAYBE /
5+ STRONG YES).
Also: 4.2 Item #7 explanation no longer folds into the Good-example
blockquote; 4.5's orphaned 'Both' regained its either/or antecedent;
5.7's mermaid + TL;DR yield claims aligned with the body funnel (1-4
replies, ~one pilot per batch); ICANN gloss now cites the real 5-day/
60-day windows; onramp-phase account attribution fixed in 4.4; 5.6
sector fee bands annotated as procurement-capped.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GYRU9wGepomJo5hSuqtu7V
@pftg pftg merged commit ec03460 into master Jul 10, 2026
3 checks passed
@pftg pftg deleted the modules-4-5-v2 branch July 10, 2026 11:43
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