Autoflow rule: phrase-bullets
Priority 75 · Headline + 2-3 short bullets cycles through 4 layouts: cards → pills → alternating → staggered.
The “1 short headline + 2-3 short bullets” shape is everywhere in real decks and renders flat as “title + bulleted list”. This rule detects the shape and cycles through a 4-variant palette across the deck so two consecutive matches don’t pick the same layout. Anti-monotony as a rule.
When it fires
Section titled “When it fires”- The slide has exactly 1 heading line (h1/h2/h3)
- 2-3 bullet items, each ≤6 words
- The headline ≤8 words
- No images, no extra paragraphs (just heading + bullets)
What it does
Section titled “What it does”The rule reads ctx.state.lastPhraseBulletsLayout and picks the next
variant in the palette:
1st phrase+bullets in deck → cards (horizontal cards side by side)2nd → pills (#[fit] headline + tag pills)3rd → alternating (bullets alternate accent)4th → staggered (bullets indented differently)5th → cards, 6th → pills, ...The autoflow injects [.bullets-layout: <variant>] into the slide. The
parser converts that to data-bullets-layout="..." on the section, and
CSS in css/layout.css renders each variant.
The 4 variants
Section titled “The 4 variants”1. cards
Section titled “1. cards”Bullets become horizontal cards side by side, like a “categories” or “dimensions” slide. Each bullet gets a subtle border and background.
2. pills
Section titled “2. pills”Headline becomes #[fit] (giant) and the bullets become inline pill
tags below it. Strong impact + light context tags. Good for “the X we’re
focusing on” slides.
3. alternating
Section titled “3. alternating”Bullets alternate between heading color and accent color (no special layout — just color rhythm). Works as a subtle anti-monotony shift without changing the overall feel of the deck.
4. staggered
Section titled “4. staggered”Each bullet gets a different indent (25% / 5% / 35% / 15%), creating a visual zigzag down the slide. Makes a flat list feel kinetic.
Live fixture
Section titled “Live fixture”The fixture below has 4 phrase+bullets slides — one per palette variant.
Source
Section titled “Source”footer: autoflow rules · phrase-bulletsslidenumbers: trueautoflow: truetheme: nordicscheme: 1
# Cover
(slide 0 — sets up the deck before the palette starts cycling)
---
<!--RULE: phrase-bullets (priority 75)TRIGGERS WHEN: - The slide has exactly 1 heading line (h1/h2/h3) - 2-3 bullet items, each ≤6 words - The headline ≤8 words - No images, no extra paragraphsEFFECT: - Picks layout from a 4-variant palette via ctx.state.lastPhraseBulletsLayout - cycles: cards → pills → alternating → staggered → cards → ... - Injects [.bullets-layout: <variant>] which the parser turns into data-bullets-layout="..." on the section, and CSS renders the variant.
The 4 slides below show one full cycle of the palette.-->
# Three forces reshaping work
- AI agents that write code- Vibe coders without CS- Hiring for problems
---
# Three skills the new dev needs
- Curiosity- Taste and judgment- Speed and rhythm
---
# What good engineers do
- Read docs and source- Reject mediocre output- Throw away failed work
---
# How to ship faster
- Smaller commits- Earlier reviews- Tests as you goWhy a palette instead of one layout
Section titled “Why a palette instead of one layout”A single anti-monotony layout still becomes monotonous if it fires 5x in a deck. Cycling through 4 variants means even a deck with many “headline
- bullets” slides keeps shifting visually. The rule with state proves
its value here — without
ctx.state, every slide would land on the same default layout.