fix(course): P0 cleanup — Mermaid fence, tweet leak, broken slugs, landing dedup#344
fix(course): P0 cleanup — Mermaid fence, tweet leak, broken slugs, landing dedup#344pftg wants to merge 9 commits into
Conversation
… course infra Sprint 1 deliverables (3 chapters of the 26-post course): - Module 0.1 - Where Are You? + Self-Assessment Worksheet artifact - Module 1.1 - Find 10 People with the Problem (2026 outreach stack) + Outreach Sequence Template - Module 1.2 - The Mom Test + Mom Test Interview Script Course infrastructure: - Stub landing page at /blog/tech-for-non-technical-founders-2026/ (build-in-public mode) - 8 artifacts moved from docs/.../lead-magnets/ to public Hugo URLs at /blog/<slug>/ - Strategy + execution scaffolding under docs/projects/2605-tech-for-non-technical-founders/ Team-mode pipeline that ran: - Writer (general-purpose agent) -> mechanical gates -> voice critic + cold-eyes verifier (parallel where independent) -> editor revisions where needed -> ship - WIP=1 sequential discipline maintained across all 3 Sprint 1 chunks Doctrine in scope (memory feedbacks): - Pure lead magnet (zero JT service CTAs; authorship credit only) - Viral shareability (contrarian hook + tweetable insight + weekly tactic + artifact) - KISS - simplest method on main path; frameworks in Advanced sidebars only - Course-as-journey (input/output/checkpoint/artifact per module) - No length caps; cut test per section - >=3 handmade infographics per post (Mermaid + sketchy SVG mix) - Rails / Django / Laravel default tech stack; no React/Node/Java as lead Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…page module-first framing
S2.1 deliverable:
- /blog/validated-problem-statement-decide-whats-next/ (Module 1.3 post)
- /blog/validated-problem-statement-template/ (companion artifact, public URL)
- 2 inline SVGs + 1 Mermaid diagram
Hook archetype rotated to Reddit-poster (per hook-bank diversity rule applied after S1.3 cold-eyes review flagged "founder we picked up" pattern saturation). 0 em-dashes, 0 banned words, 0 JT service CTAs.
Landing page restructured per user directive (2026-07-22):
- Removed public post-count framing ("X of 26 posts") - too granular for ICP
- Module table now shows status (Complete / Partial / Coming) + approx reading time per module
- ICP cares about modules + time, not chapter-by-chapter granularity
Module 1 is now complete (3 of 3 chapters live: outreach + Mom Test + validated problem statement).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…Module 2 complete)
Sprint 2 deliverables (3 chapters):
- Module 1.3 "Write Down What You Heard, Decide What's Next" + Validated Problem Statement Template artifact
- Module 2.2 "The One-Page Product Brief (Vibe PRD)" + Vibe PRD Template artifact
- Module 2.3 "Stop Specifying Features. Start Specifying Outcomes." (no artifact - inline tactic, KISS doctrine: job-story framework name stays in citations only)
After Sprint 2:
- Module 1 (Validate the Problem) is COMPLETE - 3 of 3 chapters live
- Module 2 (Design the Solution) is COMPLETE - 3 of 3 chapters live
- Reader can now go idea -> validated problem -> Product Brief without external resources
Hook-bank diversity enforced per S1.3 cold-eyes flag:
- S2.1 Reddit-poster archetype
- S2.2 News-pegged ($1,000 Maven cohort vs free)
- S2.3 Direct address ("You asked for a simple admin panel. You got a spaceship.")
- Zero "founder we picked up" leads in Sprint 2
Landing page updated per ICP feedback (2026-07-22):
- Module-first framing (no post counts to readers)
- Reading time per module + status (Complete/Partial/Coming)
All gates clean: 0 em-dashes, 0 banned words, 0 JT service CTAs across all 3 new posts + 2 new artifacts.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…r S2.3 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…th complete) Sprint 3 deliverables (4 chapters + 2 artifacts): - Module 3.1 "Should You Hire? The 2026 Decision Tree" + Build Path Decision Worksheet - Module 3.2 "The Fractional CTO Bridge" (no separate artifact) - Module 4A.1 "The Self-Serve MVP Stack: Lovable + Supabase + Stripe" + Self-Serve Stack Walkthrough - Module 4A.2 "Vibe Coding Done Right: 5 Ceiling Signals" (no separate artifact) After Sprint 3: - Modules 0-3 + 4A all COMPLETE - Self-serve path is shippable end-to-end: idea -> validated problem -> Vibe PRD -> outcome spec -> build decision -> live MVP -> when-to-graduate signal - Reader who chose self-serve in Module 3 now has a complete free path through to a paying-customer-ready product Hook archetype rotation continued (no "founder we picked up" / Reddit / news-pegged saturation): - S3.1 honest-qualifier raw stat - S3.2 product-tour Calendly reveal - S3.3 interview transcript snippet - S3.4 scene-painting present-tense All gates clean: 0 em-dashes, 0 banned words, 0 JT service CTAs, 0 React/Node/Java as lead stack across all 4 posts + 2 artifacts. Landing page updated: 5 modules now complete, status reads "self-serve path shippable end-to-end." Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…2605 curriculum drafted
Sprint 4 deliverables (2 chapters + 2 artifacts):
- Module 4B.1 "Who You're Hiring in 2026 and Where to Find Them" + Where-to-Hire Map artifact
- Module 4B.2 "The Hiring Interview That Catches AI Theater" + Hiring Interview Script artifact
After Sprint 4: ALL 12 net-new chapters of the 2605 curriculum are drafted and shipped.
Total course state:
- Module 0: complete (1/1)
- Module 1: complete (3/3)
- Module 2: complete (3/3)
- Module 3: complete (2/2)
- Module 4A: complete (2/2) - self-serve path shippable end-to-end
- Module 4B: 3 of 4 chapters (4B.1 + 4B.2 + 4B.4 SOW; 4B.3 wraps NEW-L pending 2510)
- Module 5: 2 of 6 chapters drafted (Org Chart + Standup Questions); 4 wraps pending 2510
- Module 6: 2 wraps pending 2510
- Module 7: 3 wraps pending 2510
Total: 16 chapters live + 10 wraps pending 2510 LinkedIn validation completion.
Hook archetype rotation across Sprint 4:
- S4.1: Contrarian thesis with data point ("The Stanford CS grad is no longer the right hire...")
- S4.2: Dialogue snippet from anonymized interview ("'I use AI to ship 3x faster.' Every candidate said it...")
Both chapters reference the existing /blog/agency-ai-five-questions/ artifact (which becomes dual-purpose: vendor screening AND hiring interview); the Module 4B.2 7-question script EXTENDS the agency 5-question script with 2 new individual-hire-specific questions (Q6 refactor judgment, Q7 PR disagreement with AI suggestion).
All gates clean: 0 em-dashes, 0 banned words, 0 JT service CTAs, 0 React/Node/Java as lead stack across all 2 posts + 2 artifacts.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…to-end Sprint 5 deliverables - 10 wrap chapters drafted in 2 parallel waves: Wave 1 (Module 4B + 5): - 4B.3 cheap-developers-expensive-without-cto-review (3 traps: hourly-rate, working-student, no Fractional CTO) - 5.2 friday-demo-rule-founder-progress (companion to /blog/friday-demo-template/) - 5.4 weekly-dev-report-template-founders (5-section template, no separate artifact) - 5.5 github-aws-database-ownership-checklist (companion to /blog/ownership-checklist/) - 5.6 asked-simple-admin-panel-built-spaceship (mid-sprint over-engineering audit) Wave 2 (Module 6 + 7): - 6.1 salvage-vs-rebuild-software-project (companion to /blog/salvage-vs-rebuild-decision-tree/) - 6.2 switch-dev-shops-safely-transition-guide (30-day playbook + investor-legend trick) - 7.1 agency-uses-ai-follow-up-questions (companion to /blog/agency-ai-five-questions/) - 7.2 ai-token-bill-dev-shop-pass-through-cost (predictive math + 3 SOW clauses) - 7.3 slopsquatting-ai-supply-chain-attack (FINAL chapter - closes Module 7 + closes the course) After Sprint 5: ALL 26 CHAPTERS LIVE. 8 modules complete: - Module 0: Where Are You? (1/1) - Module 1: Validate the Problem (3/3) - Module 2: Design the Solution (3/3) - Module 3: Choose Your Build Path (2/2) - Module 4A: Ship Self-Serve (2/2) - Module 4B: Hire & Ship (4/4) - Module 5: Manage Your Build (6/6) - Module 6: When Things Break (2/2) - Module 7: Manage AI-Era Risks (3/3) 11 downloadable artifacts at /blog/<slug>/ public URLs. Hook archetype rotation maintained across all 26 chapters - no "founder we picked up in QX 20XX..." lead saturation. Each Wave 1 + Wave 2 chapter used a fresh archetype: open-with-cost-reveal, open-with-question/personal-realization, two-screenshots-side-by-side, news-headline+paradox combo, Reddit-poster, etc. All gates clean across all 10 new posts: 0 em-dashes, 0 banned words, 0 JT service CTAs, 0 React/Node/Java as lead stack. Each chapter has top callout + 9-row Continue-the-course nav + authorship footer + >=3 handmade infographics (Mermaid + sketchy SVG). Landing page updated: all 8 modules now show Complete; status reads "All 26 chapters live - the course is complete end-to-end." Tasks closed: #16 (wrap-post curriculum-frame headers) - delivered as part of each wrap-post draft via the standard course-frame template; #29 (Sprint 5 dispatch). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…nding dedup
Four small but blocking issues found by the post-publish course audit:
- weekly-dev-report-template-founders: wrap %%{init: directive in
```mermaid``` fence so the timing-cadence diagram renders instead of
shipping as raw text in the body
- hiring-interview-catches-ai-theater: strip "(276 chars)" annotation
that leaked from the LinkedIn-tweet drafting step
- asked-simple-admin-panel-built-spaceship: replace 3 references to
/blog/the-friday-demo-rule/ and /blog/who-owns-your-github-aws-database/
with the slugs that actually exist
(/blog/friday-demo-rule-founder-progress/ and
/blog/github-aws-database-ownership-checklist/)
- tech-for-non-technical-founders-2026 (landing): remove the duplicate
Module 5 block and the stale "What's coming next" / "Where to start"
text from when the course was still being built sprint-by-sprint;
the live "Where to start" routing now points at currently-shipped
modules
Audit also flagged 22 "broken" external links and 21 "unfenced
Mermaid" blocks across other chapters — both turned out to be false
positives from a naive grep that matched the /blog/... path inside
full external URLs (Veracode, Snyk, DataToBiz) and matched
%%{init lines that were already inside ```mermaid``` fences. Real
broken-link count: 4 (all in asked-simple-admin, fixed here). Real
unfenced-Mermaid count: 1 (weekly-dev-report, fixed here).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
📝 WalkthroughWalkthroughAdds a comprehensive 2026 curriculum: course index, routing, 7 modules of posts/templates, operational audits, hiring guides, rescue playbooks, AI-risk controls, supporting research docs, and a CLAUDE.md self-critique policy update. ChangesTech for Non-Technical Founders 2026 Curriculum Launch
Estimated code review effort🎯 4 (Complex) | ⏱️ ~60 minutes Possibly related PRs
Poem
✨ Finishing Touches🧪 Generate unit tests (beta)
|
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.
🟡 Minor comments (15)
CLAUDE.md-105-105 (1)
105-105:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winBreak line into multiple lines to comply with 80-character limit.
Line 105 is approximately 600+ characters long, violating the 80-character line limit specified in the coding guidelines for Markdown files. This impacts readability and maintainability.
As per coding guidelines: "Each line in documentation: max 80 characters"
📏 Proposed fix to reformat within 80-character limit
-- **Mandatory self-critique on voice-sensitive content (BLOCKING)**: For any draft or revision of LinkedIn posts, blog posts, or marketing copy, invoke `reflexion-reflect` (Standard Path) BEFORE first handback. After user pushback on the same draft, escalate to `reflexion-critique` (multi-judge debate) per the LinkedIn pipeline §3 / blog pipeline equivalent. Solo iteration past first delivery consistently misses pattern-level tells (over-narration, cinematic beat-marking, shape-coded copywriting) — observed on the 2026-05-11 Monday Jira-not-progress post (5 user corrections after the AI rubric scored 0/10). +- **Mandatory self-critique on voice-sensitive content (BLOCKING)**: For any + draft or revision of LinkedIn posts, blog posts, or marketing copy, invoke + `reflexion-reflect` (Standard Path) BEFORE first handback. After user + pushback on the same draft, escalate to `reflexion-critique` (multi-judge + debate) per the LinkedIn pipeline §3 / blog pipeline equivalent. Solo + iteration past first delivery consistently misses pattern-level tells + (over-narration, cinematic beat-marking, shape-coded copywriting) — + observed on the 2026-05-11 Monday Jira-not-progress post (5 user + corrections after the AI rubric scored 0/10).🤖 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 `@CLAUDE.md` at line 105, The long Markdown sentence starting with "**Mandatory self-critique on voice-sensitive content (BLOCKING)**" must be wrapped to obey the 80-character per-line rule; break the single 600+ character line into multiple lines (soft-wrap paragraphs) so each line is <=80 chars, keeping intact the key phrases "reflexion-reflect", "reflexion-critique", "LinkedIn pipeline §3", and the example note about the 2026-05-11 post; ensure punctuation and parentheses remain correct and the paragraph reads naturally after wrapping.docs/projects/2605-tech-for-non-technical-founders/10-19-research/10.03-2026-ecosystem-research-ru-source.md-211-211 (1)
211-211:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winFix unpaired bracket in citation.
The citation at line 211 is incomplete with an unpaired opening bracket and appears to be truncated.
Proposed fix
Verify the complete citation. The current text reads:
49. The Honest Guide to Finding Good Bubble Help (Without Wasting, дата последнего обращения: мая 12, 2026, [...]This appears to be missing the closing text and bracket. Check the original source and complete the citation properly.
🤖 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/10-19-research/10.03-2026-ecosystem-research-ru-source.md` at line 211, The citation line starting with "49. The Honest Guide to Finding Good Bubble Help (Without Wasting" is missing its closing text and bracket; locate that exact line in the document and complete the citation by restoring the truncated text, adding the missing closing parenthesis/bracket and any missing URL or access-date text (e.g., complete the parentheses around the title and ensure the URL [https://coachingnocodeapps.com/how-to-find-a-bubble-developer] and "дата последнего обращения: мая 12, 2026" are properly enclosed), matching the format used by other citations in the file.docs/projects/2605-tech-for-non-technical-founders/10-19-research/10.01-course-program-landscape.md-18-18 (1)
18-18:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winCorrect the program count inconsistency.
The text states "15 programs catalogued" but the inventory table below lists 19 programs (numbered 1-19). Update the count to match the actual table.
Proposed fix
-15 programs catalogued. Stale or absent items left out rather than padded. +19 programs catalogued. Stale or absent items left out rather than padded.🤖 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/10-19-research/10.01-course-program-landscape.md` at line 18, Update the inconsistent program count by changing the header sentence "15 programs catalogued." to match the inventory table; either update that sentence to "19 programs catalogued." to reflect the table numbered 1–19, or if the table is wrong, remove the extra entries so it matches "15 programs catalogued." Locate the exact text "15 programs catalogued." in the file and make the count consistent with the items listed in the table.docs/projects/2605-tech-for-non-technical-founders/10-19-research/10.03-2026-ecosystem-research-ru-source.md-187-187 (1)
187-187:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winFix unpaired bracket in citation.
The citation at line 187 has an unpaired apostrophe that should be matched or removed.
Proposed fix
-25. Non-Technical Founder's Guide 2026 \- Chrono Innovation, дата последнего обращения: мая 12, 2026, [https://www.chronoinnovation.com/resources/non-technical-founder-guide-2026/](https://www.chronoinnovation.com/resources/non-technical-founder-guide-2026/) +25. Non-Technical Founder's Guide 2026 \- Chrono Innovation, дата последнего обращения: мая 12, 2026, [https://www.chronoinnovation.com/resources/non-technical-founder-guide-2026/](https://www.chronoinnovation.com/resources/non-technical-founder-guide-2026/)Note: The apostrophe character should be consistent with the rest of the document's formatting.
🤖 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/10-19-research/10.03-2026-ecosystem-research-ru-source.md` at line 187, The citation string "Non-Technical Founder's Guide 2026 \- Chrono Innovation, дата последнего обращения: мая 12, 2026, [https://www.chronoinnovation.com/resources/non-technical-founder-guide-2026/]" contains an unpaired apostrophe in "Founder's"; either escape or convert it to match document style (e.g., use Founder’s with a typographic apostrophe, or remove/replace with "Founders" if possessive isn't intended). Update the citation text (the line containing "Non-Technical Founder's Guide 2026") so the apostrophe is consistent with the rest of the document and properly paired or removed.content/blog/where-to-hire-developer-2026-map/index.md-168-168 (1)
168-168:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winFix the incorrect link to Module 4B.2.
The text references "the [Module 4B.2 hiring interview]" but the URL points to
/blog/who-where-hire-developer-2026-ai-augmented-offshore/, which is Module 4B.1 according to the course structure. The correct link should point to/blog/hiring-interview-catches-ai-theater/(the Module 4B.2 post in this same PR).🔗 Proposed fix
-- **Take the shortlist of 3-5 candidates to the [Module 4B.2 hiring interview](/blog/who-where-hire-developer-2026-ai-augmented-offshore/).** That post covers the deep-dive interview that catches AI theater. This map gets you to the shortlist; that post gets you to the hire. +- **Take the shortlist of 3-5 candidates to the [Module 4B.2 hiring interview](/blog/hiring-interview-catches-ai-theater/).** That post covers the deep-dive interview that catches AI theater. This map gets you to the shortlist; that post gets you to the hire.🤖 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/blog/where-to-hire-developer-2026-map/index.md` at line 168, Update the incorrect Module 4B.2 link in the sentence that currently links "/blog/who-where-hire-developer-2026-ai-augmented-offshore/" to instead point to the Module 4B.2 post "/blog/hiring-interview-catches-ai-theater/"; locate the markdown line containing the anchor text "Module 4B.2 hiring interview" in content/blog/where-to-hire-developer-2026-map/index.md and replace the URL while keeping the link text and surrounding sentence unchanged.content/blog/sow-reading-guide/index.md-49-49 (1)
49-49:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winNormalize US English spellings for consistency
Line 49 uses
chequeand Line 141 usesafterwards; for US English consistency, prefercheckandafterward.Suggested fix
-... means the SOW is a blank cheque. +... means the SOW is a blank check. -... the answers come back in writing afterwards. +... the answers come back in writing afterward.Also applies to: 141-141
🤖 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/blog/sow-reading-guide/index.md` at line 49, Replace British English spellings with US English in the document: change the word "cheque" (appearing in the sentence with "Scope to be defined sprint by sprint") to "check", and change "afterwards" (the occurrence noted on line 141) to "afterward" so the content consistently uses US English spellings.content/blog/switch-dev-shops-safely-transition-guide/index.md-166-166 (1)
166-166:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winRemove stale “publishes after Module 5 ships” note.
Line 166 is outdated for the current published curriculum and can send readers to
the wrong expectation about course availability.🤖 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/blog/switch-dev-shops-safely-transition-guide/index.md` at line 166, Remove the stale phrase "publishes after Module 5 ships" from the sentence in content/blog/switch-dev-shops-safely-transition-guide/index.md (the line that reads "The full course landing page (with all 11 artifacts) publishes after Module 5 ships. Until then, bookmark this post."); update the sentence to simply state that the full course landing page will be available or remove the parenthetical timing clause so it no longer references Module 5 shipping.content/blog/weekly-dev-report-template-founders/index.md-163-163 (1)
163-163:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winRemove stale rollout text that says the full landing page is not live yet.
Line 163 says the full landing page publishes after Module 5, which is now outdated
for the shipped curriculum and can misdirect readers.🤖 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/blog/weekly-dev-report-template-founders/index.md` at line 163, Remove the stale rollout sentence "The full course landing page (with all 11 artifacts) publishes after Module 5 ships. Until then, bookmark this post." from content/blog/weekly-dev-report-template-founders/index.md and either delete it or replace it with an updated line that reflects the current state (e.g., confirm the full landing page is live or provide the correct availability details) so the post no longer misdirects readers.content/blog/weekly-dev-report-template-founders/index.md-54-64 (1)
54-64:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winFix blockquote blank lines to satisfy markdownlint (MD028).
Lines 54-64 split one blockquote with blank lines, which triggers
no-blanks-blockquote.
This can fail markdown lint gates in CI.🤖 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/blog/weekly-dev-report-template-founders/index.md` around lines 54 - 64, The blockquote that begins with "**1. What shipped this week.**" contains blank lines inside the quoted section which triggers markdownlint MD028; fix it by collapsing the blockquote into a single contiguous quoted block (prefix every line in the block with ">" and remove the empty blank lines between list items), ensuring each of the numbered headings (1–5) and their content remain inside that single ">"-prefixed block and there are no bare blank lines breaking the quote.content/blog/reading-sow-clause-by-clause/index.md-103-103 (1)
103-103:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winUpdate stale course-state sentence in the module footer.
Line 103 still says the full landing page publishes after Module 5 ships. That
message is stale and should be removed/updated to reflect the live course state.🤖 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/blog/reading-sow-clause-by-clause/index.md` at line 103, In the module footer of the post, remove or update the stale sentence "The full course landing page (with all 11 artifacts) publishes after Module 5 ships." — search for that exact sentence in index.md (module footer section) and either delete it or replace it with the current course-state message (e.g., mark the full landing page as live or give accurate timing), and ensure no duplicate occurrences remain elsewhere in the document.content/blog/tech-for-non-technical-founders-2026/index.md-79-79 (1)
79-79:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winInconsistent completion status with artifact table.
Line 79 claims "🎉 All 8 modules complete" as of 2026-11-25, but line 156 in the artifacts table shows "AI Token Cost Worksheet" is still "🔲 Sprint 6" (not shipped).
Proposed fix
Either update line 79 to acknowledge the pending artifact:
-**Status (2026-11-25)**: 🎉 **All 8 modules complete.** The full course is shippable end-to-end. A non-technical founder can go from idea → validated problem → Vibe PRD → build decision → live MVP (self-serve OR hired) → weekly oversight rhythm → contingency plan if things break → AI-era risk system. 26 chapters · 11 artifacts · all free. +**Status (2026-11-25)**: 🎉 **All 8 modules complete.** The full course is shippable end-to-end. A non-technical founder can go from idea → validated problem → Vibe PRD → build decision → live MVP (self-serve OR hired) → weekly oversight rhythm → contingency plan if things break → AI-era risk system. 26 chapters · 10 artifacts shipped (1 pending Sprint 6) · all free.Or mark the artifact as shipped at line 156 if it's actually complete.
🤖 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/blog/tech-for-non-technical-founders-2026/index.md` at line 79, The status line "Status (2026-11-25): 🎉 **All 8 modules complete.**" conflicts with the artifacts table entry for "AI Token Cost Worksheet" which still shows "🔲 Sprint 6"; either change the status line text to reflect the pending artifact (e.g., remove "All 8 modules complete" or add a caveat) or update the artifacts table row for "AI Token Cost Worksheet" to a shipped state (replace "🔲 Sprint 6" with the shipped marker you use elsewhere). Locate the status sentence and the "AI Token Cost Worksheet" row in index.md and make the corresponding edit so they are consistent.content/blog/validated-problem-statement-template/index.md-153-156 (1)
153-156:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winCurrency symbol is inconsistent for the same example.
The anecdote uses
$1,500and then references£1,500as if it were the same value. Pick one currency to avoid reader confusion.🤖 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/blog/validated-problem-statement-template/index.md` around lines 153 - 156, The example mixes currency symbols for the same anecdote; pick one currency and make all amounts consistent (e.g., convert and replace "$1,500" → "£1,500" or vice versa) so the anecdote and averages read uniformly; update the occurrences of "$1,500" and "£1,500" (and confirm "£800" remains correct) in the text around "6 hours per week" so the single anecdote uses one currency symbol throughout.content/blog/validated-problem-statement-template/index.md-49-49 (1)
49-49:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winAdd a language tag to the fenced template block.
This unlabeled fence triggers MD040 and can break strict markdown linting in CI.
Suggested diff
-``` +```text ... -``` +```🤖 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/blog/validated-problem-statement-template/index.md` at line 49, The fenced code block that currently uses unlabeled backticks (``` ... ```) should include a language tag to satisfy markdown lint rule MD040; update the opening fence from ``` to ```text so the block becomes a labeled fenced block (i.e., change the opening fence token ` ``` ` to ` ```text ` and leave the closing ` ``` ` unchanged) to prevent CI lint failures.content/blog/build-path-decision-worksheet/index.md-47-47 (1)
47-47:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winSpecify a language for the fenced worksheet block.
This currently triggers MD040. Use
textfor this printable form block.Suggested diff
-``` +```text ... -``` +```🤖 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/blog/build-path-decision-worksheet/index.md` at line 47, The fenced worksheet code block is missing a language specifier and triggers MD040; update the opening fence for the printable worksheet from ``` to ```text so the block begins with ```text and keeps the closing fence as ``` to satisfy the linter and render as plain text; locate the fenced worksheet block (the triple-backtick block for the printable form) and add the language token "text" immediately after the opening backticks.content/blog/validated-problem-statement-decide-whats-next/index.md-59-59 (1)
59-59:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winFix the broken anchor link.
Line 59 references
#the-decision-build-pivot-kill, but the section header at line 74 "The decision: build / pivot / kill" will generate a slug with double dashes:#the-decision-build--pivot--kill(the space-slash-space sequence becomes--).Update the link to match the auto-generated slug.
🔗 Proposed fix
-Skip ahead to the [interview score-to-decision matrix](`#the-decision-build-pivot-kill`) below, which maps the count to the next action. +Skip ahead to the [interview score-to-decision matrix](`#the-decision-build--pivot--kill`) below, which maps the count to the next action.🤖 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/blog/validated-problem-statement-decide-whats-next/index.md` at line 59, The anchor link referencing "#the-decision-build-pivot-kill" is incorrect because the header "The decision: build / pivot / kill" generates a slug with double dashes; update the link in the sentence containing "interview score-to-decision matrix" to use the auto-generated slug "#the-decision-build--pivot--kill" so it matches the generated header ID and the anchor works correctly.
🧹 Nitpick comments (4)
docs/projects/2605-tech-for-non-technical-founders/10-19-research/10.02-curriculum-sequence-synthesis.md (2)
40-91: ⚡ Quick winAdd language specifier to fenced code block.
The ASCII art decision tree should have a language identifier for proper rendering and linting compliance. Use
```textor```plaintextfor ASCII diagrams.Proposed fix
-``` +```text ┌──────────────────────────────────────┐ │ STAGE 1: Should I hire at all? │🤖 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/10-19-research/10.02-curriculum-sequence-synthesis.md` around lines 40 - 91, The fenced ASCII-art decision tree block is missing a language specifier; update the opening fence for that diagram to use a plain text specifier (e.g., change the leading ``` to ```text or ```plaintext) so the ASCII diagram renders and lints correctly, leaving the diagram content and the closing ``` unchanged.
224-228: 💤 Low valueVary sentence structure in the confirmation checklist.
Four consecutive sentences begin with "Confirm," which creates repetitive reading. Consider varying the structure while maintaining the checklist format.
Proposed variation
1. **Confirm direction**: do we adopt the 5-pillar re-sequence (Self-Serve First → Hire Smart → Manage Well → When It Breaks → AI Era)? If yes, I'll update the curriculum docs in the next pass. 2. **Confirm positioning**: A, B, or C from the table above? -3. **Confirm scope**: 6 net-new posts for Pillars 1-2 (total curriculum ~20 posts), or tighter at 3-4 net-new (total ~17-18 posts)? -4. **Confirm existing posts stay**: I am not proposing to rewrite the 4 net-new posts or the 5 lead magnets already drafted. +3. **Decide scope**: 6 net-new posts for Pillars 1-2 (total curriculum ~20 posts), or tighter at 3-4 net-new (total ~17-18 posts)? +4. **Verify existing posts stay**: I am not proposing to rewrite the 4 net-new posts or the 5 lead magnets already drafted.🤖 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/10-19-research/10.02-curriculum-sequence-synthesis.md` around lines 224 - 228, The checklist has four consecutive lines starting with the word "Confirm" which reads repetitive; edit the five checklist items (the numbered lines 1–5) to vary sentence openings and cadence—e.g., change some "Confirm" lines into direct questions ("Do we adopt the 5‑pillar re-sequence?"), imperatives ("Adopt the 5‑pillar re-sequence and update curriculum docs"), or descriptive statements ("Scope options: 6 net‑new posts (≈20 total) or 3–4 net‑new (≈17–18 total)"), while preserving the meaning and checklist format and keeping the `← you are here` notation and lead‑magnet notes intact.content/blog/ai-token-bill-dev-shop-pass-through-cost/index.md (1)
84-97: ⚡ Quick winAdd the missing Mermaid theme initialization for visual consistency.
All other Mermaid diagrams in this course use a hand-drawn theme with the Caveat font and custom colors via the
%%{init:...}%%directive. This diagram is missing that initialization, so it will render with the default Mermaid theme instead of matching the course's visual style.🎨 Proposed fix for theme consistency
```mermaid +%%{init: {'theme':'base', 'themeVariables': {'fontFamily':'Caveat, Patrick Hand, cursive', 'primaryColor':'#fff5f5', 'primaryBorderColor':'#cc342d', 'lineColor':'#333', 'primaryTextColor':'#1a1a1a'}}}%% flowchart TD A[Sign SOW with the 3 clauses] --> B[Predict bill: devs x avg x margin]🤖 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/blog/ai-token-bill-dev-shop-pass-through-cost/index.md` around lines 84 - 97, The Mermaid flowchart block is missing the course's theme init directive; insert a Mermaid init line (%%{init: {...}}%%) immediately before the existing "flowchart TD" line in this diagram to set 'theme':'base' and the themeVariables (fontFamily including "Caveat", primaryColor, primaryBorderColor, lineColor, primaryTextColor) so it uses the hand-drawn Caveat font and the custom colors used across the course, ensuring visual consistency with the other diagrams.content/blog/outreach-sequence-template/index.md (1)
91-129: 💤 Low valueOptional: Clean up blockquote blank lines for markdown consistency.
The markdownlint tool flags blank lines inside blockquotes (MD028) at lines 105, 118, and 129. While this doesn't affect rendering, removing the blank lines between blockquote sections improves markdown consistency.
Optional fix
Remove blank lines between consecutive blockquotes (lines 105, 118, 129) or ensure all lines remain within a single blockquote context if they're meant to be part of the same email template.
🤖 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/blog/outreach-sequence-template/index.md` around lines 91 - 129, Remove the empty lines inside the blockquote sections for the three email templates ("Day 0 - intro", "Day 3 - bump", "Day 7 - close") so each blockquote is continuous (no blank lines between quoted lines), e.g., collapse the blank lines currently between the subject and body and between paragraphs within each blockquote so markdownlint MD028 is satisfied while preserving the exact text and line breaks of the subject/body content.
🤖 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/blog/build-path-decision-worksheet/index.md`:
- Around line 135-139: The verdict table contradicts Q4: Q4 defines "$5K-$30K ->
Path 3" and "$30K+ -> Path 4" but the table currently treats "$5K+" as Path 4;
update the verdict table entries to match Q4 by changing the "$5K+" row to two
ranges or explicit logic so that "$5K-$30K" maps to Path 3 (Fractional CTO) and
"$30K+" maps to Path 4 (Hire a team / Module 4B); apply the same correction to
the other occurrence referenced (the similar table rows later in the document).
- Around line 4-5: The frontmatter currently has "date: 2026-08-12" with "draft:
false", which is a future date and will be ignored by Hugo unless buildFuture is
enabled; either set the "date:" value to today or an earlier date (replace the
2026-08-12 value) so the page builds immediately, or if you intentionally want
scheduled publishing, leave the future date and add a clear inline frontmatter
comment (or note above the frontmatter) stating this expectation and ensure your
deployment config enables buildFuture when appropriate; update the "date:"
and/or add the explanatory comment near the "draft: false" line accordingly.
In `@content/blog/five-tech-words-stop-nodding-at/index.md`:
- Line 146: The rollout status sentence "The full course landing page (with all
11 artifacts) publishes after Module 5 ships." is stale; update or remove it in
the post so it reflects that Module 5 has already shipped and the curriculum is
live—either delete the sentence entirely or replace it with a current status
like "Module 5 has shipped and the full course landing page with all 11
artifacts is now live." Ensure the edited line matches the tone of the
surrounding copy.
- Around line 4-5: The post's frontmatter uses a future date (date: 2026-07-01)
which Hugo will skip unless buildFuture is enabled; either update the
frontmatter date to today or a past date (change the date field in index.md) or
enable future builds by setting buildFuture: true in your Hugo site config
(e.g., in config.toml/config.yaml) so Hugo includes future-dated posts; keep
draft: false if you want it published.
In `@content/blog/salvage-vs-rebuild-decision-tree/index.md`:
- Line 74: Replace the relative markdown link './ownership-checklist.md' used in
the text lines containing "run the [GitHub / AWS / database
checklist](./ownership-checklist.md)" with the canonical site slug
'/blog/ownership-checklist/' (update both occurrences at line 74 and line 108),
and verify the target slug exists by running ls
content/blog/ownership-checklist/index.md before committing; ensure the link
uses the absolute blog slug format exactly as '/blog/ownership-checklist/'.
In `@content/blog/sow-reading-guide/index.md`:
- Line 61: Replace relative .md links (e.g., "./friday-demo-template.md" and
other "./*.md" links in this document) with canonical blog slugs of the form
/blog/<slug>/ so they resolve to live routes; update the link targets in the
markdown where "./friday-demo-template.md" and the other relative .md links
appear, confirm the target post slugs match the actual blog post directories
before committing, and rerun the site link check to ensure no broken links
remain.
- Around line 4-5: The post frontmatter uses a future date (date: 2026-07-15)
which Hugo will exclude from builds unless buildFuture is enabled; either change
the frontmatter to a non-future date or set draft: true to prevent accidental
hiding, or keep the future date but add an explicit scheduled publish mechanism
(e.g., a CI workflow using a publishDate or similar) and ensure build flags
(buildFuture) are intentionally configured; update the frontmatter in
content/blog/sow-reading-guide/index.md (the date and draft fields) or
add/confirm the scheduled-publish workflow to make the intent explicit.
In `@content/blog/validated-problem-statement-template/index.md`:
- Around line 4-5: The frontmatter has a future date (date: 2026-07-22) with
draft: false which causes Hugo to exclude the post from production; fix by
either moving the date to a past value (update the frontmatter key date to a
past date) or set draft: true until you're ready to publish (toggle the
frontmatter key draft to true), then commit the change so Hugo will include or
intentionally hide the post as desired.
---
Minor comments:
In `@CLAUDE.md`:
- Line 105: The long Markdown sentence starting with "**Mandatory self-critique
on voice-sensitive content (BLOCKING)**" must be wrapped to obey the
80-character per-line rule; break the single 600+ character line into multiple
lines (soft-wrap paragraphs) so each line is <=80 chars, keeping intact the key
phrases "reflexion-reflect", "reflexion-critique", "LinkedIn pipeline §3", and
the example note about the 2026-05-11 post; ensure punctuation and parentheses
remain correct and the paragraph reads naturally after wrapping.
In `@content/blog/build-path-decision-worksheet/index.md`:
- Line 47: The fenced worksheet code block is missing a language specifier and
triggers MD040; update the opening fence for the printable worksheet from ``` to
```text so the block begins with ```text and keeps the closing fence as ``` to
satisfy the linter and render as plain text; locate the fenced worksheet block
(the triple-backtick block for the printable form) and add the language token
"text" immediately after the opening backticks.
In `@content/blog/reading-sow-clause-by-clause/index.md`:
- Line 103: In the module footer of the post, remove or update the stale
sentence "The full course landing page (with all 11 artifacts) publishes after
Module 5 ships." — search for that exact sentence in index.md (module footer
section) and either delete it or replace it with the current course-state
message (e.g., mark the full landing page as live or give accurate timing), and
ensure no duplicate occurrences remain elsewhere in the document.
In `@content/blog/sow-reading-guide/index.md`:
- Line 49: Replace British English spellings with US English in the document:
change the word "cheque" (appearing in the sentence with "Scope to be defined
sprint by sprint") to "check", and change "afterwards" (the occurrence noted on
line 141) to "afterward" so the content consistently uses US English spellings.
In `@content/blog/switch-dev-shops-safely-transition-guide/index.md`:
- Line 166: Remove the stale phrase "publishes after Module 5 ships" from the
sentence in content/blog/switch-dev-shops-safely-transition-guide/index.md (the
line that reads "The full course landing page (with all 11 artifacts) publishes
after Module 5 ships. Until then, bookmark this post."); update the sentence to
simply state that the full course landing page will be available or remove the
parenthetical timing clause so it no longer references Module 5 shipping.
In `@content/blog/tech-for-non-technical-founders-2026/index.md`:
- Line 79: The status line "Status (2026-11-25): 🎉 **All 8 modules complete.**"
conflicts with the artifacts table entry for "AI Token Cost Worksheet" which
still shows "🔲 Sprint 6"; either change the status line text to reflect the
pending artifact (e.g., remove "All 8 modules complete" or add a caveat) or
update the artifacts table row for "AI Token Cost Worksheet" to a shipped state
(replace "🔲 Sprint 6" with the shipped marker you use elsewhere). Locate the
status sentence and the "AI Token Cost Worksheet" row in index.md and make the
corresponding edit so they are consistent.
In `@content/blog/validated-problem-statement-decide-whats-next/index.md`:
- Line 59: The anchor link referencing "#the-decision-build-pivot-kill" is
incorrect because the header "The decision: build / pivot / kill" generates a
slug with double dashes; update the link in the sentence containing "interview
score-to-decision matrix" to use the auto-generated slug
"#the-decision-build--pivot--kill" so it matches the generated header ID and the
anchor works correctly.
In `@content/blog/validated-problem-statement-template/index.md`:
- Around line 153-156: The example mixes currency symbols for the same anecdote;
pick one currency and make all amounts consistent (e.g., convert and replace
"$1,500" → "£1,500" or vice versa) so the anecdote and averages read uniformly;
update the occurrences of "$1,500" and "£1,500" (and confirm "£800" remains
correct) in the text around "6 hours per week" so the single anecdote uses one
currency symbol throughout.
- Line 49: The fenced code block that currently uses unlabeled backticks (```
... ```) should include a language tag to satisfy markdown lint rule MD040;
update the opening fence from ``` to ```text so the block becomes a labeled
fenced block (i.e., change the opening fence token ` ``` ` to ` ```text ` and
leave the closing ` ``` ` unchanged) to prevent CI lint failures.
In `@content/blog/weekly-dev-report-template-founders/index.md`:
- Line 163: Remove the stale rollout sentence "The full course landing page
(with all 11 artifacts) publishes after Module 5 ships. Until then, bookmark
this post." from content/blog/weekly-dev-report-template-founders/index.md and
either delete it or replace it with an updated line that reflects the current
state (e.g., confirm the full landing page is live or provide the correct
availability details) so the post no longer misdirects readers.
- Around line 54-64: The blockquote that begins with "**1. What shipped this
week.**" contains blank lines inside the quoted section which triggers
markdownlint MD028; fix it by collapsing the blockquote into a single contiguous
quoted block (prefix every line in the block with ">" and remove the empty blank
lines between list items), ensuring each of the numbered headings (1–5) and
their content remain inside that single ">"-prefixed block and there are no bare
blank lines breaking the quote.
In `@content/blog/where-to-hire-developer-2026-map/index.md`:
- Line 168: Update the incorrect Module 4B.2 link in the sentence that currently
links "/blog/who-where-hire-developer-2026-ai-augmented-offshore/" to instead
point to the Module 4B.2 post "/blog/hiring-interview-catches-ai-theater/";
locate the markdown line containing the anchor text "Module 4B.2 hiring
interview" in content/blog/where-to-hire-developer-2026-map/index.md and replace
the URL while keeping the link text and surrounding sentence unchanged.
In
`@docs/projects/2605-tech-for-non-technical-founders/10-19-research/10.01-course-program-landscape.md`:
- Line 18: Update the inconsistent program count by changing the header sentence
"15 programs catalogued." to match the inventory table; either update that
sentence to "19 programs catalogued." to reflect the table numbered 1–19, or if
the table is wrong, remove the extra entries so it matches "15 programs
catalogued." Locate the exact text "15 programs catalogued." in the file and
make the count consistent with the items listed in the table.
In
`@docs/projects/2605-tech-for-non-technical-founders/10-19-research/10.03-2026-ecosystem-research-ru-source.md`:
- Line 211: The citation line starting with "49. The Honest Guide to Finding
Good Bubble Help (Without Wasting" is missing its closing text and bracket;
locate that exact line in the document and complete the citation by restoring
the truncated text, adding the missing closing parenthesis/bracket and any
missing URL or access-date text (e.g., complete the parentheses around the title
and ensure the URL
[https://coachingnocodeapps.com/how-to-find-a-bubble-developer] and "дата
последнего обращения: мая 12, 2026" are properly enclosed), matching the format
used by other citations in the file.
- Line 187: The citation string "Non-Technical Founder's Guide 2026 \- Chrono
Innovation, дата последнего обращения: мая 12, 2026,
[https://www.chronoinnovation.com/resources/non-technical-founder-guide-2026/]"
contains an unpaired apostrophe in "Founder's"; either escape or convert it to
match document style (e.g., use Founder’s with a typographic apostrophe, or
remove/replace with "Founders" if possessive isn't intended). Update the
citation text (the line containing "Non-Technical Founder's Guide 2026") so the
apostrophe is consistent with the rest of the document and properly paired or
removed.
---
Nitpick comments:
In `@content/blog/ai-token-bill-dev-shop-pass-through-cost/index.md`:
- Around line 84-97: The Mermaid flowchart block is missing the course's theme
init directive; insert a Mermaid init line (%%{init: {...}}%%) immediately
before the existing "flowchart TD" line in this diagram to set 'theme':'base'
and the themeVariables (fontFamily including "Caveat", primaryColor,
primaryBorderColor, lineColor, primaryTextColor) so it uses the hand-drawn
Caveat font and the custom colors used across the course, ensuring visual
consistency with the other diagrams.
In `@content/blog/outreach-sequence-template/index.md`:
- Around line 91-129: Remove the empty lines inside the blockquote sections for
the three email templates ("Day 0 - intro", "Day 3 - bump", "Day 7 - close") so
each blockquote is continuous (no blank lines between quoted lines), e.g.,
collapse the blank lines currently between the subject and body and between
paragraphs within each blockquote so markdownlint MD028 is satisfied while
preserving the exact text and line breaks of the subject/body content.
In
`@docs/projects/2605-tech-for-non-technical-founders/10-19-research/10.02-curriculum-sequence-synthesis.md`:
- Around line 40-91: The fenced ASCII-art decision tree block is missing a
language specifier; update the opening fence for that diagram to use a plain
text specifier (e.g., change the leading ``` to ```text or ```plaintext) so the
ASCII diagram renders and lints correctly, leaving the diagram content and the
closing ``` unchanged.
- Around line 224-228: The checklist has four consecutive lines starting with
the word "Confirm" which reads repetitive; edit the five checklist items (the
numbered lines 1–5) to vary sentence openings and cadence—e.g., change some
"Confirm" lines into direct questions ("Do we adopt the 5‑pillar re-sequence?"),
imperatives ("Adopt the 5‑pillar re-sequence and update curriculum docs"), or
descriptive statements ("Scope options: 6 net‑new posts (≈20 total) or 3–4
net‑new (≈17–18 total)"), while preserving the meaning and checklist format and
keeping the `← you are here` notation and lead‑magnet notes intact.
🪄 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: 0573a3d6-c880-48e0-8b21-5173a31c5376
⛔ Files ignored due to path filters (49)
content/blog/agency-uses-ai-follow-up-questions/scorecard-at-a-glance.svgis excluded by!**/*.svgcontent/blog/agency-uses-ai-follow-up-questions/theatre-vs-direction.svgis excluded by!**/*.svgcontent/blog/ai-token-bill-dev-shop-pass-through-cost/cost-stack-per-developer.svgis excluded by!**/*.svgcontent/blog/ai-token-bill-dev-shop-pass-through-cost/good-vs-bad-invoice.svgis excluded by!**/*.svgcontent/blog/asked-simple-admin-panel-built-spaceship/file-touch-heatmap.svgis excluded by!**/*.svgcontent/blog/asked-simple-admin-panel-built-spaceship/pr-comparison.svgis excluded by!**/*.svgcontent/blog/cheap-developers-expensive-without-cto-review/12-month-true-cost.svgis excluded by!**/*.svgcontent/blog/cheap-developers-expensive-without-cto-review/three-traps.svgis excluded by!**/*.svgcontent/blog/course-map-self-assessment-non-technical-founder-2026/founder-os-stack.svgis excluded by!**/*.svgcontent/blog/course-map-self-assessment-non-technical-founder-2026/module-map.svgis excluded by!**/*.svgcontent/blog/engineering-org-chart-non-technical-founder/reviewer-attention.svgis excluded by!**/*.svgcontent/blog/engineering-org-chart-non-technical-founder/team-comparison.svgis excluded by!**/*.svgcontent/blog/find-10-people-with-problem-outreach-2026/outreach-funnel.svgis excluded by!**/*.svgcontent/blog/find-10-people-with-problem-outreach-2026/sample-email-sequence.svgis excluded by!**/*.svgcontent/blog/five-tech-words-stop-nodding-at/architecture-comparison.svgis excluded by!**/*.svgcontent/blog/five-tech-words-stop-nodding-at/jargon-translator.svgis excluded by!**/*.svgcontent/blog/fractional-cto-bridge-5-hours-week/5-jobs-fractional-cto.svgis excluded by!**/*.svgcontent/blog/fractional-cto-bridge-5-hours-week/cofounder-vs-fractional.svgis excluded by!**/*.svgcontent/blog/friday-demo-rule-founder-progress/catching-the-lie.svgis excluded by!**/*.svgcontent/blog/friday-demo-rule-founder-progress/demo-rule.svgis excluded by!**/*.svgcontent/blog/github-aws-database-ownership-checklist/bad-vs-good-email.svgis excluded by!**/*.svgcontent/blog/github-aws-database-ownership-checklist/ownership-zones.svgis excluded by!**/*.svgcontent/blog/hiring-interview-catches-ai-theater/interview-scorecard.svgis excluded by!**/*.svgcontent/blog/hiring-interview-catches-ai-theater/theater-vs-direction.svgis excluded by!**/*.svgcontent/blog/mom-test-ask-about-past-not-future/good-vs-bad-answers.svgis excluded by!**/*.svgcontent/blog/mom-test-ask-about-past-not-future/mom-test-script.svgis excluded by!**/*.svgcontent/blog/one-page-product-brief-vibe-prd/good-vs-bad-prd.svgis excluded by!**/*.svgcontent/blog/one-page-product-brief-vibe-prd/vibe-prd-template-visual.svgis excluded by!**/*.svgcontent/blog/reading-sow-clause-by-clause/cover.pngis excluded by!**/*.pngcontent/blog/salvage-vs-rebuild-software-project/rebuild-trap.svgis excluded by!**/*.svgcontent/blog/salvage-vs-rebuild-software-project/three-verdicts.svgis excluded by!**/*.svgcontent/blog/self-serve-mvp-stack-lovable-supabase-stripe-2026/cost-breakdown.svgis excluded by!**/*.svgcontent/blog/self-serve-mvp-stack-lovable-supabase-stripe-2026/stack-diagram.svgis excluded by!**/*.svgcontent/blog/should-you-hire-2026-decision-tree/airbnb-test.svgis excluded by!**/*.svgcontent/blog/should-you-hire-2026-decision-tree/decision-matrix.svgis excluded by!**/*.svgcontent/blog/slopsquatting-ai-supply-chain-attack/attack-chain.svgis excluded by!**/*.svgcontent/blog/slopsquatting-ai-supply-chain-attack/hallucinated-vs-real.svgis excluded by!**/*.svgcontent/blog/stop-specifying-features-start-outcomes/admin-panel-spaceship.svgis excluded by!**/*.svgcontent/blog/stop-specifying-features-start-outcomes/feature-vs-outcome.svgis excluded by!**/*.svgcontent/blog/switch-dev-shops-safely-transition-guide/good-vs-bad-transition.svgis excluded by!**/*.svgcontent/blog/switch-dev-shops-safely-transition-guide/transition-timeline.svgis excluded by!**/*.svgcontent/blog/validated-problem-statement-decide-whats-next/problem-statement-template.svgis excluded by!**/*.svgcontent/blog/validated-problem-statement-decide-whats-next/score-matrix.svgis excluded by!**/*.svgcontent/blog/vibe-coding-ceiling-signals/shed-house-skyscraper.svgis excluded by!**/*.svgcontent/blog/vibe-coding-ceiling-signals/signals-scoreboard.svgis excluded by!**/*.svgcontent/blog/weekly-dev-report-template-founders/five-sections.svgis excluded by!**/*.svgcontent/blog/weekly-dev-report-template-founders/report-comparison.svgis excluded by!**/*.svgcontent/blog/who-where-hire-developer-2026-ai-augmented-offshore/ai-augmented-dev-profile.svgis excluded by!**/*.svgcontent/blog/who-where-hire-developer-2026-ai-augmented-offshore/geography-map.svgis excluded by!**/*.svg
📒 Files selected for processing (61)
CLAUDE.mdcontent/blog/agency-ai-five-questions/index.mdcontent/blog/agency-uses-ai-follow-up-questions/index.mdcontent/blog/ai-token-bill-dev-shop-pass-through-cost/index.mdcontent/blog/asked-simple-admin-panel-built-spaceship/index.mdcontent/blog/build-path-decision-worksheet/index.mdcontent/blog/cheap-developers-expensive-without-cto-review/index.mdcontent/blog/course-map-self-assessment-non-technical-founder-2026/index.mdcontent/blog/engineering-org-chart-non-technical-founder/index.mdcontent/blog/find-10-people-with-problem-outreach-2026/index.mdcontent/blog/five-tech-words-stop-nodding-at/index.mdcontent/blog/fractional-cto-bridge-5-hours-week/index.mdcontent/blog/friday-demo-rule-founder-progress/index.mdcontent/blog/friday-demo-template/index.mdcontent/blog/github-aws-database-ownership-checklist/index.mdcontent/blog/hiring-interview-catches-ai-theater/index.mdcontent/blog/hiring-interview-script/index.mdcontent/blog/mom-test-ask-about-past-not-future/index.mdcontent/blog/mom-test-interview-script/index.mdcontent/blog/one-page-product-brief-vibe-prd/index.mdcontent/blog/outreach-sequence-template/index.mdcontent/blog/ownership-checklist/index.mdcontent/blog/reading-sow-clause-by-clause/index.mdcontent/blog/salvage-vs-rebuild-decision-tree/index.mdcontent/blog/salvage-vs-rebuild-software-project/index.mdcontent/blog/self-assessment-worksheet/index.mdcontent/blog/self-serve-mvp-stack-lovable-supabase-stripe-2026/index.mdcontent/blog/self-serve-stack-walkthrough/index.mdcontent/blog/should-you-hire-2026-decision-tree/index.mdcontent/blog/slopsquatting-ai-supply-chain-attack/index.mdcontent/blog/sow-reading-guide/index.mdcontent/blog/stop-specifying-features-start-outcomes/index.mdcontent/blog/switch-dev-shops-safely-transition-guide/index.mdcontent/blog/tech-for-non-technical-founders-2026/index.mdcontent/blog/three-questions-turn-standup-into-proof/index.mdcontent/blog/validated-problem-statement-decide-whats-next/index.mdcontent/blog/validated-problem-statement-template/index.mdcontent/blog/vibe-coding-ceiling-signals/index.mdcontent/blog/vibe-prd-template/index.mdcontent/blog/weekly-dev-report-template-founders/index.mdcontent/blog/where-to-hire-developer-2026-map/index.mdcontent/blog/who-where-hire-developer-2026-ai-augmented-offshore/index.mddocs/projects/2605-tech-for-non-technical-founders/10-19-research/10.01-course-program-landscape.mddocs/projects/2605-tech-for-non-technical-founders/10-19-research/10.02-curriculum-sequence-synthesis.mddocs/projects/2605-tech-for-non-technical-founders/10-19-research/10.03-2026-ecosystem-research-ru-source.mddocs/projects/2605-tech-for-non-technical-founders/20-29-strategy/20.01-course-modules.mddocs/projects/2605-tech-for-non-technical-founders/20-29-strategy/20.02-positioning-vs-courses.mddocs/projects/2605-tech-for-non-technical-founders/20-29-strategy/20.07-content-plan-tnt-founders-2026.mddocs/projects/2605-tech-for-non-technical-founders/50-59-execution/SPRINT-RUNBOOK.mddocs/projects/2605-tech-for-non-technical-founders/50-59-execution/distribution-prep.mddocs/projects/2605-tech-for-non-technical-founders/50-59-execution/mechanical-audit-checklist.mddocs/projects/2605-tech-for-non-technical-founders/50-59-execution/sprint-1/artifact-specs.mddocs/projects/2605-tech-for-non-technical-founders/50-59-execution/sprint-1/cover-image-specs.mddocs/projects/2605-tech-for-non-technical-founders/GOAL-AT-A-GLANCE.mddocs/projects/2605-tech-for-non-technical-founders/PROJECT-INDEX.mddocs/projects/2605-tech-for-non-technical-founders/TASK-TRACKER.mddocs/workflows/linkedin-post-pipeline.mdlinkedin-posts/icp-validation/backlog-vibe-coding-disposable.mdlinkedin-posts/icp-validation/week1-mon-jira-not-progress.mdlinkedin-posts/icp-validation/week1-tue-staging-question.mdlinkedin-posts/icp-validation/week1-wed-trust-signals-poll.md
| date: 2026-08-12 | ||
| draft: false |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
# Check if future content is enabled in Hugo config.
set -euo pipefail
rg -n --iglob '*config*.*' 'buildFuture' .Repository: jetthoughts/jetthoughts.github.io
Length of output: 59
🏁 Script executed:
#!/bin/bash
# Find Hugo config files and check their content
find . -maxdepth 2 -type f \( -name "hugo.toml" -o -name "hugo.yaml" -o -name "hugo.yml" -o -name "config.toml" -o -name "config.yaml" \) | head -20Repository: jetthoughts/jetthoughts.github.io
Length of output: 59
🏁 Script executed:
#!/bin/bash
# Examine the file in question to see full frontmatter and context
head -60 content/blog/build-path-decision-worksheet/index.mdRepository: jetthoughts/jetthoughts.github.io
Length of output: 3460
🏁 Script executed:
#!/bin/bash
# Find and display Hugo config files with their content
find . -maxdepth 2 -type f \( -name "hugo.toml" -o -name "hugo.yaml" -o -name "hugo.yml" -o -name "config.toml" -o -name "config.yaml" -o -name "config" \)Repository: jetthoughts/jetthoughts.github.io
Length of output: 91
🏁 Script executed:
#!/bin/bash
# Check if buildFuture is explicitly set anywhere in config directory
find . -name "config*" -o -name "hugo*" | xargs grep -l "buildFuture" 2>/dev/null || echo "No buildFuture setting found"Repository: jetthoughts/jetthoughts.github.io
Length of output: 248
🏁 Script executed:
#!/bin/bash
# Check the content of Hugo config files
echo "=== ./config/development/hugo.toml ==="
cat ./config/development/hugo.toml
# Look for other Hugo config files in config directory
echo -e "\n=== Other config files in ./config ==="
find ./config -name "*.toml" -o -name "*.yaml" -o -name "*.yml" | head -20Repository: jetthoughts/jetthoughts.github.io
Length of output: 1996
🏁 Script executed:
#!/bin/bash
# Check production and default Hugo configs
echo "=== ./config/_default/hugo.toml ==="
cat ./config/_default/hugo.toml
echo -e "\n=== ./config/production/hugo.toml ==="
cat ./config/production/hugo.tomlRepository: jetthoughts/jetthoughts.github.io
Length of output: 11164
Future date will prevent publication despite draft: false.
The page is set to publish on 2026-08-12 but it's currently May 2026. Hugo's production config does not set buildFuture, so the default (buildFuture = false) applies—future-dated content will not build. Either move the publication date to today or earlier, or if scheduled publishing is intentional, document that expectation in the frontmatter with a comment.
🤖 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/blog/build-path-decision-worksheet/index.md` around lines 4 - 5, The
frontmatter currently has "date: 2026-08-12" with "draft: false", which is a
future date and will be ignored by Hugo unless buildFuture is enabled; either
set the "date:" value to today or an earlier date (replace the 2026-08-12 value)
so the page builds immediately, or if you intentionally want scheduled
publishing, leave the future date and add a clear inline frontmatter comment (or
note above the frontmatter) stating this expectation and ensure your deployment
config enables buildFuture when appropriate; update the "date:" and/or add the
explanatory comment near the "draft: false" line accordingly.
| If $5K-$30K -> Path 3 (Fractional CTO) until problem | ||
| complexity demands more. | ||
|
|
||
| If $30K+ -> Path 4 (Hire a team / Module 4B). | ||
|
|
There was a problem hiding this comment.
Path routing logic is inconsistent between questionnaire and verdict table.
Q4 says $5K-$30K -> Path 3, but the verdict table says Path 4 when Q4 = $5K+/mo. This contradiction can produce opposite decisions for the same inputs.
Suggested diff (align table with Q4 logic)
-| **4. Hire a team (4B)** | Q1 yes, Q2 heavy, Q4 = $5K+/mo | Read draft SOW clause-by-clause. Confirm GitHub/AWS/domain ownership before kickoff. | $30K - $80K / month | Spaceship for the wrong moon. Friday demo + Org Chart audit catch it in week 3. |
+| **4. Hire a team (4B)** | Q1 yes, Q2 heavy, OR Q4 = $30K+/mo | Read draft SOW clause-by-clause. Confirm GitHub/AWS/domain ownership before kickoff. | $30K - $80K / month | Spaceship for the wrong moon. Friday demo + Org Chart audit catch it in week 3. |Also applies to: 170-171
🤖 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/blog/build-path-decision-worksheet/index.md` around lines 135 - 139,
The verdict table contradicts Q4: Q4 defines "$5K-$30K -> Path 3" and "$30K+ ->
Path 4" but the table currently treats "$5K+" as Path 4; update the verdict
table entries to match Q4 by changing the "$5K+" row to two ranges or explicit
logic so that "$5K-$30K" maps to Path 3 (Fractional CTO) and "$30K+" maps to
Path 4 (Hire a team / Module 4B); apply the same correction to the other
occurrence referenced (the similar table rows later in the document).
| date: 2026-07-01 | ||
| draft: false |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
# Confirm whether Hugo is configured to publish future posts.
set -euo pipefail
rg -n --iglob '*config*.*' 'buildFuture' .Repository: jetthoughts/jetthoughts.github.io
Length of output: 59
🏁 Script executed:
#!/bin/bash
# Find Hugo config file(s)
fd -type f -name 'config.*' | head -20Repository: jetthoughts/jetthoughts.github.io
Length of output: 248
🏁 Script executed:
#!/bin/bash
# Also check for hugo.toml or config directory
fd -type f \( -name 'hugo.toml' -o -name 'config.yaml' -o -name 'config.toml' \)Repository: jetthoughts/jetthoughts.github.io
Length of output: 248
🏁 Script executed:
#!/bin/bash
# If config is in a directory, list it
ls -la config/ 2>/dev/null || echo "No config directory"Repository: jetthoughts/jetthoughts.github.io
Length of output: 427
🏁 Script executed:
#!/bin/bash
# Inspect the main config file if it exists
if [ -f "config.toml" ]; then
cat config.toml | head -50
elif [ -f "config.yaml" ]; then
cat config.yaml | head -50
elif [ -f "hugo.toml" ]; then
cat hugo.toml | head -50
fiRepository: jetthoughts/jetthoughts.github.io
Length of output: 59
🏁 Script executed:
#!/bin/bash
# List Hugo config files
ls -la config/_default/
ls -la config/production/Repository: jetthoughts/jetthoughts.github.io
Length of output: 418
🏁 Script executed:
#!/bin/bash
# Read default Hugo config
cat config/_default/config.toml 2>/dev/null || cat config/_default/config.yaml 2>/dev/null || echo "No config in _default"Repository: jetthoughts/jetthoughts.github.io
Length of output: 99
🏁 Script executed:
#!/bin/bash
# Read production Hugo config
cat config/production/config.toml 2>/dev/null || cat config/production/config.yaml 2>/dev/null || echo "No config in production"Repository: jetthoughts/jetthoughts.github.io
Length of output: 101
🏁 Script executed:
#!/bin/bash
# Read default Hugo config
cat config/_default/hugo.tomlRepository: jetthoughts/jetthoughts.github.io
Length of output: 10281
🏁 Script executed:
#!/bin/bash
# Read production Hugo config
cat config/production/hugo.tomlRepository: jetthoughts/jetthoughts.github.io
Length of output: 885
Post with future date 2026-07-01 will not render in production.
Hugo's default configuration does not enable buildFuture. Without it, posts with future dates are excluded from builds regardless of the draft setting. This post is marked draft: false but will silently fail to publish due to its future date.
Either set date to today or earlier, or enable buildFuture in the Hugo config.
🤖 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/blog/five-tech-words-stop-nodding-at/index.md` around lines 4 - 5,
The post's frontmatter uses a future date (date: 2026-07-01) which Hugo will
skip unless buildFuture is enabled; either update the frontmatter date to today
or a past date (change the date field in index.md) or enable future builds by
setting buildFuture: true in your Hugo site config (e.g., in
config.toml/config.yaml) so Hugo includes future-dated posts; keep draft: false
if you want it published.
|
|
||
| **In Module 2 · Design the Solution**: 2.1 **Five Tech Words to Stop Nodding At** ← you are here · 2.2 The One-Page Product Brief (Vibe PRD) · 2.3 Job Stories Instead of Feature Lists. | ||
|
|
||
| The full course landing page (with all 11 artifacts) publishes after Module 5 ships. Until then, bookmark this post. |
There was a problem hiding this comment.
This rollout status line is stale against current shipped state.
“The full course landing page ... publishes after Module 5 ships” conflicts with the supplied context that Module 5 is already shipped and the curriculum is live. Please update/remove this sentence to prevent routing confusion.
🤖 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/blog/five-tech-words-stop-nodding-at/index.md` at line 146, The
rollout status sentence "The full course landing page (with all 11 artifacts)
publishes after Module 5 ships." is stale; update or remove it in the post so it
reflects that Module 5 has already shipped and the curriculum is live—either
delete the sentence entirely or replace it with a current status like "Module 5
has shipped and the full course landing page with all 11 artifacts is now live."
Ensure the edited line matches the tone of the surrounding copy.
| | Score | Verdict | What you do next | | ||
| |---|---|---| | ||
| | **5-6** | **KEEP and harden.** | The codebase is salvageable. Spend the rebuild budget you were about to write a check for on test coverage, monitoring, and one senior hire. Do not rewrite. | | ||
| | **3-4** | **FREEZE and stabilize.** | No new features for 30 to 60 days. One sprint on access ownership (run the [GitHub / AWS / database checklist](./ownership-checklist.md)), one sprint on adding tests around the top three flows, one sprint on monitoring and backups. Re-score in 60 days. If you climb to 5+, you keep. If you stay at 3-4, you rebuild the core paths. | |
There was a problem hiding this comment.
Use canonical blog slug links instead of relative ./ownership-checklist.md.
Line 74 and Line 108 use a relative markdown path that is likely to break in
published routing. Use /blog/ownership-checklist/ to match site slug routing.
As per coding guidelines, "Verify slugs with ls content/blog/<slug>/index.md — never guess."
Also applies to: 108-108
🤖 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/blog/salvage-vs-rebuild-decision-tree/index.md` at line 74, Replace
the relative markdown link './ownership-checklist.md' used in the text lines
containing "run the [GitHub / AWS / database
checklist](./ownership-checklist.md)" with the canonical site slug
'/blog/ownership-checklist/' (update both occurrences at line 74 and line 108),
and verify the target slug exists by running ls
content/blog/ownership-checklist/index.md before committing; ensure the link
uses the absolute blog slug format exactly as '/blog/ownership-checklist/'.
| date: 2026-07-15 | ||
| draft: false |
There was a problem hiding this comment.
Future publish date may hide this post from current builds
Line 4 sets date: 2026-07-15, which is in the future relative to May 13, 2026.
In standard Hugo builds, future-dated content is excluded unless buildFuture is enabled, so this can silently break current routing/discovery.
Suggested fix
-date: 2026-07-15
+date: 2026-05-13Or keep the future launch but make intent explicit with a scheduled workflow (publishDate) and verify build flags.
🤖 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/blog/sow-reading-guide/index.md` around lines 4 - 5, The post
frontmatter uses a future date (date: 2026-07-15) which Hugo will exclude from
builds unless buildFuture is enabled; either change the frontmatter to a
non-future date or set draft: true to prevent accidental hiding, or keep the
future date but add an explicit scheduled publish mechanism (e.g., a CI workflow
using a publishDate or similar) and ensure build flags (buildFuture) are
intentionally configured; update the frontmatter in
content/blog/sow-reading-guide/index.md (the date and draft fields) or
add/confirm the scheduled-publish workflow to make the intent explicit.
|
|
||
| **Flag**: "Delivered" defined as "deployed to staging" or "made available for review." Five-day silent-acceptance windows. No acceptance criteria the milestone has to pass. | ||
|
|
||
| **Fix**: "A milestone is delivered when (a) the acceptance criteria in Exhibit B pass in CI (`bundle exec rspec` for Rails, `pytest` for Django, `php artisan test` for Laravel), (b) Client has clicked the feature end-to-end on the staging URL, and (c) Client has signed off in writing." Acceptance criteria belong in the SOW, not in a Slack message. The [Friday demo template](./friday-demo-template.md) covers what the click-through looks like. |
There was a problem hiding this comment.
Internal links likely broken due to relative .md paths
Line 61, Line 81, and Line 89 use ./*.md links, which resolve relative to content/blog/sow-reading-guide/ and are unlikely to map to live blog routes. Use canonical blog slugs (/blog/<slug>/) to avoid broken links.
Suggested fix
-... The [Friday demo template](./friday-demo-template.md) covers ...
+... The [Friday demo template](/blog/friday-demo-template/) covers ...
-... Pair it with the [GitHub / AWS / database ownership checklist](./ownership-checklist.md) ...
+... Pair it with the [GitHub / AWS / database ownership checklist](/blog/ownership-checklist/) ...
-... the [5-question AI script](./agency-ai-five-questions.md) caught ...
+... the [5-question AI script](/blog/agency-ai-five-questions/) caught ...Based on learnings: "Use rg/ls for exact filenames and slug lookups; verify blog post slugs with ls content/blog/<slug>/index.md before linking."
Also applies to: 81-81, 89-89
🤖 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/blog/sow-reading-guide/index.md` at line 61, Replace relative .md
links (e.g., "./friday-demo-template.md" and other "./*.md" links in this
document) with canonical blog slugs of the form /blog/<slug>/ so they resolve to
live routes; update the link targets in the markdown where
"./friday-demo-template.md" and the other relative .md links appear, confirm the
target post slugs match the actual blog post directories before committing, and
rerun the site link check to ensure no broken links remain.
| date: 2026-07-22 | ||
| draft: false |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
# Verify whether future-dated content is enabled and list future-dated blog posts.
set -euo pipefail
echo "== Hugo config files mentioning buildFuture =="
rg -n --iglob '*config*.*' 'buildFuture|enableGitInfo|ignoreErrors' .
echo
echo "== Future-dated blog posts =="
rg -n '^date:\s*20[0-9]{2}-[0-9]{2}-[0-9]{2}' content/blog | awk -F: '$3 ~ /date/ {print $0}' | sortRepository: jetthoughts/jetthoughts.github.io
Length of output: 124
🏁 Script executed:
#!/bin/bash
# Find Hugo config files and check their content
echo "== Find all Hugo config files =="
find . -maxdepth 2 -type f \( -name "hugo.*" -o -name "config.*" \) | head -20
echo
echo "== Check if the blog post file exists =="
if [ -f "content/blog/validated-problem-statement-template/index.md" ]; then
echo "File exists. First 10 lines:"
head -10 "content/blog/validated-problem-statement-template/index.md"
else
echo "File does not exist"
fi
echo
echo "== Search for buildFuture in all files =="
rg 'buildFuture' . 2>/dev/null | head -20Repository: jetthoughts/jetthoughts.github.io
Length of output: 1138
🏁 Script executed:
#!/bin/bash
# Check Hugo documentation defaults and search for build configs
echo "== Search for any mentions of future or date-related config =="
rg -i 'publishFuture|buildDrafts|buildFuture' . 2>/dev/null | head -20
echo
echo "== List all config files found =="
git ls-files | grep -i 'config\|hugo' | head -20Repository: jetthoughts/jetthoughts.github.io
Length of output: 2902
🏁 Script executed:
#!/bin/bash
# Check production config and build script
echo "== Production Hugo config =="
cat config/production/hugo.toml
echo
echo "== bin/hugo-build script =="
head -50 bin/hugo-build
echo
echo "== Default Hugo config =="
cat config/_default/hugo.toml | grep -A5 -B5 'buildFuture\|buildDrafts' || echo "(no buildFuture/buildDrafts settings found in default)"Repository: jetthoughts/jetthoughts.github.io
Length of output: 1913
This post will be excluded from production because the date is in the future.
With date: 2026-07-22 and draft: false, Hugo will exclude this post from the production build. The production config does not enable buildFuture, so future-dated content is excluded by Hugo's default behavior. The post will remain hidden until its date passes, even though draft: false.
🤖 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/blog/validated-problem-statement-template/index.md` around lines 4 -
5, The frontmatter has a future date (date: 2026-07-22) with draft: false which
causes Hugo to exclude the post from production; fix by either moving the date
to a past value (update the frontmatter key date to a past date) or set draft:
true until you're ready to publish (toggle the frontmatter key draft to true),
then commit the change so Hugo will include or intentionally hide the post as
desired.
|
Consolidated into #345 — single PR for the full Tech for Non-Technical Founders 2026 course (9 modules, 30 chapters, 12 artifacts, 118 files). Per the user's directive to ship the course as one reviewable diff instead of a 7-PR chain. The commits from this branch are linearly preserved on the consolidated branch |
Summary
Post-publish audit of the 26-chapter "Tech for Non-Technical Founders 2026" course found 4 real issues plus 42 false-positive findings from a naive grep. This PR fixes the 4 real ones.
Real fixes (4)
weekly-dev-report-template-founders/index.md— wrap%%{init:directive in```mermaidfence so the timing-cadence diagram renders instead of shipping as raw text in the bodyhiring-interview-catches-ai-theater/index.md:165— strip(276 chars)annotation that leaked from the LinkedIn-tweet drafting stepasked-simple-admin-panel-built-spaceship/index.md— replace 3 references to/blog/the-friday-demo-rule/and/blog/who-owns-your-github-aws-database/with the slugs that actually exist (/blog/friday-demo-rule-founder-progress/and/blog/github-aws-database-ownership-checklist/)tech-for-non-technical-founders-2026/index.md(course landing page) — remove duplicate Module 5 block + stale "What's coming next" / "Where to start" text from sprint-by-sprint build phase; live "Where to start" routing now points at currently-shipped modulesFalse positives caught (don't fix)
The audit's regex
/blog/[a-z0-9-]+/matched substrings inside full external URLs (Veracode, Snyk, DataToBiz, Agilepainrelief, Atlassian, Appstronauts) — those are valid external citations, not broken internal links. A naive batch-sed of those 18 "broken" links produced double-prefix corruption (https://www.veracode.comhttps://www.veracode.com/...); reverted in the same session, no commit shipped with the corruption.Similar story on Mermaid: 22 "unfenced
%%{init:" findings, 21 of which were actually inside```mermaidblocks already. Real unfenced count: 1 (weekly-dev-report-template-founders, fixed here).Test plan
bin/hugo-buildpasses, no template warningsweekly-dev-report-template-foundersrenders the Mermaid timing diagram (not raw%%{init:text)/blog/asked-simple-admin-panel-built-spaceship/and click the 3 changed links — all 200, no 404/blog/tech-for-non-technical-founders-2026/no longer shows duplicate Module 5 block🤖 Generated with Claude Code
Summary by CodeRabbit