feat(course): Modules 4+5 v2 - full course now on the v2 template (swarm + 2 cold-eyes rounds)#353
Conversation
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
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GYRU9wGepomJo5hSuqtu7V
|
Warning Review limit reached
Next review available in: 56 minutes Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available. How can I continue?After more reviews become available, a review can be triggered using the 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 configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (6)
📝 WalkthroughWalkthroughModules 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. ChangesCourse sequencing and overview
Module 4 lessons and walkthrough
Module 5 lessons and walkthrough
Cross-references and release validation
Estimated code review effort: 4 (Complex) | ~60 minutes Possibly related PRs
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
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. Comment |
There was a problem hiding this comment.
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 winUpdate 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 winClarify 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 winDo 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 winMake the “Going Further” destinations actionable.
Go to the rescue chapters Going Furtheris 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 winUpdate 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,600and synchronize the repeated budget statement insmoke-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 winKeep 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 winPoint 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 winKeep 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 winKeep 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 winKeep 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 winKeep 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 winKeep 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 winKeep 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 winKeep 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 winRestore 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 winRemove 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 winSource 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 winMark 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 winClarify 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 winFix the blank line inside the blockquote.
markdownlintreports 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 winFix the blank lines inside blockquotes.
markdownlintreports 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 winFix the blank lines inside blockquotes.
markdownlintreports 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 winLink 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
⛔ Files ignored due to path filters (1)
content/course/tech-for-non-technical-founders-2026/pivot-or-persevere-decision-framework/pivot-ledger.svgis excluded by!**/*.svg
📒 Files selected for processing (39)
content/course/tech-for-non-technical-founders-2026/_index.mdcontent/course/tech-for-non-technical-founders-2026/build-path-decision-worksheet/index.mdcontent/course/tech-for-non-technical-founders-2026/channel-selection-before-outbound/index.mdcontent/course/tech-for-non-technical-founders-2026/clickable-prototype-validation-2-hour-lovable/index.mdcontent/course/tech-for-non-technical-founders-2026/customers-leaving-churn-triage-not-acquisition/index.mdcontent/course/tech-for-non-technical-founders-2026/faq/index.mdcontent/course/tech-for-non-technical-founders-2026/find-10-people-where-to-look/index.mdcontent/course/tech-for-non-technical-founders-2026/find-10-people-with-problem-outreach-2026/index.mdcontent/course/tech-for-non-technical-founders-2026/first-paying-customer-operating-kit/index.mdcontent/course/tech-for-non-technical-founders-2026/first-ten-customers-network-list/index.mdcontent/course/tech-for-non-technical-founders-2026/first-ten-customers-outreach-message/index.mdcontent/course/tech-for-non-technical-founders-2026/first-ten-customers-send-track/index.mdcontent/course/tech-for-non-technical-founders-2026/five-tech-words-stop-nodding-at/index.mdcontent/course/tech-for-non-technical-founders-2026/form-your-founding-hypothesis-90-minute-sprint/index.mdcontent/course/tech-for-non-technical-founders-2026/github-aws-database-ownership-checklist/index.mdcontent/course/tech-for-non-technical-founders-2026/hire-track-supplementary-reference/index.mdcontent/course/tech-for-non-technical-founders-2026/how-this-course-works/index.mdcontent/course/tech-for-non-technical-founders-2026/module-4-walkthrough-mia/index.mdcontent/course/tech-for-non-technical-founders-2026/module-5-walkthrough-mia/index.mdcontent/course/tech-for-non-technical-founders-2026/must-have-segment-pmf-test/index.mdcontent/course/tech-for-non-technical-founders-2026/one-page-product-brief-vibe-prd/index.mdcontent/course/tech-for-non-technical-founders-2026/outbound-without-sales-team/index.mdcontent/course/tech-for-non-technical-founders-2026/paid-pilot-charge-before-ship/index.mdcontent/course/tech-for-non-technical-founders-2026/pivot-or-persevere-decision-framework/index.mdcontent/course/tech-for-non-technical-founders-2026/quickstart/index.mdcontent/course/tech-for-non-technical-founders-2026/reference/smoke-test-channel-guide/index.mdcontent/course/tech-for-non-technical-founders-2026/self-serve-mvp-stack-build-phases/index.mdcontent/course/tech-for-non-technical-founders-2026/self-serve-mvp-stack-lovable-supabase-stripe-2026/index.mdcontent/course/tech-for-non-technical-founders-2026/self-serve-stack-walkthrough/index.mdcontent/course/tech-for-non-technical-founders-2026/should-you-hire-2026-decision-tree/index.mdcontent/course/tech-for-non-technical-founders-2026/smoke-test-landing-page-7-day-demand-test/index.mdcontent/course/tech-for-non-technical-founders-2026/stop-specifying-features-start-outcomes/index.mdcontent/course/tech-for-non-technical-founders-2026/validation-tools-field-guide/index.mdcontent/course/tech-for-non-technical-founders-2026/vibe-coding-ceiling-signals/index.mddata/course_banned_strings.yamldata/course_sequence.yamldocs/projects/2605-tech-for-non-technical-founders/40-49-review/40.16-m4-m5-release-gate-2026-07-10.mddocs/projects/2605-tech-for-non-technical-founders/PROJECT-INDEX.mddocs/projects/2605-tech-for-non-technical-founders/TASK-TRACKER.md
| 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] |
There was a problem hiding this comment.
🎯 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. |
There was a problem hiding this comment.
🔒 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. |
There was a problem hiding this comment.
🎯 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. |
There was a problem hiding this comment.
🔒 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.) |
There was a problem hiding this comment.
🗄️ 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.
| 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.
| - **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. |
There was a problem hiding this comment.
🎯 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.
| Start(["Default: self-serve.<br/>Five questions test it."]) | ||
| Start --> Q1["Q1: Problem validated?<br/>10+ calls, 7+ signals, smoke test 6%+"] |
There was a problem hiding this comment.
🎯 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.
…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
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
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.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.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)
a7c6ade0,2546a884). Three reviewers independently caught the same blocker: Mia's deposit was below the course's own $500 floor.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.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
bin/rake test:critical: 46 runs / 84 screenshots, clean ×3 runsFull 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