fix(course): ICP journey fixes - branch-aware nav, legacy-page rewrites, citations, covers (40.17)#354
Conversation
… orientation (40.17 P1 #1-2) - course-prev-next partial: sequence entries may declare 'branches' (2.4 run-interviews loop, 2.5 build/pivot/kill gate, 5.1 core-vs- optional) so the strip never contradicts the footer routing - frontmatter fallback (course_nav_prev/next) puts the strip on the 5 Mia walkthroughs + vibe-prd-template; M5 walkthrough now exits to the landing Going-further section instead of dead-ending - glossary utility link under every strip (glossary was reachable from one landing card only) - landing orientation line ranked: Ch0 first, quickstart as the time-poor alternative Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GYRU9wGepomJo5hSuqtu7V
… stack-walkthrough pace (40.17 P1 #4-5) build-path-decision-worksheet: - Q1 gate now matches 4.1 canon (M1-M2 evidence; pre-orders explicitly deferred to Module 5) - no more false 'not ready' bounce - route ghosts 6A/6B/5.2/Module-2-retake replaced with real slugs - Q2 jargon translated to Sam-answerable plain English self-serve-stack-walkthrough: - reframed from 4-week full-time to session-based with the 10-week evenings pace as primary (matches 4.4 + Mia canon) - webhook debugging is Dashboard-first; Stripe CLI demoted to optional branch (keeps 4.3's no-terminal promise) - 2 dead docs.stripe.com URLs replaced with verified 200s +9 ratchet signatures for the removed defects Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GYRU9wGepomJo5hSuqtu7V
…t (40.17 P1 #3/6, P2 #7/11-14, P3 #15-17/20) Citations (all replacements curl-verified 200): - 30 dead external links replaced across 18 files (Steve Blank, Lenny, YC Library, First Round, SaaStr, Stripe docs, Vanta, ICANN, Snyk, Veracode, Octoverse, ProfitWell->Paddle, Bolster, Wes Kao, Pragmatic Engineer, latent.space, Simon Willison; 2 archive.org snapshots for JTBD sources); dead gocofound.com removed entirely (DNS gone) - fabricated '47% of all merged PRs' Octoverse stat corrected to the sourced ~46%-of-code-by-Copilot-users figure Journey fixes: - 5.6 footer now declares the core course COMPLETE and routes finishers to Going-further (graduation was stranded on optional 5.7) - H2 subheadings added to 1.2-1.5 (four ~1,000-word walls, zero headings); glossary grammar bug + softened rescue lede; glossary and FAQ forward CTAs; validation-tools-field-guide linked from 1.1 - 2.4 research-panel cost explained ($0 default vs paid shortcut) - glosses at first mention: ICP/SOW (4.1), IP/DBA (4.2), Calendly (5.4), Apollo/Sales Navigator (5.7), CSV/CRM (3.2), SKU (churn), Cursor (vibe-prd-template); 4.3 'Modules 1-4' slip + prototype-reuse repetition trimmed; quickstart fear anchor $10K+ -> $30K+ - 5.3 network-buckets.svg stale '8.1' -> '5.1'; friday-demo-template demo credential un-mailto'd; churn/pivot 'X of N' denominators dropped; hire-track named consistently +30 ratchet signatures for the removed defects Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GYRU9wGepomJo5hSuqtu7V
…7 P2 #8-9) Wrong-promise badges fixed: 2.4 (Clay+Lindy/$200-500 -> Gmail+list/$0 panels optional), 4.1 (Keep/Rebuild rescue tree -> 4 build paths, 30min -> 14min), 4.5 (Module 4B -> OPTIONAL Next 5.1), ownership-checklist (Hostage list -> 12-row ownership audit), outreach-sequence-template (Clay+Lindy -> Gmail+NeetoCal+Reddit), 1.1 (TIME 90 min -> EXERCISE 90 min vs the 6-min-read byline) Cover reuse killed: distinct covers for 5.4 (message variants + Loom) and 5.5 (reply tracker) - both previously byte-identical to 5.3's; new Going-Further covers for churn (leaky bucket) and pivot (decision ledger) - both previously reusing 5.1's Sean Ellis gauge Stale metadata aligned: 4.1 + 2.4 cover_image_alt describe the new art; churn og_title old-spine '7.5 ·' prefix dropped Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GYRU9wGepomJo5hSuqtu7V
…aims + worksheet signal attribution Diff-regression reviewer verified the fixes against their cited sources: - 'Snyk reproduction confirmed rate had not improved' - not in the cited article; now states the supported ~1-in-5 hallucination rate - ToxicSkills 13.4% re-stamped to the real frame (534 ClawHub skills, Feb 2026) and the fabricated June-Sept-vs-Q1 trajectory dropped - fabricated '12 codebases with hallucinated requestz' replaced with the article's real huggingface-cli 30k-download datapoint - worksheet Good-example 8% now attributed to email sign-ups (the 1.4 'Promising' band), not the 1.5 Buy-button price test +3 ratchet signatures Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GYRU9wGepomJo5hSuqtu7V
…complete 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: 30 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 ignored due to path filters (2)
📒 Files selected for processing (18)
📝 WalkthroughWalkthroughThe course gains branch-aware navigation, fallback navigation metadata, revised decision-path guidance, a session-based self-serve walkthrough, reorganized lesson sections, updated references, and expanded banned-string regression coverage. ChangesCourse navigation and decision paths
Lesson and reference updates
Estimated code review effort: 4 (Complex) | ~60 minutes Sequence Diagram(s)sequenceDiagram
participant Learner
participant CoursePage
participant NavigationTemplate
participant CourseSequence
Learner->>CoursePage: open course chapter
CoursePage->>NavigationTemplate: render current page navigation
NavigationTemplate->>CourseSequence: resolve slug and outcome branches
CourseSequence-->>NavigationTemplate: return next, previous, or branch destinations
NavigationTemplate-->>Learner: display course links and routing options
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: 16
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (4)
content/course/tech-for-non-technical-founders-2026/self-serve-stack-walkthrough/index.md (4)
366-372: 🔒 Security & Privacy | 🔴 Critical | 🏗️ Heavy liftPrevent clients from writing
subscription_status.
content/course/tech-for-non-technical-founders-2026/self-serve-stack-walkthrough/index.md:445-446still lets an authenticated user update their owncoachesrow, sosubscription_statuscan be set from the client unless billing state is moved to a server-only table or writes to that column are blocked server-side. RLS only limits which rows are updateable; it does not protect individual columns.🤖 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 366 - 372, Update the self-serve stack guidance around the authenticated user update policy for the coaches table so clients cannot write subscription_status. Block that column explicitly in server-side database permissions or move billing state to a server-only table, while preserving allowed client updates to other coaches fields and ensuring only trusted webhook/server logic can set subscription_status.Source: MCP tools
209-215: 🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick winAlign the Stripe price with the $1 flow. Phase 3 creates a $29/month Price ID, but the rest of the walkthrough expects a $1 charge. Add a dedicated $1 test/live price and use that Price ID, or change the Phase 3 instructions and checklist to $29 so Checkout doesn’t charge the wrong amount.
🤖 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 209 - 215, Align the Stripe price configured in Session 1 with the amount used throughout the walkthrough: either create and reference a dedicated $1 test/live Price ID, or update the Phase 3 instructions and checklist to consistently use $29. Ensure the Checkout configuration and documented expectations use the same price.Source: MCP tools
224-228: 🔒 Security & Privacy | 🟠 Major | ⚡ Quick winDerive the coach from auth, not the browser payload.
create-checkoutshould read the authenticated user from the Supabase JWT and map that to the coach server-side; don’t acceptcoachIdfromsupabase.functions.invoke(...). Also allowlist thepriceIdin the function before creating the Stripe session.🤖 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 224 - 228, Update the /upgrade flow and create-checkout function so coachId is not sent from the browser; derive the authenticated user from the Supabase JWT and resolve the corresponding coach server-side. Validate priceId against an explicit allowlist before calling stripe.checkout.sessions.create(), while preserving the existing checkout redirect behavior and staging success/cancel URLs.Source: MCP tools
168-178: 🔒 Security & Privacy | 🟠 Major | ⚡ Quick winAdd an INSERT policy for
coaches.The later SQL only defines
select/updatepolicies oncoaches, but Session 3 inserts a new coach row aftersupabase.auth.signUp(). With RLS on, that write will fail unless it uses a privileged path or you add a matchingfor insertpolicy.🤖 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 168 - 178, Add an explicit INSERT policy for the coaches table in the RLS setup described in Session 2, allowing the authenticated signup flow in Session 3 to create its coach row. Align the policy with the existing coaches ownership rules and ensure it is included alongside the other coaches policies.Source: MCP tools
🤖 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/_index.md`:
- Line 44: Update the orientation text in the course index so “Chapter 1.1”
links directly to the same chapter URL used by the FAQ reference, preserving the
surrounding wording and existing links.
In
`@content/course/tech-for-non-technical-founders-2026/agency-uses-ai-follow-up-questions/index.md`:
- Line 183: Update the Veracode GenAI Code Security Report citation text to
replace “shipped” with “tested” or “generated,” accurately describing the
report’s measured code samples without implying production deployment.
In
`@content/course/tech-for-non-technical-founders-2026/build-path-decision-worksheet/index.md`:
- Around line 68-82: Align the smoke-test metric used by the worksheet’s YES
criteria with the “Good” example: ensure both refer to the same tracked event
and threshold, or explicitly define how the 8% email-sign-up rate satisfies the
6%+ fake-“Buy” click requirement. Update the related content at both referenced
sections consistently.
- Around line 189-195: The Q5 decision flow and verdict table currently assign
overlapping and incomplete conditions to Path 2. Define one authoritative set of
mutually exclusive rules covering Q2, budget, and Q5, then update the decision
flow near the Path 2/Path 3 branches and the verdict table around the referenced
rows so every answer combination reaches exactly one path and the required Q5
answer is collected before branching.
In
`@content/course/tech-for-non-technical-founders-2026/friday-demo-template/index.md`:
- Line 84: Replace the realistic credentials in the Friday demo template example
with unmistakably fake placeholders, using an invalid-domain email and clearly
synthetic password while preserving the surrounding login instruction.
In
`@content/course/tech-for-non-technical-founders-2026/github-aws-database-ownership-checklist/index.md`:
- Line 97: Update the domain-transfer paragraph and both ICANN policy links to
use the current 2024 policy page. Revise the timing sentence around the domain
transfer guidance to distinguish the five-day AuthInfo-code or lock-removal
requirement, the separate five-day registry NACK response window, and the
conditional 60-day post-registration or transfer lock, avoiding the generic
five-day approval-window claim.
In
`@content/course/tech-for-non-technical-founders-2026/hire-track-supplementary-reference/index.md`:
- Around line 104-107: Update the section heading in the supplementary hiring
reference to say “Six platforms ranked” instead of “Seven platforms ranked,”
keeping the surrounding platform list and content unchanged.
In
`@content/course/tech-for-non-technical-founders-2026/self-serve-stack-walkthrough/index.md`:
- Line 262: Update the troubleshooting guidance around the Stripe webhook
debugging prompt to prohibit sharing full payment payloads or Edge Function code
with external AI tools. Instruct users to redact PII, secrets, keys, metadata,
and internal URLs, and share only minimal sanitized excerpts while preserving
the existing debugging intent.
- Around line 230-234: Update the stripe-webhook setup instructions to disable
Supabase JWT verification for this function and require Stripe-Signature
validation using the raw request body and configured webhook secret before
processing events. Ensure the handler rejects missing or invalid signatures and
only updates subscription status after verification.
- Around line 230-234: Align the Stripe lifecycle documentation between Session
3 and the checklist around the supported events: either add handlers for
customer.subscription.updated, customer.subscription.deleted, and
invoice.payment_failed using the persisted Stripe customer mapping, or remove
those events from the checklist so it only promises checkout.session.completed.
- Around line 291-293: Update the “Session 4 - watch the analytics” section to
separate analytics/conversion tracking from session replay: either limit
Plausible guidance to analytics and conversion events, or explicitly identify
PostHog as the replay tool before discussing session recordings and user
behavior.
- Line 264: Update the idempotency guidance around the webhook handler to use an
atomic Stripe event ledger: enforce a unique constraint on the event ID and
atomically insert or claim the event before executing side effects. Remove the
race-prone WHERE event_id = $1 AND processed = true pre-check, and return 200
without reprocessing when the event was already claimed.
In
`@content/course/tech-for-non-technical-founders-2026/slopsquatting-ai-supply-chain-attack/index.md`:
- Around line 135-143: Remove the unsupported “including hallucinated
dependencies” wording and the three production-incident bullets from the
threat-data section. Retain the supported Snyk statistic and its citation, and
keep the surrounding discussion intact unless separate sources explicitly
verifying each claim are added.
In
`@content/course/tech-for-non-technical-founders-2026/vibe-prd-template/index.md`:
- Line 49: Update the introductory blurb in the course template to remove the
extra “from,” so it says the deliverable can ship on Tuesday morning.
In
`@content/course/tech-for-non-technical-founders-2026/where-to-hire-developer-2026-map/index.md`:
- Around line 75-80: Update the platform-count references near the “seven-row
list” and “The 7 platforms ranked” text to reflect the page’s six listed
platforms, ensuring all reader guidance consistently says six rather than seven.
In
`@docs/projects/2605-tech-for-non-technical-founders/40-49-review/40.17-icp-customer-journey-live-walk-2026-07-11.md`:
- Line 137: Correct the typo “repaced” in the Wave 2 status entry, replacing it
with “re-paced” or “replanned” while preserving the rest of the sentence.
---
Outside diff comments:
In
`@content/course/tech-for-non-technical-founders-2026/self-serve-stack-walkthrough/index.md`:
- Around line 366-372: Update the self-serve stack guidance around the
authenticated user update policy for the coaches table so clients cannot write
subscription_status. Block that column explicitly in server-side database
permissions or move billing state to a server-only table, while preserving
allowed client updates to other coaches fields and ensuring only trusted
webhook/server logic can set subscription_status.
- Around line 209-215: Align the Stripe price configured in Session 1 with the
amount used throughout the walkthrough: either create and reference a dedicated
$1 test/live Price ID, or update the Phase 3 instructions and checklist to
consistently use $29. Ensure the Checkout configuration and documented
expectations use the same price.
- Around line 224-228: Update the /upgrade flow and create-checkout function so
coachId is not sent from the browser; derive the authenticated user from the
Supabase JWT and resolve the corresponding coach server-side. Validate priceId
against an explicit allowlist before calling stripe.checkout.sessions.create(),
while preserving the existing checkout redirect behavior and staging
success/cancel URLs.
- Around line 168-178: Add an explicit INSERT policy for the coaches table in
the RLS setup described in Session 2, allowing the authenticated signup flow in
Session 3 to create its coach row. Align the policy with the existing coaches
ownership rules and ensure it is included alongside the other coaches policies.
🪄 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: 80ae6272-596a-4749-9709-5a13a2511c7a
⛔ Files ignored due to path filters (11)
content/course/tech-for-non-technical-founders-2026/customers-leaving-churn-triage-not-acquisition/cover.pngis excluded by!**/*.pngcontent/course/tech-for-non-technical-founders-2026/find-10-people-with-problem-outreach-2026/cover.pngis excluded by!**/*.pngcontent/course/tech-for-non-technical-founders-2026/first-ten-customers-network-list/network-buckets.svgis excluded by!**/*.svgcontent/course/tech-for-non-technical-founders-2026/first-ten-customers-outreach-message/cover.pngis excluded by!**/*.pngcontent/course/tech-for-non-technical-founders-2026/first-ten-customers-send-track/cover.pngis excluded by!**/*.pngcontent/course/tech-for-non-technical-founders-2026/form-your-founding-hypothesis-90-minute-sprint/cover.pngis excluded by!**/*.pngcontent/course/tech-for-non-technical-founders-2026/outreach-sequence-template/cover.pngis excluded by!**/*.pngcontent/course/tech-for-non-technical-founders-2026/ownership-checklist/cover.pngis excluded by!**/*.pngcontent/course/tech-for-non-technical-founders-2026/pivot-or-persevere-decision-framework/cover.pngis excluded by!**/*.pngcontent/course/tech-for-non-technical-founders-2026/should-you-hire-2026-decision-tree/cover.pngis excluded by!**/*.pngcontent/course/tech-for-non-technical-founders-2026/vibe-coding-ceiling-signals/cover.pngis excluded by!**/*.png
📒 Files selected for processing (44)
content/course/tech-for-non-technical-founders-2026/_index.mdcontent/course/tech-for-non-technical-founders-2026/agency-uses-ai-follow-up-questions/index.mdcontent/course/tech-for-non-technical-founders-2026/ai-token-bill-dev-shop-pass-through-cost/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/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-with-problem-outreach-2026/index.mdcontent/course/tech-for-non-technical-founders-2026/first-ten-customers-outreach-message/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/friday-demo-template/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/module-1-walkthrough-mia/index.mdcontent/course/tech-for-non-technical-founders-2026/module-2-walkthrough-mia/index.mdcontent/course/tech-for-non-technical-founders-2026/module-3-walkthrough-mia/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/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/price-hypothesis-on-smoke-test-page/index.mdcontent/course/tech-for-non-technical-founders-2026/quickstart/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/slopsquatting-ai-supply-chain-attack/index.mdcontent/course/tech-for-non-technical-founders-2026/smoke-test-build-page/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/smoke-test-wire-tracking/index.mdcontent/course/tech-for-non-technical-founders-2026/stop-specifying-features-start-outcomes/index.mdcontent/course/tech-for-non-technical-founders-2026/vibe-coding-ceiling-signals/index.mdcontent/course/tech-for-non-technical-founders-2026/vibe-prd-template/index.mdcontent/course/tech-for-non-technical-founders-2026/weekly-dev-report-template-founders/index.mdcontent/course/tech-for-non-technical-founders-2026/where-to-hire-developer-2026-map/index.mddata/course_banned_strings.yamldata/course_sequence.yamldocs/projects/2605-tech-for-non-technical-founders/40-49-review/40.17-icp-customer-journey-live-walk-2026-07-11.mddocs/projects/2605-tech-for-non-technical-founders/TASK-TRACKER.mdthemes/beaver/assets/css/single-post.cssthemes/beaver/layouts/partials/blog/course-prev-next.html
| > Bad: "I will send you a Loom of it after the demo." | ||
| > | ||
| > Good: "staging.acme.app/dashboard. Login: founder@test.com / demo1234." | ||
| > Good: "staging.acme.app/dashboard. Login: `founder@test.com / demo1234`." |
There was a problem hiding this comment.
🔒 Security & Privacy | 🟡 Minor | ⚡ Quick win
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
set -euo pipefail
printf '\n-- target file excerpt --\n'
sed -n '1,140p' content/course/tech-for-non-technical-founders-2026/friday-demo-template/index.md | cat -n
printf '\n-- search for demo credentials / placeholders in nearby course content --\n'
rg -n --hidden --glob 'content/course/tech-for-non-technical-founders-2026/**/*.md' \
'founder@test\.com|demo1234|staging\.acme\.app|fake|placeholder|demo' \
content/course/tech-for-non-technical-founders-2026Repository: jetthoughts/jetthoughts.github.io
Length of output: 50389
🏁 Script executed:
#!/bin/bash
set -euo pipefail
# Find the repo file list and locate likely related templates.
git ls-files 'content/course/tech-for-non-technical-founders-2026/**' | sed -n '1,200p'
printf '\n-- exact file context --\n'
cat -n content/course/tech-for-non-technical-founders-2026/friday-demo-template/index.md | sed -n '70,95p'Repository: jetthoughts/jetthoughts.github.io
Length of output: 16471
🏁 Script executed:
#!/bin/bash
set -euo pipefail
printf '\n-- weekly-dev-report-template-founders context --\n'
sed -n '56,120p' content/course/tech-for-non-technical-founders-2026/weekly-dev-report-template-founders/index.md | cat -n
printf '\n-- three-questions-turn-standup-into-proof context --\n'
sed -n '60,80p' content/course/tech-for-non-technical-founders-2026/three-questions-turn-standup-into-proof/index.md | cat -nRepository: jetthoughts/jetthoughts.github.io
Length of output: 10754
Use an obviously fake login here. founder@test.com / demo1234 looks like a real credential pair; replace it with an unmistakably synthetic placeholder such as demo@example.invalid / example-password.
🤖 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/friday-demo-template/index.md`
at line 84, Replace the realistic credentials in the Friday demo template
example with unmistakably fake placeholders, using an invalid-domain email and
clearly synthetic password while preserving the surrounding login instruction.
…m anchor-text class Premium bar (user-reported): raw course paths as visible anchor text replaced with named anchors (2.1 Mom Test script, 4.2 ownership checklist); class ratchet-banned CodeRabbit review comments (all 15 verified and addressed): - worksheet: Q1 metric un-conflated (Promising band = 1.4 email sign-ups, not the 1.5 Buy button); verdict table aligned with the authoritative Q1-Q5 flow (Path 2/3/4 conditions now partition every answer combination) - stack-walkthrough: verify_jwt-off + Stripe-Signature verification step added (deliveries 401 otherwise); AI-paste debugging now says redact PII/secrets; idempotency upgraded to atomic unique-constraint event ledger; Stripe checklist scoped to the one wired event; PostHog/Plausible replay capability untangled - slopsquatting: three unsupported production-incident bullets removed (cited article covers a different attack); further-reading annotation neutralized - 4.2: current ICANN Transfer Policy URL + precise code-release/ transfer-release/60-day-lock timing - counts: 'Seven platforms ranked' / 'The 7 platforms ranked' / 'seven-row list' -> six after gocofound removal - demo credential founder@test.com/demo1234 -> demo@example.com everywhere (incl. 2 SVGs); landing 'Chapter 1.1' now a link; Veracode 'shipped' -> 'tested samples'; vibe-prd 'ship from on' grammar; 40.17 typo +11 ratchet signatures Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GYRU9wGepomJo5hSuqtu7V
|
All 15 CodeRabbit comments verified against the code and addressed in ad03ba9 (none were stale):
Each fixed string is added to the banned-strings ratchet in the same commit (+11 signatures). Validators 8/8, build green, test:critical 46/46. 🤖 Generated with Claude Code |
…ernal pilot + funnel instrumentation Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GYRU9wGepomJo5hSuqtu7V
…ASCII cards + print polish - worksheet Q2/Q4 code blocks showed raw '[hire-track reference](/course/...)' markdown (links can't render inside pre; the Q2 line also overran the card edge) - now plain text pointing at the verdict table's real links; defect was live on the web page too (introduced in PR #354) - worksheet prose metric aligned: '8% smoke-test click rate' -> 'sign-up rate' (matches the corrected Q1/Good-example metric) - print CSS hides the self-referential 'Prefer paper? Download the PDF' line on paper (p:has(a[data-course-event=pdf-download])) - all 5 PDFs regenerated and re-inspected Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GYRU9wGepomJo5hSuqtu7V
…y polish, printable PDFs (#356) * feat(course): Sprint A - funnel instrumentation + Clarity hook + pilot kit revival + dynamic footer year - GA4 course events via data-course-event attrs + delegated listener partial: start-course/quickstart (landing hero), branch-click (2.4/ 2.5/5.1 gate cards, from→to label), glossary-click, pdf-download - Microsoft Clarity template hook gated on microsoftClarity param (inert until the project ID is set - Paul action recorded in 40.18) - external validation pilot kit revived as 40.18 (deferral conditions met); revival-status section lists what's live + remaining actions - footer © year now dynamic (now.Year); dead copyright param removed Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GYRU9wGepomJo5hSuqtu7V * fix(course): Sprint B media/typography - TL;DR accent, de-stacks, M1 visuals, 5.7 mermaid - render-blockquote hook adds .bq-tldr to TL;DR callouts; purple accent gives the lesson-head stack visual hierarchy (verified: 1 per lesson, other blockquotes untouched) - outreach-sequence-template: Day-3 bump variants merged into one blockquote (adjacent-box count now 0) - 4.3: $0 Concierge MVP callout de-stacked to neutral prose (decision criterion leads, trade-off stated); 5.7: $0-stack callout de-stacked into the pipeline section as an equal free-vs-paid tooling choice - 1.5: off-style flow SVG rebuilt as 'same button, two framings' using the lesson's own copy; 1.3: GA4 sublabel factual fix; 1.2 anatomy SVG already correct (kept) - 5.7 stages mermaid TB→LR (was a ~1,200px vertical wall) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GYRU9wGepomJo5hSuqtu7V * feat(course): Sprint B covers - 5 walkthrough heroes + artifact-trail SVGs + 21 stale badges fixed - each Mia walkthrough gets a family-style hero cover (story-thread motif, per-module artifact terminal) + an inline artifact-trail SVG mapping that module's lesson outputs + cover/og frontmatter - the most-linked pages in the course are no longer pure text walls - 21 companion covers carried the retired 'Curriculum NN/30' counter (incl. the ICP-flagged glossary '08/30'); pill now reads 'Curriculum 2026' with title/chips/motif preserved pixel-for-pixel - 6 companions verified already-clean and skipped Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GYRU9wGepomJo5hSuqtu7V * feat(course): Sprint C - printable PDF thin slice (5 worksheets + pipeline) - bin/generate-template-pdfs: headless-Chrome print-to-PDF over the built pages (own temp profile; slug list at top; regenerate when the 5 source pages change - markdown stays the single source) - @media print block in single-post.css: hides site chrome/nav strip, black-on-white, break-inside guards for tables/pre/blockquotes - 5 print-verified PDFs shipped as bundle resources with a 'Prefer paper? Download the PDF' line (data-course-event= pdf-download feeds the GA4 funnel): build-path worksheet, Mom Test script, ownership checklist, validated problem statement, operating kit (DPA) - landing 'Free templates' section stays down per the 2026-05-21 deal until the full set exists; the other 9 gate on pilot download demand Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GYRU9wGepomJo5hSuqtu7V * fix(course): 5.7 cadence mermaid - bump diagram fontSize for the LR layout Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GYRU9wGepomJo5hSuqtu7V * docs(course): review notes on blockquote hook + tracker sprint log Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GYRU9wGepomJo5hSuqtu7V * fix(course): PDF visual review round - literal markdown in worksheet ASCII cards + print polish - worksheet Q2/Q4 code blocks showed raw '[hire-track reference](/course/...)' markdown (links can't render inside pre; the Q2 line also overran the card edge) - now plain text pointing at the verdict table's real links; defect was live on the web page too (introduced in PR #354) - worksheet prose metric aligned: '8% smoke-test click rate' -> 'sign-up rate' (matches the corrected Q1/Good-example metric) - print CSS hides the self-referential 'Prefer paper? Download the PDF' line on paper (p:has(a[data-course-event=pdf-download])) - all 5 PDFs regenerated and re-inspected Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GYRU9wGepomJo5hSuqtu7V * fix(course): PDF cold-eyes round 1 + user-reported pivot-wheel overlap + gate hardening - pivot-wheel.svg: 'Customer Need' card was drawn over the subtitle (user-reported); wheel now sits in a translated group below the text - operating-kit: old-spine ghosts purged - '7.1-7.4' TOC renumbered to 5.1-5.7, 'walks five chapters'/'runs in four chapters' contradiction fixed, 7th component reframed as a bonus so 'The 6 components' holds, 'lead magnet' marketing jargon dropped - kit-sample-row.svg: font stack's terminal 'cursive' fell back to a glyph-dropping system font in headless print (gibberish table on paper) - stack now falls back to sans-serif - worksheet failure-mode '0 of 35 click' -> 30 (list canon); validated- problem 90-min block vs 30-min write reconciled - visual-scroll-gate.md: mandatory asset-level SVG raster pass + no-MCP headless-Chrome fallback documented (sampling pages missed 13 defective SVGs that a full asset sweep found) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GYRU9wGepomJo5hSuqtu7V * fix(course): exhaustive visual sweep - 13 SVG geometry fixes + 5.1 callout de-stack (all 43 SVGs + all 61 pages inspected) Asset-level sweep (every course SVG rasterized + eyeballed) found 13 defective SVGs the page-sampling reviews had missed: - overlapping text layers (catching-the-lie URL labels over step labels; ph-vs-ih bar drawn over its own caption; shed-house-skyscraper caption collision producing garbled '$10-25K/m6OC2') - edge clipping (decision-matrix 3 quadrants; channel-icp-matrix callout overflowing both sides; demo-rule 'tripe sandbo' pill + credential crossing the panel divider; pivot-ledger 'core') - elements through text (sean-ellis-gauge arrow, segment-isolation ellipse, airbnb-test border, feature-vs-outcome border, vibe-prd-template underline, admin-panel-spaceship truncation) - stale old-spine refs INSIDE pivot-ledger art ('Chapter 2.3/7.5', 'Module 5A/6B' -> current canon) Page-level sweep (all 61 pages, 332 scroll views): clean except 5.1's mid-body triple callout stack (the 40.16 carry-forward) - re-run cadence now prose, sample-size honesty + under-10 rules merged into one callout. The alias-page 'directory index' finding was a file:// artifact - production alias redirect verified correct. All 5 PDFs regenerated (operating-kit table now prints real glyphs). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GYRU9wGepomJo5hSuqtu7V * fix(course): visual sweep round 2/3 residuals - matrix stale labels, shed label, kit row spacing - decision-matrix.svg: 'Module 3A/3B' old-spine ghosts -> 'Ch 4.3-4.4' / 'hire track' (matches pivot-ledger canon) - shed-house-skyscraper.svg: '2 ceiling signals fire' label crossed the house wall; shortened + repositioned into the clear gap - kit-sample-row.svg: 'Maybe - May 9' overran into the next column (read as '9F/u' in print); now 'Maybe · 5/9' - operating-kit PDF regenerated; all re-rasters eyeballed clean Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GYRU9wGepomJo5hSuqtu7V * chore: gitignore claude-flow init scaffolding (skills/helpers/generated agents) ruflo v3.25.6 'init --preset full' generates 96 local-tooling files under .claude/ - following the existing precedent that claude-flow artifacts (.claude-flow/, .mcp.json, binaries) stay untracked. Hand-authored agents elsewhere under .claude/ remain tracked. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GYRU9wGepomJo5hSuqtu7V * fix(course): premium swarm review - 8-dimension pass over all 61 pages + surgical fix waves (40.19) 6-reviewer swarm scored every page x 8 dimensions (text, voice, structure, engagement, visual, typography, media, navigation) from sources + all 331 fresh scroll views. 54/60 PREMIUM outright; every sub-premium finding fixed: P1: three-questions Friday-demo anchors pointed at the dev-shop blog checklist - repointed to the course template P2: churn 'Modules 6.1-6.5' ghost; channel-selection '4 channels' vs 5-row table (EaM demoted to a fifth-play note); operating-kit intro honesty; 5.6 false 'expandable rows' meta-narration deleted; slopsquatting CI gate unified at 20-line (was 3 vs 30; actual ~20) + 'Your founder' POV; 4.1 matrix SVG conflicting timelines; friday- demo cadence mermaid LR->TD (was an unreadable band); pivot trigger tree -> 5-row decision table (compressed-mermaid attempt was an illegible micro-strip; prose already carries detail); 3 covers 'WEEKS 4 to ship' -> '4-10' (pace canon) + matching alt texts; agency page title dedup; ai-token-bill mermaid house theme; weekly-dev-report editorial footer note stripped; alias added for the deleted first-ten-customers-personal-network slug P3: grammar (three-questions), Ch0 duplicated gate sentence, price-tag sweep (4 pages per the sub-$100-tool voice rule), engineering-org- chart closing line, 'co flow' -> 'checkout flow' Mia number-chain verified contradiction-free across all 5 walkthroughs. Deliberate non-fixes recorded in 40.19 SS3 so future passes don't re-litigate. Report: 40.19. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GYRU9wGepomJo5hSuqtu7V * fix(course): reflection round on the premium review - patterns behind single findings (40.19 §5) Coordinator self-audit of the review triage; every gap fixed: - old-spine ghost titles: FOUR Going-Further pages carried 'Module 6' prefixes (6.2-6.5) - prem-3 flagged one as 'confirm intentional'; all stripped from titles + og_titles - internal 'Module N AI critic/simulator block' labels: prem-6 found one; three more existed (2.2/4.3/5.2) - all retitled Sam-facing - missed P2: org-chart staircase mermaid scaled to micro-text -> 6-row decision table + flags rule (the pivot pattern; sequential- checklist mermaids now convert to tables) - Good/Bad worked-example callouts render green/red via the blockquote hook (8+ pages); fixing it exposed a cascade bug - the brand blockquote border-left overpainted ALL accent classes incl. TL;DR; accents now set border-left-color instead of a competing box-shadow - 2.2 redundant 4th head callout merged into the Progress line (skip guidance was stated twice); 2.6 triple callout stack merged to two - continuation chapters (churn, pivot) get the nav strip + glossary via course_nav frontmatter - the CORE-vs-continuation inconsistency prem-4 flagged - stack-walkthrough Phase 3 opens with 'the AI writes it, you paste it' reassurance for the no-code ICP; Keyworddit 'Free tool' tag cut - gate doc: raw headless --window-size is NOT mobile emulation (fake right-edge clipping on every page) - MCP resize required for mobile Gates: validators 8/8, build, test:critical, bin/test AND bin/dtest all green (0 diffs). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GYRU9wGepomJo5hSuqtu7V --------- Co-authored-by: Paul Keen <pftg@Mac.fritz.box> Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Summary
Executes the full improvement plan from the ICP customer-journey audit (40.17): 6 audit agents walked all 44 journey pages in a browser as "Sam" and found the journey breaks at the navigation layer and two legacy companion pages - this PR fixes all P1s, the P2 trust surface, and the P3 polish in six commits.
Per-commit
course_sequence.yamlentries can declarebranches; the strip now shows the real routing at 2.4 (run-your-interviews loop), 2.5 (build/pivot/kill gate), 5.1 (core vs optional) instead of a wrong linear Next. Frontmatter nav puts the strip on the 5 Mia walkthroughs + vibe-prd-template; the M5 walkthrough (most-linked dead end) now exits to Going-further. Glossary utility link under every strip; landing orientation ranked.+43 banned-string ratchet signatures across the sprint (every fixed defect is regression-guarded).
Test evidence
bin/validate-course: 8/8 validators green on every commitbin/rake test:critical: 46 runs, 0 failuresbin/test(macOS): 46 runs, 0 failures, 84 screenshots, no diffsbin/dtest(Linux/Docker): 46 runs, 0 failures, 84 screenshots, no diffs🤖 Generated with Claude Code
https://claude.ai/code/session_01GYRU9wGepomJo5hSuqtu7V
Summary by CodeRabbit