Skip to content

Add the ability to use custom urls - #8

Merged
pftg merged 2 commits into
masterfrom
dg-add-ability-to-use-custom-urls
May 22, 2024
Merged

Add the ability to use custom urls#8
pftg merged 2 commits into
masterfrom
dg-add-ability-to-use-custom-urls

Conversation

@dgorodnichy

Copy link
Copy Markdown
Collaborator

No description provided.

Comment thread blog-urls.csv

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

can we use devto_urls_mapping.csv or use _ instead of -

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

Done

Comment thread bin/from_devto Outdated
end

pp "TODO: Need to uncomment canonical url update when blog will be live."
pp 'TODO: Need to uncomment canonical url update when blog will be live.'

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

puts better

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

Done

@pftg pftg left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

@dgorodnichy please add readme how to provide custom name for blog post from dev.to

@pftg
pftg merged commit ee09583 into master May 22, 2024
@pftg
pftg deleted the dg-add-ability-to-use-custom-urls branch May 22, 2024 14:46
pftg added a commit that referenced this pull request Apr 10, 2026
…inks

Expanded from 5 signs to 8, adding JetThoughts-specific signals:
- #3 "Every deploy breaks something" (no tests → deployment fear)
- #4 "They won't refactor" (technical debt compounds)
- #5 "No transparency" (no reports, no demos)
- #8 "You feel afraid to ask questions" (emotional signal)

Internal links expanded from 6 to 12 unique JetThoughts posts:
- Added: Shape Up, fixing slow teams, code quality evaluation,
  onboarding checklist, red flags in big PRs, knowing what team does
- "Finding the Next Partner" section now references specific practices
  (daily deploys, CI/CD, async standups, delivery flow, onboarding)
- Closing section replaced with 7 internal link list to practice posts

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
pftg added a commit that referenced this pull request Apr 29, 2026
…6-05-06

Full pipeline executed end-to-end:
- Drafter agent: 1820 words, 5 verified internal links, 5 external citations
  (Bug0 2026, Osmani 80% problem, Stack Overflow 2025, GitClear 2025,
  Veracode 2025). Three rescue stories with industry/quarter/version/dollars.

- Round 1 (3 critics): founder persona 6.5/10, SEO/slop 6/10, editor "minor".
  Synthesized 10 fixes: lead with healthtech founder story (founder's #1 ask),
  cut consultant-speak, vary section openers, kill slogany closer.

- Round 2 (3 NEW critics): senior dev caught Osmani title fact-check,
  copywriter caught compass-metaphor TED-talk, AI detector caught three
  "Not X - Y" patterns. 9 fixes applied.

- Round 3 (3 NEW critics): DevOps practitioner 7/10 ("missing the smell of
  an actual on-call shift" - added Honeycomb p99 detail, named SQL injection
  vector); conversion optimizer 6.5/10 ("biggest attention drop is Osmani
  paragraph") - inserted primary CTA after Section 5 peak-pain moment;
  tired reader Lisa skimmed past section 5 - confirmed CTA placement fix
  was correct.

- Cold-eyes Agent 4 (LLM-enforced final gate per docs/workflows/blog-pipeline.md
  STEP 5c): 9/9 PASS, PUBLISH-READY. Frontmatter consistency, no fluffy
  narration, no fake authority, no timeline fabrication, no "Not X but Y",
  no em dashes, no rule-of-three triads, no template repetition,
  no impersonal fragments.

- Cover image: duplicate of vibe-coding-crisis template, customized for
  Quality Tax ($60-90K headline gradient, BUG0/OSMANI/RESCUE BOOK chips),
  rendered 2400x1260x2 via chrome-devtools, Lanczos downsample to 2400x1260.

Status: draft:true, date:2026-05-06. Hugo respects future-dated content;
flip the flag on May 6 with no further work needed.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
pftg added a commit that referenced this pull request Apr 30, 2026
Reader-experience agent's #1 conversion finding: end-of-article CTAs were
invisible (italic line / inline blue link / nothing at all). After 11-12
min reading, ICP-E hit the bottom and visually defaulted to "I guess
that's it?" Highest-intent moment, weakest visual treatment.

CSS (themes/beaver/assets/css/style.css):
- .blog .cta-link: Ruby red background (#cc342d), white text, 14/28
  padding, 8px radius, 600 weight, no underline
- :hover state, :visited state, mobile breakpoint (full-width centered
  on phones with adjusted padding)
- Selectors: .blog p a.cta-link / .blog li a.cta-link / .blog .cta-link
  override the body link styles

Posts adopted (replaced markdown link with inline HTML <a class="cta-link">):
- fire-dev-shop-guide (post #1) - "Get an honest audit"
- 47-startups-failed-same-coding-mistake (post #5) - "Book a 45-minute
  codebase health check"
- rails-event-structured-logging-8-1 (post #6) - "Book the free
  monitoring audit"
- hiring-dev-shop-questions (post #7) - "Book the 45-minute checklist call"
- quality-tax-ai-mvp-cost (post #8) - "Send your repo for the read"

Verified visually at /tmp/typo-sprint2-after-cta-link.png. Hugo build
clean (655 pages, 1494 non-page files).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
pftg added a commit that referenced this pull request Apr 30, 2026
…d bin/dtest to test gate

User flagged 2026-04-30 that data-dense paragraphs (e.g. Quality Tax post
section 2: '$34K -> $4K -> $19K -> $38K -> 9.5x -> $72K') buried the
financial story in plain prose. Founders skim for numbers; bold rendering
helps the eye land.

Per the voice-guide "Data emphasis" rule (added in commit 1712b60):
- Bold percentages, currency, sizes, latencies, multipliers, rescue counts
- Don't bold common nouns (Rails, Ruby, AI)
- Skip fields already in code blocks or external quotes

128 data points bolded across 11 posts (10 most recent + the user's
Quality Tax #8 example):
- ruby-on-rails-performance-optimization-patterns-2026 (12)
- fire-dev-shop-guide (14)
- solid-trifecta-hybrid-redis-rails-8 (13)
- rails-8-1-active-job-continuations-end-lost-background-jobs (10)
- vibe-coding-crisis-ai-code-debt (14)
- 47-startups-failed-same-coding-mistake (16)
- dev-shop-red-flags-checklist (12)
- founders-guide-hiring-dev-shop (2 - sparse pillar overview)
- rails-event-structured-logging-8-1 (9)
- hiring-dev-shop-questions (13)
- quality-tax-ai-mvp-cost (heavy pass; user's flagged section)

Also: CLAUDE.md visual regression gate now requires BOTH bin/test
(macOS host) AND bin/dtest (Linux/Docker). CI runs Linux, so a green
PR locally that skipped bin/dtest will break the build. Both must pass
before commit.

bin/test passed: 42 runs, 116 assertions, 0 failures, 84 screenshots
compared, 0 diffs. Hugo build clean.

bin/dtest follow-up: 81 Linux baselines pending update from prior
sprints. Will be handled in a separate commit after running bin/dtest
fresh to confirm they reflect the fully-fixed state.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
pftg added a commit that referenced this pull request May 1, 2026
…6-41316

Two posts shipped:

1. Post #8 "The Quality Tax: AI MVPs Cost More to Fix" - already passed full
   9-persona + cold-eyes pipeline pre-PR. Flipped draft: true → false and
   adjusted date 2026-05-06 → 2026-05-02 to publish today instead of
   future-dated (Hugo would otherwise hide it).

2. Post B "The Rails CVE Your Dev Shop Skipped" - new draft for the April
   21, 2026 universal RCE disclosure (CVE-2026-41316). Abbreviated team-
   mode pipeline: draft → Round 1 3-critic loop (founder/SEO-slop/copy
   editor) → cold-eyes Agent 4 final gate (9/9 PUBLISH-READY, zero edits).
   Round 1 caught heavier triadic patterns than post A: 3 rule-of-three
   triads, 4 parallel-template paragraphs, 1 duplicate slogan, opening
   jargon dump - all rewritten before cold-eyes.

   ~1500 body words, 5 internal links, 6 external citations. Cover image:
   monospace "CVE-41316" identifier + red→purple gradient "8.1 / 10"
   severity + Ruby gem with alert glow. Build green.

Both news-pegged: posts A (PocketOS), #8 (Quality Tax), and B (Rails CVE)
ship inside the same 2-week trend window the 4-agent research synthesis
identified.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
pftg added a commit that referenced this pull request May 2, 2026
…nds) (#310)

* docs(content): 4-agent research synthesis - revise content plan

Cross-validated 14-day signal scan (Apr 17 - May 1, 2026) across 4 parallel
research agents (Rails, AI/vibe-coding, founder forums, competitor publishing):

- PocketOS database wipe (Apr 25, 851 HN points, 30hr outage) - inserted as
  urgent post A (publish 2026-05-04, news-pegged time-decays)
- Rails CVE-2026-41316 universal RCE (Apr 21) - inserted as B (May 7)
- 6 additional posts from cross-agent signals: NEW-C2 founder trust voice
  (Apr 20 IG), NEW-D2 AI token bill (Apr 23 Pragmatic Engineer), NEW-E
  agency-uses-AI (Apr 30 Wilbur Labs + Amazon rollback), NEW-F Rails 7 EOL,
  NEW-G retros founder edition, NEW-H PaaS bill trap

Dropped #16 Budget Creep (generic angle). Merged #10 into NEW-E (sharper
Apr 30 hook). Stream ratio: 13:7:7 Founders:Rails:AI (27 posts total).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* publish(blog): post A "9 Seconds: An AI Agent Wiped a Live SaaS"

News-pegged ICP-E post on the April 25, 2026 PocketOS incident (Cursor +
Claude + Railway stack deleted production DB and backups in 9 seconds, 30hr
outage). Full team-mode pipeline: 3-round 9-persona critic loop (founder
persona, SEO-slop, copy editor, senior dev, copywriter, AI detector, DevOps
practitioner, conversion optimizer, tired founder reader) + cold-eyes Agent
4 final gate (9/9 checks PUBLISH-READY).

~1500 body words, 5 internal links, 6 external citations, primary keyword
in first sentence. Cover image: strike-through database SVG with 30hr/HN/
backup-gap chips. Build green, zero console errors, mobile renders clean.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* publish(blog): post #8 Quality Tax (flip live) + post B Rails CVE-2026-41316

Two posts shipped:

1. Post #8 "The Quality Tax: AI MVPs Cost More to Fix" - already passed full
   9-persona + cold-eyes pipeline pre-PR. Flipped draft: true → false and
   adjusted date 2026-05-06 → 2026-05-02 to publish today instead of
   future-dated (Hugo would otherwise hide it).

2. Post B "The Rails CVE Your Dev Shop Skipped" - new draft for the April
   21, 2026 universal RCE disclosure (CVE-2026-41316). Abbreviated team-
   mode pipeline: draft → Round 1 3-critic loop (founder/SEO-slop/copy
   editor) → cold-eyes Agent 4 final gate (9/9 PUBLISH-READY, zero edits).
   Round 1 caught heavier triadic patterns than post A: 3 rule-of-three
   triads, 4 parallel-template paragraphs, 1 duplicate slogan, opening
   jargon dump - all rewritten before cold-eyes.

   ~1500 body words, 5 internal links, 6 external citations. Cover image:
   monospace "CVE-41316" identifier + red→purple gradient "8.1 / 10"
   severity + Ruby gem with alert glow. Build green.

Both news-pegged: posts A (PocketOS), #8 (Quality Tax), and B (Rails CVE)
ship inside the same 2-week trend window the 4-agent research synthesis
identified.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
pftg added a commit that referenced this pull request Jul 11, 2026
…es, citations, covers (40.17) (#354)

* feat(course): branch-aware nav strip + walkthrough nav + ranked entry 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

* fix(course): rewrite the two RED legacy companions - worksheet gate + 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

* fix(course): citations, glossing, scannability + 5.6 completion moment (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

* fix(course): cover/badge reconciliation - 10 covers regenerated (40.17 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

* fix(course): cold-eyes review round - source-truth 3 slopsquatting claims + 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

* docs(course): 40.17 execution log + tracker - ICP journey fix sprint complete

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

* fix(course): address PR #354 review - CodeRabbit 15 comments + premium 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

---------

Co-authored-by: Paul Keen <pftg@Mac.fritz.box>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
pftg pushed a commit that referenced this pull request Jul 24, 2026
Code-review of the rescue-sprint kit before first sends. Fixes:
- Joy Adamson routing (SEND-SHEET msg 5, opener #3, prospect row 3): her
  quote is a comment on Nico Casavecchia's post; copy said 'your post'
  and pointed Paul at Nico's thread. Now says 'your comment', with a
  DM-via-profile routing note.
- Pre-send gate added to SEND-SHEET + backlog Next: confirm NeetoCal S0
  checklist (URL resolves 200, but event setup unchecked), tracking
  sheet, msg-5 routing — THEN send.
- New rescue-sprint/pipeline.md: send/reply/booking ledger so A0
  kill-criteria (~20 touches / ~10 calls) are countable; added as P10.
- SEND-SHEET next-batch fixed: #6-10 → #4-#8 (batch 1 used #1-3,#12,#13;
  #4/#5 are the highest-trigger unsent rows).
- Channel contradiction resolved: openers' thread-reply choice supersedes
  prospect-list 'IH DM' column (note added); SEND-SHEET labels actions.
- Retention claim unified to sourced 5-year average (one-pager,
  four-forces) per warm-intro sourced-claims registry; was 3-year/'three
  years' in two docs.
- Rows 16-17 downgraded to semi-ICP (pre-build/partner-seeking; audit
  offer may not fit) with send-last note.
- P3 (HN) marked retired venue (0 rows, dev-dominated) so no future
  session re-runs it; kanban board noted as local-only.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
pftg added a commit that referenced this pull request Jul 25, 2026
…rnal accuracy

Founder-facing (7): r/cursor opener no longer borrows Saul_E's $55K
figure; openers #2/#4/#6/#8 + SEND-SHEET align to the real delivery
(45-min call -> 48h offline audit, not audit-in-45-min); Touch 1
follow-up no longer claims 'slot is still yours' to never-booked
founders; pre-call email asks founders to HOLD admin and grant
read-only (never hand admin credentials); discovery-kit secrets rule
is absolute (sanitized excerpts only, synced to runbook event note);
booking confirmation sets read-access expectation with a hostage-case
escape hatch (spec + runbook copies).

Internal accuracy (14): runbook P2/T9 stale $25K -> confirmed tiers;
D1 card marked done via T8/T9; VoC cold-eyes Push count 10->13;
sourcing-pipeline cold-row target + stale 'run now' footer; taxonomy
Reddit access = excerpt/F5Bot; GOAL-AT-A-GLANCE demoted to supporting
workstream under bet #1; RUN.md portable repo root + P7 non-blocking;
strategy roadmap/risk reflect partner locked 2026-07-21; KR3 counts
free audits (funnel entry); warm-intro table gains Last-touch column;
p1 verdicts downgraded (dianewilliams75, 659ertramp, J_Jie556517)
with cold-list row 15 synced; assumptions-register + grooming vote
totals recomputed (A3 18, B1 23, B2 33, C3 17, C4 18, D2 25; V1
44/32/35, V2 C 32) — no winner flips.

All 47 CodeRabbit comments triaged: 9 already fixed, 21 fixed here,
rest dismissed with reasons (see session notes).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
pftg added a commit that referenced this pull request Aug 1, 2026
* refactor(course): card-grid the operating-kit's 6 components + one How-to-run section

40.24 L3 contract, commit 1 of 3 (40.23 C4 rider). The kit's six
component blocks become a 2-column card grid (reusing .module-card +
a new .kit-grid rule), each card closing with the same single
'Payoff:' label - replacing the six mismatched payoff labels
(In practice / Why it matters / The outcome / What it does / Result /
The payoff). The DPA deposit clause moves to a full-width fence just
below the grid (narrow-card pre wrapped badly). The four trailing
prose H2s (How to use / What this kit is not / How to get / Where
this fits) collapse into one 'How to run the kit' with a v2
Done/Next closure. No new facts, no canon changes; all lesson and
reference links kept. Kit PDF regenerated.

Gates: bin/hugo-build green (8 validators), bin/qtest --changed
green (34 runs, 0 failures, 53 screenshots no diffs).

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

* refactor(course): move Going-further tables to the kit, Already-building steps to Lesson 4.2

40.24 L3 contract, commit 2 of 3. The landing's three Going-further
trigger tables relocate verbatim to a new 'Going further triggers'
section (#going-further-triggers) at the close of the
First-Paying-Customer Operating Kit; the landing section keeps its
byte-identical H2 and points there. The Already-building 6-step
pre-flight body relocates to Lesson 4.2 as an 'Already mid-build
with a contractor?' side-path (step 1, the ownership audit, is that
lesson itself, so the list carries the remaining 5); the landing
section keeps its byte-identical H2 + fork sentences. The two
completer 'Next' links (paid-pilot 5.6, outbound 5.7) repoint from
the landing anchor to the kit's trigger section.

GA4 branch-click label continuity: the branch links generated from
churn-triage / pivot-or-persevere / module-5-walkthrough frontmatter
still target the landing's unchanged
#going-further-after-first-paying-customer anchor, so existing
data-course-label values keep reporting under the same labels.

Gates: bin/hugo-build green (8 validators); bin/qtest --changed
reports no visual-affecting changes (markdown-only diff). Kit PDF
regenerated.

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

* feat(course): restructure landing to the L3 target order - hero Free note, two doors, Who-built-this up top

40.24 L3 contract, commit 3 of 3. New section order: hero (+ one-line
'Free' reconciliation note rendered under the chips via a new
hero_note frontmatter slot in layouts/course/list.html), intro
compressed to two doors (Start Lesson 1.1 / see the syllabus), Take
this course if / Skip if + a 2-line already-building router to
Lesson 4.2, the approved Who-built-this draft (softer variant,
verbatim from the contract), Why-this-course-exists with the 'since
2011' clause removed from its intro (the Who block carries it) and
bullets lightly trimmed (deep links kept), What-NOT-cover whole with
its Going-Further reference repointed to direct chapter links,
Module map (fundraising clause out of the intro; 16
Optional-reference rows removed; external tool names de-linked
inside the cards - NOT-cover keeps the linked versions), the two
byte-identical stub H2s, and the template end-cap's Start Lesson 1.1
as the final element. The 16-word share line is cut from the landing
and re-homed at the operating kit's close. All 7 inbound anchors
(#going-further-after-first-paying-customer x5,
#already-started-building, #module-map) verified intact in built
HTML. Mia walkthrough rows, chapter/template links, canon numbers,
and the zero-service-CTA rule untouched.

Intended visual change: macos desktop+mobile course/landing
baselines updated in this commit. Linux baselines NOT re-recorded
locally (emulated-Docker rule) - the dtest leg runs at PR prep.

Gates: bin/hugo-build green (8 validators); bin/qtest --changed 34
runs, 2 failures = exactly the two intended course/landing
screenshots (baselines accepted here), 51/53 others unchanged. Kit
PDF regenerated.

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

* feat(course): L4-visual V1 - mistake-card grid, module-card elevation, dark endcap, section eyebrows

40.25 brief, commit V1 of 3. course-list.css only (bundle exclusive
to the landing): (1) ul.mistake-list becomes a 2-col card grid with
ruby CSS counters 01-05 replacing the x bullets; (2) module cards
get elevation, the leading 'Output:' strong restyled as a top-right
ruby pill, and the 'You leave with' line promoted to a green tinted
panel; (3) .course-endcap becomes an obsidian (#0d1117) island with
a soft ruby radial glow behind the Start Lesson 1.1 CTA; (4) ruby
uppercase eyebrow kickers above each section H2 keyed off stable
heading ids, plus hero polish (ruby-tinted Free chip, CTA shadow).
Zero copy changes; JetVelocity tokens only.

Visual score (inspected 1280x800 + 390x844 in chrome-devtools):
1. Great look: YES - consistent ruby/obsidian tokens, aligned grid.
2. Functional: YES - no horizontal overflow at 390px, contrast holds.
3. Earns next scroll: YES - card grid breaks the mistake text wall;
   dark endcap gives the page a terminal CTA moment.
4. Helpful: YES - counters encode sequence, leave-panels surface the
   deliverable, eyebrows aid section scanning. No decorative-only art.

Gates: bin/hugo-build green. bin/qtest --changed: desktop landing
within 0.03 tolerance (baseline unchanged); mobile landing 0.045
intended diff - macos mobile baseline updated in this commit; all
other tests green (css_orphan_guard 2 runs, color_system 1 run, 0
failures).

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

* feat(course): L4-visual V2 - timeline rail, mid-page CTA card, two-col module cards, gloss restore

40.25 brief, commit V2 of 3. Markup (_index.md) + course-list.css:
(1) the five module cards wrap in a .module-rail div - a vertical
ruby-fading rail with an 8px node per card, >=1000px only (no gutter
below, hidden per the brief's mobile-alignment escape hatch);
(2) a 6th mistake-grid cell: dark inverted CTA card 'Each mistake
maps to a module - jump to the module map' (10 words) targeting the
existing #module-map anchor, no counter/x marker; (3) module cards
go two-column on >=768px via grid-template-areas - chapters left,
'You leave with' panel right - stacking back to one column below;
(4) 40.24-addendum P3: the Founding-Hypothesis gloss restored to the
full 'who the customer is, what problem you solve, why they'd pick
you' wording (revert of the L3 trim). kit:168 '20 years' NOT touched
(queued for W2). These two text items are the only word changes.

Visual score (inspected 1280x800 + 390x844 in chrome-devtools):
1. Great look: YES - rail+nodes echo the course sequence, dark CTA
   cell balances the 2x3 mistakes grid.
2. Functional: YES - no overflow at either viewport, leave-panel
   column readable at 240px, mobile stacks cleanly with rail hidden.
3. Earns next scroll: YES - the dark cell hands scanners a door to
   the map at the exact decision moment.
4. Helpful: YES - two-col layout puts chapters and the deliverable
   side by side; nothing decorative-only.

Gates: bin/hugo-build green. bin/qtest --changed green - all diffs
within the 0.03 landing tolerance, so no baseline changes in this
commit (desktop 3 runs, mobile 1 run, unit+color+random extras all
0 failures; final clean run: '1 screenshot compared, no failures',
'qtest: green in 83s').

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

* feat(course): L4-visual V3 - dark hero course-artifact card replaces the cover figure

40.25 brief, commit V3 of 3 - the ONE bold move, kept separate and
revertable (drop this commit to restore the cover-image hero).
layouts/course/list.html: hero content wraps in .course-hero__main;
the cover <figure> is REMOVED (never both) and replaced by an
obsidian .course-hero-card aside - ruby 'FREE COURSE' eyebrow, the
page title in Space Grotesk, stat chips (5 modules / 25 lessons /
6 artifacts, derived in-template from data/course_sequence.yaml with
the same logic as the course-stat shortcode - single source, canon
untouched), and a leave-with line reusing the hero lede's contracted
'signed paid pilot - a real customer paying real money' phrasing.
og:image still serves cover.png via frontmatter metatags. On >=980px
the hero breaks out to min(1080px, 100vw-48px) as a two-column grid
(content left, card right); below 980px the card stacks under the
CTAs in the cover's old slot. JetVelocity tokens only: obsidian
#0d1117, ruby #cc342d glow, purple #a855f7 glow, Space Grotesk. No
blue, no orange.

Visual score (inspected 1280x800 + 390x844 in chrome-devtools):
1. Great look: YES - the obsidian island with ruby+purple radial
   glows gives the first fold a brand-anchored artifact; chip row is
   crisp. Known nit: card title duplicates the H1 verbatim (title
   copy is contracted; demo's variant title is killed demo-copy).
2. Functional: YES - zero horizontal overflow at both viewports;
   contrast holds (white/#e7e7ee on #0d1117); stats readable.
3. Earns next scroll: YES - first fold now carries a visual hook
   (Pew 3-second rule) instead of pure text + below-fold cover.
4. Helpful: YES - the card encodes real orientation data (module/
   lesson/artifact counts + the end-state); it replaces, not adds.

Gates: bin/hugo-build green. bin/qtest --changed: intended failures
ONLY on the two landing screenshots (desktop 0.228 hero region,
mobile 0.109 hero-card region) - both macos baselines updated in
this commit; css_orphan_guard, color_system and all other runs 0
failures. No non-landing baseline shifted.

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

* fix(course-landing): L4 fix round - output pill, module-card void, endcap gap

Fixes the 1 P2 + 2 P3 findings from the L4-visual cold critique (29/36,
beats the 25/36 gate):

- P2: module-card "OUTPUT:" pill was position:absolute top-right,
  detached from the sentence it labels (read as a broken data
  binding). Restyled as an inline ruby lead-in attached to its line.
- P3: desktop module cards 4 and 5 had a ~500px empty void under the
  "You leave with" panel because the shared grid row height tracked
  the much-taller chapters column. align-self:start alone doesn't
  shrink the row - collapsed just those two cards to single-column so
  the row height tracks the panel's own content.
- P3: mobile had a ~170px dead black gap between the endcap card and
  the footer logo - endcap bottom padding (38px) + footer.css top
  padding (130px) collide with no visual seam since both are black.
  Scoped the fix to course pages via body:has(.course-endcap), so the
  shared footer.css rule other pages depend on is untouched.

Verified via chrome-devtools at 1280x800 and 390x844: pill reads
attached, void is gone on modules 4/5, gap collapses to normal
section spacing, modules 1-3 (shorter chapter lists) unaffected,
zero console errors.

4-criteria score: great look (yes - fixes read as intentional, not
patched), functional (yes - no zoom, no overflow), earns scroll (yes
- card rhythm reads clean start to finish), helpful (yes - removes
two "looks broken" signals a reader would bounce on).

bin/hugo-build: exit 0, 8 validators passed.
bin/qtest --changed: green in 151s, 0 failures - both course/landing
screenshot diffs (desktop + mobile) fell under the 0.03 tolerance, no
baseline update needed.

* docs(2605): 40.26 L5-condense spec - density directive, expander moves, guards

Records Paul's 2026-08-01 directive: landing's one job is attract + route to
Lesson 1.1; shuffle demo 1 density is the target; native <details> expanders
allowed (un-kills 40.25's modules-collapse item, which assumed JS was needed).

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

* feat(course-landing): L5 module cards - lesson lists into native <details>, compact card face

Per 40.26: visible card = badge, title, Output line, one-line leave-with,
Start Module N link, Mia walkthrough row. Lesson list + Start-here router +
template rows move inside a closed-by-default <details><summary>N lessons</summary>
(still on-page for SEO/anchors). No JS. V2.3 two-col grid deleted (no second
column left to balance; also removes its module-4/5 void workaround).
Landing journey test updated: opening the expander is now part of the flow.

4-criteria (1280x800 + 390x844, closed + open states): (1) great look YES -
cards read as compact tiles, expander box matches the card system; (2)
functional YES - opens cleanly both viewports, lesson links tappable, zero
console errors; (3) earns next scroll YES - all 5 modules now fit ~3 screens
instead of a wall; (4) helpful YES - Output + leave-with orient, detail on
demand. Gates: hugo-build exit 0, qtest --changed green (viewport baselines
unchanged - hero untouched).

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

* feat(course-landing): L5 NOT-cover - two-col exclusion list + one why-details

Per 40.26: the seven exclusions become a tight two-column list; the
why-excluded explanations (with their outbound links, all kept) move into
one closed <details>Why these are out</details>. FAQ checked - it does not
carry these, so nothing duplicated. Labels inside the details are cut-only
shortenings of the original bold leads.

4-criteria (1280x800, closed + open): (1) YES - list scans in one glance,
expander box matches the module-card system; (2) YES - opens cleanly, links
intact; (3) YES - section shrank from a 7-paragraph wall to half a screen
(page 8506px -> 8235px); (4) YES - qualify-out info stays one click away.
Gates: hugo-build exit 0, qtest --changed green.

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

* feat(course-landing): L5 prose diet - router merge, module-map preamble halved, stub merge

Per 40.26 move 3, cut/merge only: the two post-intro router lines merge into
one paragraph; the module-map preamble drops the Founder-OS elaboration and
artifact-count restatement (hero card carries the stat; pack-index link
kept); the Already-started-building stub drops its throat-clearing opener
and merges to two routing sentences. Protected content untouched: hero +
Free line, checkpoint sentence, Take/Skip-if (YC in place), 95-word
Who-built, mistake cards, stub H2s byte-identical, endcap.

Prose words (tags stripped): 1655 -> 1636. Visible-by-default words on the
rendered page: 1226 vs 1770 with all expanders open (-31% on screen).

4-criteria (1280x800 + 390x844 full-page walk): (1) YES; (2) YES - anchors,
Mia links, mistake deep links all visible and live; (3) YES - page now
~8035px at 1280w, five compact module tiles; (4) YES - density tracks
shuffle demo 1. Gates: hugo-build exit 0; qtest correctly reports
no visual-affecting changes (markdown-prose-only diff).

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

* docs(2605): 40.26 amendments - demo 1 = ideal reference (persisted capture), decided items

Records Paul's demo-1-as-ideal directive with the durable full-page capture
(shuffle URLs are ephemeral), the modules-3-5 group decision (anchor-safe,
rg-verified), the hero-card title cut, the sanctioned verdict chip, and the
skips with reasons (gradient H1 kill condition, section-order conflict,
worktree-vacuous dtest).

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

* feat(course-landing): modules 3-5 grouped behind one card-summary details (demo 1 #8)

Modules 1-2 stay visible compact cards; 3-5 collapse into one native
<details> whose summary renders as a card: 'MODULES 3-5 · Design, build,
first customer' + ruby chevron (site-wide summary::before triangle
suppressed for this element only). Anchor-safe: zero inbound links to
#module-2..5 (rg-verified); ids remain in DOM and fragment navigation
auto-expands details. Summary title is a 4-word cut-merge of the three
module titles. No JS.

4-criteria (1280x800, closed + open): (1) YES - reads as one more card in
the rail, chevron affords expansion; (2) YES - opens to the three full
cards, each with its own lesson expander; (3) YES - page 8035px -> 6834px,
module map now ~2 screens; (4) YES - matches the ideal reference's
collapsed-group pattern. Gates: hugo-build exit 0, qtest --changed green.

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

* feat(course-landing): hero-card title cut, verdict chip, CSS convergence on demo-1 component spec

Per 40.26 amendments: (1) hero course-window card drops the duplicated H1
title - now eyebrow + stat chips + leave-with (cut-only, cold-critic fix);
(2) hero chip row gains 'First verdict in 2-3 weeks' (the one sanctioned
copy addition; on-page number, two independent panel recommendations);
(3) course-list.css converges on docs/design-system/
course-landing-components-2026-08.md: chips -> gray-100 uppercase 12px/600
radius-2 (Free keeps ruby tint), primary CTAs -> spec shadow + hover lift
(hero + endcap, old endcap shadow rule deleted), module-card Output ->
ruby-tint panel, leave-with -> border-top footer (green panel dropped),
badge -> gray-400, card radius 16, timeline rail -> 1px gray-200 with 16px
obsidian nodes.

Intentional hero change: macos landing baselines (desktop 0.11 / mobile
0.358 diff vs old) re-recorded and committed here; linux pair left for CI.

4-criteria (1280x800 + 390x844): (1) YES - hero reads like the ideal
reference, one loud element (ruby CTA); (2) YES - chips wrap 3+2 desktop,
stack clean at 360/390, zero console errors; (3) YES - verdict chip gives
the first fold a concrete promise; (4) YES - all changes converge on
measured spec values, nothing decorative added. Gates: hugo-build exit 0;
qtest re-run post-commit (baselines compare vs HEAD).

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

* docs(2605): 40.26 result capture - final rendered landing at 1280w for side-by-side vs demo 1

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

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants