Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions content/course/tech-for-non-technical-founders-2026/_index.md
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,8 @@ To save your time, here is what we intentionally exclude - none of it is needed

If you need something on this list, the course won't help with it.

<div class="course-band course-band--gray">

## Module map

Read the modules in order - each module's output is the next module's input, and each card's **"You leave with"** line names its output. The artifacts bundle into a single Google Drive folder - your **Founder OS** ([printable pack index](/course/tech-for-non-technical-founders-2026/founder-os-pack/)).
Expand Down Expand Up @@ -234,6 +236,8 @@ Read the modules in order - each module's output is the next module's input, and

</div>

</div>

## Going further (after first paying customer)

Once you've passed the Module 5 gate, the continuation chapters - churn triage, pivot-or-persevere, hiring, agency oversight - live with their read-this-when triggers in the [First-Paying-Customer Operating Kit](/course/tech-for-non-technical-founders-2026/first-paying-customer-operating-kit/#going-further-triggers).
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
39 changes: 22 additions & 17 deletions layouts/course/list.html
Original file line number Diff line number Diff line change
Expand Up @@ -18,15 +18,17 @@
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link
href="https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@700&display=swap"
href="https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@700&family=JetBrains+Mono:wght@600&display=swap"
rel="stylesheet" />
Comment on lines 20 to 22

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Load the JetBrains Mono weight that .course-window__meta uses.

The stylesheet request includes only JetBrains+Mono:wght@600. In themes/beaver/assets/css/pages/course-list.css lines 462-467, .course-window__meta sets font-family: "JetBrains Mono" without font-weight, so it resolves to 400. Only the 600 face is available, so the meta line renders at 600 or falls back. Request both weights, or set font-weight: 600 on .course-window__meta.

🎨 Proposed font request change
-    href="https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@700&family=JetBrains+Mono:wght@600&display=swap"
+    href="https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@700&family=JetBrains+Mono:wght@400;600&display=swap"
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
<link
href="https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@700&display=swap"
href="https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@700&family=JetBrains+Mono:wght@600&display=swap"
rel="stylesheet" />
<link
href="https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@700&family=JetBrains+Mono:wght@400;600&display=swap"
rel="stylesheet" />
🤖 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 `@layouts/course/list.html` around lines 20 - 22, Update the Google Fonts
request in the course list markup to load the JetBrains Mono 400 weight used by
.course-window__meta, while preserving the existing 600 weight for other uses;
request both weights in the existing font URL.

{{ end }}

{{ define "main" }}
<div class="blog">
<article
class="single-content"
style="max-width: 720px; margin:0 auto; padding-left:18px;padding-right:18px">
<div class="blog course-landing">
{{/* W1.5: full-bleed tinted hero band (demo-1 layout). Left column =
H1 + lede + chips + CTA pair; right = the course-window card per
spec §4 (docs/design-system/course-landing-components-2026-08.md).
og:image still uses cover.png via frontmatter metatags. */}}
<section class="course-hero-band">
<header class="course-hero">
<div class="course-hero__main">
<h1 class="course-title">{{ .Title }}</h1>
Expand Down Expand Up @@ -59,26 +61,29 @@ <h1 class="course-title">{{ .Title }}</h1>
{{ end }}
</div>

{{/* L4-visual V3: dark course-artifact card - REPLACES the cover
figure in the hero (never both; og:image still uses cover.png
via frontmatter metatags). Stats from data/course_sequence.yaml,
same derivations as the course-stat shortcode. */}}
{{/* Stats from data/course_sequence.yaml, same derivations as the
course-stat shortcode. Card title = H1 minus "From" (sanctioned
demo-style variant, no new claims). */}}
{{ $seq := hugo.Data.course_sequence }}
{{ $lessons := 0 }}
{{ range $seq.sequence }}{{ if ne .module "Overview" }}{{ $lessons = add $lessons 1 }}{{ end }}{{ end }}
{{ $mods := slice }}
{{ range $seq.sequence }}{{ $m := index (findRE `^Lesson (\d+)` .module 1) 0 }}{{ if and $m (not (in $mods $m)) }}{{ $mods = $mods | append $m }}{{ end }}{{ end }}
<aside class="course-hero-card" aria-label="Course summary">
<p class="course-hero-card__eyebrow">Free course</p>
<ul class="course-hero-card__stats">
<li>{{ len $mods }} modules</li>
<li>{{ $lessons }} lessons</li>
<li>{{ $seq.stats.artifacts }} artifacts</li>
</ul>
<p class="course-hero-card__leave">You leave with a signed paid pilot - a real customer paying real money.</p>
<aside class="course-window" aria-label="Course summary">
<div class="course-window__chrome" aria-hidden="true">
<i></i><i></i><i></i>
</div>
<div class="course-window__body">
<p class="course-window__eyebrow">Free course</p>
<p class="course-window__title">Idea to<br />First Paying Customer</p>
<p class="course-window__meta">{{ len $mods }} modules · {{ $lessons }} lessons</p>
<p class="course-window__leave">You leave with a signed paid pilot - a real customer paying real money.</p>
</div>
</aside>
</header>
</section>

<article class="single-content">
<div class="post-content" itemprop="text">
{{ .Content }}
</div>
Expand Down
Binary file modified test/fixtures/screenshots/macos/desktop/course/landing.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified test/fixtures/screenshots/macos/mobile/course/landing.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Loading