This page exists so the section vocabulary has a worked example that a person can look at and a build can verify. It is not a marketing page and is not linked from anywhere.
This one section replaces five separately hand-written grids on the old pages. Columns and accent are props, so the same component covers all of them.
The standard three-part feature card.
One to four, and it collapses on narrow screens by itself.
Blue by default, orange for urgency, green for outcomes.
Omit it and the card becomes a compact icon and title row.
Each paragraph is its own string, so one can be edited without splitting text.
A single blob with newlines would force the admin panel to guess where one paragraph ends and the next begins, and a person adding a paragraph in the middle would have to edit around the delimiters. An array removes that whole class of problem.
Prose is also capped at a readable measure rather than running the full container width, which is a decision the section owns so no page has to remember it.
Covers both the week-by-week and the module-by-module shape; `meta` carries whichever label applies.
The base the rest of the course assumes.
Building a page from the vocabulary rather than from markup.
Asset paths are the one thing a generator must never invent, so a person with no image still renders as a finished card.

Machine Learning Engineer
7+ years experience

Senior Applied Scientist
11+ years experience

Principal ML Engineer
13+ years experience
ML Engineering Manager
9+ years experience
House voice requires "25,000+ trained", never "thousands".
Tailwind classes from the locked palette, semantic tags, no scripts and no arbitrary values. Reorderable and deletable like any other section, because the section list is still structured data.
The section vocabulary meant I could edit the copy on my own page without asking an engineer, and the page still looked exactly like the rest of the site.
Regenerating one section instead of the whole page turned a two-minute wait into something that feels immediate.
Every string is in one place now, so what a crawler reads and what a visitor reads cannot drift apart.
Native details and summary, so this stays a server component and every answer is in the HTML whether or not a panel is open.
No. The registry is a closed map and an unknown type is skipped at render time and rejected by the validation gate. That is what guarantees a generated page is on-brand.
Yes, within the style contract: background, accent, padding, columns, alignment and button variant. Each is an enum that resolves to a design token, so a page can be restyled without going off-palette.
Nothing. `sections` is optional on PageContent, so existing pages with bespoke JSX render exactly as before.
The campaign identity comes from the page (content.form), not from this section. What the section carries is placement and chrome. In trigger mode it is a button; in inline mode the form mounts in the frame instead.
Next live session starts in
Checking the next session...
Trigger mode here rather than inline: this page has no campaign configured, so an inline form would sit waiting for a vendor bundle that has nothing to show.
Takes ~30 seconds. No payment required to apply.