Item 16: landing migration to the shuffle2 reference (dark base, gradient H1, 3-col mistakes, relocated sections) - #444
Conversation
…tem16 T1) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…panel 2/2) Hero → mistakes → module map → NOT-cover. Pure block move (25/25 lines), zero text changes. Panel verdict: exclusions read as confident scoping AFTER the offer; dark NOT-cover (T5) needs to land against the footer. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Reference-faithful 3x2: 5 numbered cards + dark CTA cell. Verified 1280 (3 cols, no overflow) + 390 (1 col). qtest green. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
'First Paying Customer' renders as its own line with a ruby→purple gradient (reference-faithful, JetVelocity tokens). replaceRE on .Title - frontmatter untouched, one semantic h1, degrades to plain title if the phrase is absent. Title assertions get normalize_ws (span is display:block, Capybara sees a newline; words unchanged). macOS hero baseline updated in the same commit (intentional 18% hero diff); linux baseline rides the dtest leg at PR prep. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Meta line '5 modules · 25 lessons' becomes two labeled stat cells (Methodology / No-Code MVP · Validation Pace / 2-3 Weeks) with a thin top rule; the counts fold into the leave-with line so no info is lost. Cell copy is Paul-approval-gated at the PR taste gate. macOS hero baseline updated in-commit (3% diff, region = hero card only). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ase (item16 T5) Executes the design panel's Fork-A ruling (Option 2 + embedded CTA): - NOT-cover becomes the page's single full-bleed contrast band (dark #0d1117, dark scope-cards) - modules move back to white so there is ONE full-bleed band (taste guardrail #2). - The endcap stops being a rounded island: full-bleed, flush above (0px seam to the dark band) and below (wrapper bottom padding zeroed so the dark base meets the footer) - no light sliver, one confident dark bottom into the global footer. Start Lesson 1.1 CTA + share preserved. - Dead-selector cleanup (flagged by T1): removed the 4 eyebrow rules for sections relocated off the landing (take-this-course-if, who-built-this, going-further, already-started-building). Below-fold, so the hero-fold pixel test does not cover it; verified by rendered review at 1280x800 + 390x844 (dark base continuous, 0px endcap-footer gap, scope grid 3→1 col mobile, no overflow). qtest green. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…item16 T6) Reference-density pass on the module rail (now on white after T5): - Chapter titles recolored to body-dark #1f2937 (ruby → hover only) and the 1.1/1.2 numbers muted to gray - cards read as a syllabus, not a wall of links (taste guardrail #1). !important beats the global a:not(.btn)... link rule, same pattern the module headings use. - Tighter card padding 28/30 → 24/26, head + chapter-row spacing trimmed. Deliverable glossaries KEPT - they are ICP first-mention glosses (course policy > the 'trim glossaries' nit). Below-fold; verified by rendered review at 1280 + 390 (denser cards, body-color titles, no overflow). qtest 13 screenshots green. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…t render (20%-slot) Guards the landing against section-count drift: the shuffle2 reference is a 4-section page, item16 cut ~2x-height bloat by relocating 4 off-reference sections. This is the build-time net that stops them creeping back (the visual suite is hero-fold-scoped and can't see below-fold section growth). Report-only like check-svg-floor / check-course-paths; LANDING_PARITY_BLOCK=1 to block; has --self-test. Current: 3 body sections <= 4 budget. 40.32 = full-page result render for the reference side-by-side (vs 40.28). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…comments TASK-TRACKER item 16 → executed/PR-prep with the panel verdict, the 8 shipped commits, and the remaining merge gates (reviewer, visual pair, Linux baseline re-record via CI). Hyphens in the 2 new item16 code comments (gate + T5 CSS); the 17 pre-existing em-dash comments in course-list.css are the file's own convention, left untouched. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…em16) test-gates.md gains the check-svg-floor / check-course-paths / check-landing-parity family (standalone, --self-test, env-flag to flip blocking) + the below-fold coverage-gap note confirmed by item16's zero-Linux-red below-fold changes. Log entry dated. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
📝 WalkthroughWalkthroughThe course landing page now uses revised content placement, navigation anchors, hero markup, statistics, card layouts, dark bands, chapter links, and footer styling. System tests normalize heading whitespace. Build-gate documentation and migration tracking were updated. ChangesCourse landing migration
Estimated code review effort: 3 (Moderate) | ~20 minutes Possibly related PRs
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches 💡 1📝 Generate docstrings 💡
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Screenshot diffs detected
|
A report-only gate nobody wires into hugo-build/CI doesn't earn its keep unless it guards an active backlog the way check-svg-floor / check-course-paths do. Removed the script; trimmed its OKF/board/log references to explanatory notes; kept the durable below-fold coverage-gap learning and the 40.32 result render. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
There was a problem hiding this comment.
Actionable comments posted: 2
🤖 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 `@docs/projects/2605-tech-for-non-technical-founders/TASK-TRACKER.md`:
- Line 13: Update the tracker header’s “Last Updated” date to August 12, 2026 so
it matches the current PR `#444` entry and the migration date recorded in
.okf/log.md; leave the status details unchanged.
In `@themes/beaver/assets/css/pages/course-list.css`:
- Around line 22-29: Re-record the intentional course-landing visual baseline on
CI-native Linux so the expected failure count matches the seven documented
mobile code-block renders, then update both Linux and the corresponding platform
baseline artifacts. Verify the refreshed baselines cover the course-title
gradient change represented by .blog h1.course-title .course-title__grad and all
referenced course-landing states.
🪄 Autofix
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 Plus
Run ID: b10cdd51-a1b5-4535-b818-bc60810654eb
⛔ Files ignored due to path filters (42)
docs/projects/2605-tech-for-non-technical-founders/40-49-review/40.32-item16-result-full.jpegis excluded by!**/*.jpegtest/fixtures/screenshots/linux/desktop/404.pngis excluded by!**/*.pngtest/fixtures/screenshots/linux/desktop/about_page/_missions.pngis excluded by!**/*.pngtest/fixtures/screenshots/linux/desktop/blog/index.pngis excluded by!**/*.pngtest/fixtures/screenshots/linux/desktop/blog/index/_pagination.pngis excluded by!**/*.pngtest/fixtures/screenshots/linux/desktop/blog/special/codeblocks/text.pngis excluded by!**/*.pngtest/fixtures/screenshots/linux/desktop/blog/special/inline_style_post.pngis excluded by!**/*.pngtest/fixtures/screenshots/linux/desktop/careers.pngis excluded by!**/*.pngtest/fixtures/screenshots/linux/desktop/careers/junior-ruby-on-rails-developer.pngis excluded by!**/*.pngtest/fixtures/screenshots/linux/desktop/clients/_testimonials.pngis excluded by!**/*.pngtest/fixtures/screenshots/linux/desktop/clients/single-full.pngis excluded by!**/*.pngtest/fixtures/screenshots/linux/desktop/course/chapter.pngis excluded by!**/*.pngtest/fixtures/screenshots/linux/desktop/course/landing.pngis excluded by!**/*.pngtest/fixtures/screenshots/linux/desktop/free_consultation.pngis excluded by!**/*.pngtest/fixtures/screenshots/linux/desktop/homepage/_services.pngis excluded by!**/*.pngtest/fixtures/screenshots/linux/desktop/privacy-policy.pngis excluded by!**/*.pngtest/fixtures/screenshots/linux/desktop/services/app_web_development.pngis excluded by!**/*.pngtest/fixtures/screenshots/linux/desktop/services/fractional-cto/_overview.pngis excluded by!**/*.pngtest/fixtures/screenshots/linux/desktop/services/fractional_cto.pngis excluded by!**/*.pngtest/fixtures/screenshots/linux/desktop/use-cases/_overview.pngis excluded by!**/*.pngtest/fixtures/screenshots/linux/mobile/about_page/achievements.pngis excluded by!**/*.pngtest/fixtures/screenshots/linux/mobile/about_page/values.pngis excluded by!**/*.pngtest/fixtures/screenshots/linux/mobile/about_us.pngis excluded by!**/*.pngtest/fixtures/screenshots/linux/mobile/blog/index.pngis excluded by!**/*.pngtest/fixtures/screenshots/linux/mobile/blog/index/_pagination.pngis excluded by!**/*.pngtest/fixtures/screenshots/linux/mobile/blog/post.pngis excluded by!**/*.pngtest/fixtures/screenshots/linux/mobile/blog/special/code_highlight_post.pngis excluded by!**/*.pngtest/fixtures/screenshots/linux/mobile/blog/special/codeblocks/text.pngis excluded by!**/*.pngtest/fixtures/screenshots/linux/mobile/careers.pngis excluded by!**/*.pngtest/fixtures/screenshots/linux/mobile/careers/junior-ruby-on-rails-developer.pngis excluded by!**/*.pngtest/fixtures/screenshots/linux/mobile/clients/single-full.pngis excluded by!**/*.pngtest/fixtures/screenshots/linux/mobile/contact_us.pngis excluded by!**/*.pngtest/fixtures/screenshots/linux/mobile/course/chapter.pngis excluded by!**/*.pngtest/fixtures/screenshots/linux/mobile/course/landing.pngis excluded by!**/*.pngtest/fixtures/screenshots/linux/mobile/free_consultation.pngis excluded by!**/*.pngtest/fixtures/screenshots/linux/mobile/nav/hamburger_menu/services.pngis excluded by!**/*.pngtest/fixtures/screenshots/linux/mobile/services.pngis excluded by!**/*.pngtest/fixtures/screenshots/linux/mobile/services/fractional_cto.pngis excluded by!**/*.pngtest/fixtures/screenshots/linux/mobile/use_cases.pngis excluded by!**/*.pngtest/fixtures/screenshots/linux/mobile/use_cases/startup-mvp-prototyping-development.pngis excluded by!**/*.pngtest/fixtures/screenshots/linux/mobile/vibe_code_rescue.pngis excluded by!**/*.pngtest/fixtures/screenshots/macos/desktop/course/landing.pngis excluded by!**/*.png
📒 Files selected for processing (13)
.okf/build/test-gates.md.okf/log.mdcontent/course/tech-for-non-technical-founders-2026/_index.mdcontent/course/tech-for-non-technical-founders-2026/customers-leaving-churn-triage-not-acquisition/index.mdcontent/course/tech-for-non-technical-founders-2026/github-aws-database-ownership-checklist/index.mdcontent/course/tech-for-non-technical-founders-2026/how-this-course-works/index.mdcontent/course/tech-for-non-technical-founders-2026/module-5-walkthrough-mia/index.mdcontent/course/tech-for-non-technical-founders-2026/pivot-or-persevere-decision-framework/index.mddocs/projects/2605-tech-for-non-technical-founders/TASK-TRACKER.mdlayouts/course/list.htmltest/system/desktop_site_test.rbtest/system/mobile_site_test.rbthemes/beaver/assets/css/pages/course-list.css
| ## Open queue (in execution order) | ||
|
|
||
| 1. **Item 16 — Landing full-migration to the shuffle2 reference. RUNS NEXT** (unfrozen by Paul 2026-08-02, no Aug-14 wait). Six-gap punch-list groomed and re-audited @662744c3 — full scope in the archive @L476: (1) RELOCATE "Take this course if" + "Who built this" (+ "Going further", "Already started building?") off the landing to how-this-course-works/FAQ — biggest height cut, mind the `#already-started-building` + `#module-map` inbound anchors; (2) module map → compact summaries + chapter counts; (3) gradient second-line H1 — needs `layouts/course/list.html` (TEMPLATE = post-Aug-14 safe only); (4) mistakes grid 2→3-col; (5) hero card labeled stat cells; (6) NOT-cover dark band (dark-zone-budget rebalance). Skills: /impeccable + stitch-design + ux-principles; side-by-side vs 40.28 reference + Paul taste gate at the PR render. Landing-owned files now; the title-render template change waits for Aug-14. | ||
| 1. **Item 16 — Landing full-migration to the shuffle2 reference. ✅ PR #444 OPEN** (branch `landing-item16`). **Blocked on merge by: (a) Paul's taste gate on the render (esp. T4 stat-cell copy), (b) CI `workflow_dispatch update-baselines` for the Linux `desktop/course/landing` baseline** (T2/T4 changed the hero-fold; macOS committed, Linux stale — the only real Linux red; the other 7 dtest reds are known local-Docker codeblock env-flakes, green on CI). Host `bin/test` green; both reviewer agents failed on Fable quota so all blocking checks were run directly with evidence (constraint scoping, anchors, canon, fact-loss, div balance, parity-gate regression sim — all pass). Design panel (3 lenses: conversion/taste/UX) decided: Fork A = Option 2 + embedded CTA (dark NOT-cover, drop the endcap island, keep the bottom CTA inside the dark base); Fork B = relocate all 4 off-reference sections; section reorder = adopt reference order. Shipped: **T1** relocate 4 sections → how-this-course-works (5 inbound anchors repointed, router one-liner kept in hero); **reorder** Hero → mistakes → module map → NOT-cover; **T2** gradient second-line H1 (`list.html` replaceRE, one semantic h1); **T3** mistakes 2→3-col; **T4** hero stat cells (Methodology/No-Code MVP · Validation Pace/2-3 Weeks — copy Paul-gated); **T5** dark NOT-cover single full-bleed band + merged endcap (0px seam to footer) + 4 dead eyebrow selectors removed; **T6** chapter links body-color + muted numbers + tighter cards. 20%-slot dropped (a `bin/check-landing-parity` gate was tried and removed as redundant per Paul, YAGNI). Result render: `40-49-review/40.32-item16-result-full.jpeg`. **Remaining before merge:** core-reviewer verdict, full visual pair (`bin/test` host + honest `bin/dtest` from main), **Linux hero baseline re-record via CI `workflow_dispatch update-baselines`** (T2/T4 changed the hero-fold; macOS baseline committed, Linux stale), ONE PR + Paul taste gate on the render (T4 copy). Constraints held: all CSS in `course-list.css`, template only `list.html`, no shared CSS/partials. |
There was a problem hiding this comment.
📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win
Update the tracker timestamp.
Line 13 records current PR #444 status, but the header still says
Last Updated: 2026-08-08. .okf/log.md dates this migration
August 12, 2026. Update the header if this entry is current.
The supplied tracker and log dates show this mismatch.
🤖 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/TASK-TRACKER.md` at line
13, Update the tracker header’s “Last Updated” date to August 12, 2026 so it
matches the current PR `#444` entry and the migration date recorded in
.okf/log.md; leave the status details unchanged.
| /* item16 T2: reference-style gradient second line (ruby → purple) */ | ||
| .blog h1.course-title .course-title__grad { | ||
| display: block; | ||
| background: linear-gradient(90deg, #cc342d, #a855f7); | ||
| -webkit-background-clip: text; | ||
| background-clip: text; | ||
| color: transparent; | ||
| } |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟠 Major | 🏗️ Heavy lift
Resolve the Linux course-landing baseline failure before merge.
The PR reports eight expected Linux failures. The documented exception has only
seven mobile code-block renders. Re-record the intentional course landing
baseline on CI-native Linux. Update both platform baselines in this PR.
As per coding guidelines, “Treat failures as blockers and update both platform
baselines when an intentional change is accepted.”
Also applies to: 47-68, 102-102, 149-157, 206-231, 542-563, 624-648
🤖 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 `@themes/beaver/assets/css/pages/course-list.css` around lines 22 - 29,
Re-record the intentional course-landing visual baseline on CI-native Linux so
the expected failure count matches the seven documented mobile code-block
renders, then update both Linux and the corresponding platform baseline
artifacts. Verify the refreshed baselines cover the course-title gradient change
represented by .blog h1.course-title .course-title__grad and all referenced
course-landing states.
Source: Coding guidelines
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Item 16 — Landing full-migration to the shuffle2 reference (40.28)
Brings the course landing (
/course/tech-for-non-technical-founders-2026/) close to the shuffle2 reference and cuts it from ~2× the reference height (40.29) down to reference shape. One sprint, one PR, 11 commits.Design panel (3 independent lenses — recorded)
Per Paul's design-call method (modern/flat, panel-decide, Paul taste gate at the render):
What shipped (per-commit)
74cb30f5fa96f5392eab950bcf9ca3c8replaceRE, one semantic<h1>, frontmatter untouched)100689255c0433a2b3deeb2bee76ee0cbin/check-landing-parity(report-only) +40.32result render2e4296f3,e904b7eaThe T4 stat-cell copy ("No-Code MVP" / "2-3 Weeks") is Paul-approval-gated — please eyeball on the render (
40.32-item16-result-full.jpeg) alongside the40.28reference.Gates
themes/beaver/assets/css/pages/course-list.css, template onlylayouts/course/list.html, no shared blog CSS /style.css/ shared partials.bin/test): green.bin/dtestfrom detached main): 8 reds, all expected — 7 are the known local-emulated-Docker codeblock env-flakes (green on native-amd64 CI, not touched here), 1 isdesktop/course/landing(my T2/T4 hero change, macOS baseline committed; Linux baseline needs re-record via CIworkflow_dispatch update-baselines). Below-fold T5/T6 produced zero Linux reds.core-revieweragents failed (Fable quota, then idle-without-report), so every blocking check was run directly with grep-verifiable evidence: constraint scoping ✓, anchor integrity ✓, canon (since 2011 / 5·25 / no "20 years") ✓, no fact lost ✓, div balance 32/32 ✓, parity gate catches a simulated 7-section regression ✓.Do not merge until: your taste gate on the render + the CI Linux-baseline re-record.
🤖 Generated with Claude Code
Summary by CodeRabbit