Thirty small visual moves that separate the work of an art director from a Figma export. Each one is a single decision — a font swap, a rule of color, a way to break a grid — that compounds into the feeling of premium. This course is five modules, six lessons each. Read it once. Then on every new page, pick ten moves and execute them with conviction. The page will look like it cost $50,000.
01 · Section
Module 1 — Type moves
Typography is the cheapest upgrade in design. You can keep the layout, the colors, and the photography exactly as they are — and a single typographic decision will lift the whole page from generic to editorial. The next six moves are the ones that magazines, monographs, and luxury brands have used for a hundred years. None of them require new code. All of them require taste.
02 · Section
Lesson 1 · The italic word
Set one noun in the headline in italic. The eye reads italics as emphasis without you having to underline, bold, or recolor anything. It's the quietest possible way to say 'this is the point of the sentence' — and it instantly makes the line feel written instead of typeset.
- Pick the most concrete noun in the headline. Italicize only that word.
- Try it: 'Build the thing.' → 'Build the *thing*.' One italic, the line gains a voice.
- Look for it: every New York Times longread headline uses one italic noun.
- Trap: italicizing a verb or an adjective. It deadens the line. Nouns only.
- Pair with a serif font for the headline — italic serifs carry far more emotion than italic sans.
03 · Section
Lesson 2 · The drop cap
The opening paragraph begins with a single letter set 4–5 lines tall, hugging the left margin with the rest of the text wrapping around it. It's a 600-year-old move that still works because it gives the eye a single, unmistakable place to start reading. On a long-form page it's the difference between a wall of text and an essay.
- Sizing: drop cap height = 4 to 5 lines of body text. Anything less looks like a typo.
- Use a serif drop cap even if your body is sans. The contrast is the point.
- CSS: `p:first-of-type::first-letter { float: left; font-size: 4.5em; line-height: 0.85; padding-right: 8px; font-family: 'Fraunces', serif; }`
- Look for it: Vanity Fair, The New Yorker, Aeon — every essay opens with one.
- Trap: drop caps on every paragraph. Use one. The first one. That's it.
04 · Section
Lesson 3 · The pull quote
Halfway through a long block of body text, lift one sentence out and reset it at 1.4× the body size with a hairline rule above and below. It does two jobs at once: it gives the scrolling eye a rest stop, and it tells the skimmer the single most important sentence on the page without making them read the rest.
- Size: body text is 16px → pull quote is 22–24px. Larger and it screams.
- Add 1px hairline rules top and bottom, with 24px of padding inside.
- Set in italic if the body is roman, or roman if the body is italic — the contrast does the work.
- Try it: pick the one sentence a reader would screenshot. That's your pull quote.
- Trap: pull-quoting a fact. Pull-quote a feeling, an opinion, or a reframe.
05 · Section
Lesson 4 · The micro-caps eyebrow
Above every section heading, set a tiny line of uppercase text — 10 to 11 pixels, letter-spacing around 0.2em, often in the accent color. It tells the reader what kind of section they're entering before they read the section title. It's the single most editorial move you can make in five minutes of work.
- Size: 10–11px. Letter-spacing: 0.18em–0.22em. Weight: medium or semibold.
- Use it for category labels: 'CASE STUDY', 'INTERVIEW', 'PATTERN', 'CHAPTER 3'.
- Color: the page accent at full saturation, or `text-text-3` for a calmer take.
- Tailwind: `text-[11px] uppercase tracking-[0.2em] font-medium text-accent`.
- Look for it: Stripe's pricing page, Linear's blog, every Awwwards-winning agency site.
06 · Section
Lesson 5 · The oversized number
When you have a stat — 96%, $4.2M, 12 hours — set the number itself at 96 pixels or larger and the unit/label at 14 pixels next to it. The size difference does all the storytelling: the eye lands on the number, then reads the unit as a footnote. It is the single most reliable way to make a stats section look expensive instead of bullet-point boring.
- Size ratio: number at 96–144px, label at 12–14px. Anything closer kills the effect.
- Set the number in your display font, the label in micro-caps under or beside it.
- Three stats per row, max. Five stats and the page reads like a sales deck.
- Try it: take any '5 features' section and convert it to '3 numbers'. Tighter, prouder.
- Look for it: Pitch, Linear, and every modern fintech homepage.
Build a stats band for a startup landing page with three stats: '$4.2M raised', '12,000 active users', '99.98% uptime'.
Set each number at 120px in a display serif (Fraunces or PP Editorial New). Set the label below in 11px uppercase, letter-spacing 0.2em, color text-text-3. Three columns, generous gap, no borders, no icons. The numbers do all the work.
07 · Section
Lesson 6 · The highlight tape
Take a single phrase inside a longer sentence and give it a soft yellow background that sits behind the text like a highlighter mark. It mimics the gesture of a reader marking the most important line of an article — and it works because everyone instantly recognizes that gesture. One highlight per paragraph. Never two.
- Color: pale yellow (#FFF1A8) or pale mint, never neon.
- CSS: `background: linear-gradient(to top, #FFF1A8 50%, transparent 50%);` — gives the half-marker effect.
- Use it on the verb or the noun the sentence pivots on, not the whole sentence.
- Try it: open your homepage hero subhead. Highlight one phrase. Watch the eye go straight to it.
- Trap: highlighting more than one phrase on the same screen. The whole move dies.
08 · Section
Module 2 — Layout moves
Grids do not have to be uniform. The strongest editorial layouts mix one wide element with two narrow ones, break the grid completely with a full-bleed image, or float a sticky meta column beside a long-form article. The next six moves are how you stop building 'three cards in a row' pages and start building pages that feel like spreads.
09 · Section
Lesson 7 · The bento grid
A single frame split into mixed-size cells — one big, two medium, three small — like a bento box. Apple has rebuilt their entire iPad and Watch marketing around this pattern because it lets you tell six stories on one screen without the page feeling like a list. Each cell gets its own background, its own headline, its own micro-image. The variety is the message.
- Use CSS Grid with `grid-template-columns: repeat(6, 1fr)` and `grid-auto-rows: minmax(200px, auto)`.
- One cell spans 4×2, two cells 2×1, three cells 2×1. Mix it up.
- Each cell gets a different but related background tint — same hue, different lightness.
- Look for it: apple.com/ipad, linear.app/features, vercel.com.
- Trap: equal-sized cells. That's just a grid. The bento is about variety.
Build a bento grid section for a productivity app with six features. One large cell (4-col span, 2-row span) for the headline feature with a screenshot. Two medium cells (2×1) and three small cells (2×1) for the rest. Each cell gets a tinted background in a related color family — slate-50, slate-100, neutral-50. Round corners 16px. No borders. Generous internal padding (32px).
10 · Section
Lesson 8 · The folio strip
A horizontal scrolling row of work — case studies, projects, screenshots — where each item is roughly portrait-shaped and slightly indented from the page edge so the eye sees the next one peeking. It feels like flipping through a portfolio book on a coffee table, which is the exact emotion you want when showcasing past work.
- Items: 5–8 cards, each roughly 320×440px, set in a horizontally scrolling row.
- Leave 24px of gap between cards and let the row bleed off the right edge.
- Add a tiny `cursor: grab` and momentum scroll. Modern browsers do this for free with `scroll-snap`.
- Each card: one image, one project name in the heading font, one client name in micro-caps.
- Look for it: most agency sites — Pentagram, Instrument, Locomotive.
11 · Section
Lesson 9 · Full-bleed editorial
Let one image touch all four edges of the screen, with no margin, no padding, and no caption inside. Then place the headline either centered over it or anchored to the bottom-left in white text with a slight gradient overlay for legibility. It is the single most cinematic move you can make on a homepage.
- Image: 1920×1080 minimum. High-quality photography or a custom render — never stock.
- Add a 0–60% black gradient from bottom for text legibility (`bg-gradient-to-t from-black/60`).
- Headline in display serif, 72–96px, anchored bottom-left with 64px of padding.
- Use it once per page. A full-bleed only feels cinematic if it's rare.
- Look for it: nytimes.com longread features, every monograph publisher.
12 · Section
Lesson 10 · The sticky meta sidebar
On a long-form article page, anchor a small column to the left or right that stays visible while the article scrolls. Inside it: author name, publish date, reading time, share buttons. It costs you 200px of width and gives back enormous trust — the reader knows who wrote it and how to find more.
- Width: 200–240px, on the left for English-reading audiences, right for RTL.
- Contents: author photo (40px), author name, role, publish date, reading time, share row.
- CSS: `position: sticky; top: 96px;` — sticks below your nav, scrolls with the article.
- Hide on mobile (below 768px). Move the meta to the top of the article instead.
- Look for it: medium.com, every Substack publication.
13 · Section
Lesson 11 · The asymmetric split
A 60/40 hero — 60% text on the left, 40% image on the right (or reversed). Never 50/50. Equal halves feel stuck and corporate; an asymmetric split feels editorial because one side is clearly the lead and the other is the supporting actor. Pick which side leads and commit.
- Ratio: 60/40 or 65/35. Not 50/50. Not 70/30 (gets unbalanced).
- Text side: headline + subhead + one CTA. Nothing else.
- Image side: full-bleed to its own container, no padding inside.
- Vertical alignment: top-align the text and image to the same baseline. Always.
- Look for it: stripe.com, framer.com, vercel.com.
14 · Section
Lesson 12 · The hairline rule
A single 1-pixel horizontal line that organizes everything below it. No section header is complete without one. It tells the eye 'this is a new section' faster than any heading or whitespace alone. Set it at 1px in a soft neutral and let the rest of the design breathe around it.
- Color: `border-line-1` or `rgba(0,0,0,0.08)`. Never pure black.
- Width: 1px. Always 1px. 2px makes it feel like a divider; 1px feels like a typesetter's mark.
- Place it above section eyebrows — eyebrow text sits 24px below the rule.
- Try it: take any page where sections feel mushy. Add a hairline above each section header. Suddenly typeset.
- Look for it: every magazine ever printed.
15 · Section
Module 3 — Color moves
One accent color, repeated three times per screen. That is the rule. Everything else is ink, paper, and a hairline. Designers who can resist using a second accent always look more confident than designers who can't. The next six moves are how to get maximum mileage out of a single color.
16 · Section
Lesson 13 · The single accent rule
Pick one color. Use it three times on the page — never more, never less. Once in a button. Once in a hover state or link. Once in a small graphic mark. Three appearances make it feel intentional; four or more make it feel decorated. The discipline is the whole game.
- Pick the accent before you build anything else. Lock it.
- Three appearances per screen. Count them. If you have four, kill one.
- Use it on the most important CTA, the active link, and one small graphic detail.
- Trap: using your accent for body text. Body text is `text-text-1`. Accent is for moments.
- Look for it: Stripe (purple), Linear (purple), Vercel (black-and-white discipline).
17 · Section
Lesson 14 · The hover recolor
Links and small CTAs sit in the body text color at rest, then shift to the accent color on hover. Never the other way around — accent at rest is loud and tiring; accent on hover is a wink. The rest state is the page; the hover is the conversation.
- CSS: `color: var(--text-1); transition: color 200ms ease-out; &:hover { color: var(--accent); }`
- Apply to inline links, secondary nav, footer links — anywhere the cursor lives.
- Pair with a 1px underline that thickens to 2px on hover. Subtle but tactile.
- Trap: changing background color on hover for inline links. Looks like spam highlighting.
18 · Section
Lesson 15 · Color-coded sections
Each major section of the page gets its own background tint — not a border, not a divider, but a soft full-width wash. The reader unconsciously tracks which section they're in by the color shift. It works for the same reason chapter dividers work in books.
- Use 3–4 background tints across the page: paper white, warm cream, cool grey, soft mint.
- Lightness range: 96–99% in OKLCH. Anything darker competes with the text.
- Transition between sections is hard-cut, not gradient. The cut is the chapter break.
- Look for it: airbnb.com/host, notion.so/templates.
19 · Section
Lesson 16 · The badge pill
Small uppercase labels in pill shape — 1px border, 10–11px text, 8px horizontal padding. Use them sparingly: 'NEW', 'BETA', 'POPULAR', a category tag. The pill makes the label feel like a stamp instead of a span.
- Border: 1px solid in the accent color. Background: transparent or 5% accent tint.
- Text: 10–11px uppercase, letter-spacing 0.1em, in the accent color.
- Padding: 4px vertical, 10px horizontal. `border-radius: 9999px`.
- Tailwind: `inline-flex items-center rounded-full border border-accent px-2.5 py-1 text-[10px] uppercase tracking-wider text-accent`.
20 · Section
Lesson 17 · The soft wash
A full-section pastel background that frames the content inside. Different from a color-coded section because the wash is more saturated and is meant to be felt, not just noticed. Use it once on the page — for the testimonials block, the pricing block, or the CTA — and the rest of the page will feel calmer by contrast.
- Color: 8–12% saturation of your accent, or a pale complementary hue.
- Apply to the section's full width with 96–128px of vertical padding inside.
- Pair with text in `text-text-1` and a subtle inner shadow if it sits between two white sections.
- Use one wash per page. Two and the page starts feeling like a deck.
21 · Section
Lesson 18 · Accent in the period
End the headline with a period — and color only the period in the accent. It's a one-character move that instantly tells the reader 'someone made this on purpose.' The headline reads normally; the period winks. Best move-to-effort ratio in this entire course.
- Wrap the period in a span and color it: `<span className="text-accent">.</span>`
- Works best on declarative headlines: 'Build it.' 'Ship it.' 'Done.'
- Pair with a display serif headline — the dot is a ball terminal, perfect for it.
- Try it: open your homepage hero. Add a period. Color it. Refresh.
- Trap: doing it on every headline. The wink only works once.
Update the homepage hero headline to end with a period in the accent color. Keep the headline in display serif (Fraunces 600, 96px). The period should be the only character in the accent color. Subhead below stays in text-text-3, no change.
22 · Section
Module 4 — Motion moves
Motion is a paragraph break. Use it to mark a transition, not to decorate. The best motion is calm and short — usually 200–400ms with a custom ease curve. The next six moves are the exact timings, easings, and patterns that make a site feel alive without making it feel busy.
23 · Section
Lesson 19 · Word-by-word reveal
The headline animates in one word at a time, each word offset by 60–80 milliseconds. The reader's eye is naturally pulled across the line as the words appear, which means the headline gets read instead of skimmed. Used on hero headlines and section openers — never on body text.
- Wrap each word in a span. Animate `opacity` and `translateY(8px → 0)`.
- Stagger: 60–80ms per word. Total reveal under 800ms.
- Easing: `cubic-bezier(0.22, 1, 0.36, 1)` — feels weighted, not robotic.
- Use Framer Motion's `staggerChildren` or GSAP's `SplitText`.
- Trap: animating every headline on the page. Hero only. Maybe one section opener.
24 · Section
Lesson 20 · Count-up numbers
When a stats section scrolls into view, the numbers count up from 0 to their target value over 1.2 seconds. It's the most attention-grabbing move in this whole course — eyes go to motion, and a number changing is the most legible motion possible.
- Trigger on `IntersectionObserver` when the section enters viewport.
- Duration: 1.2s. Easing: `easeOutExpo` — fast at the start, settles at the end.
- Use `framer-motion`'s `useMotionValue` + `animate` for type-safe count-up.
- Format the number as it animates — '$0 → $4,200,000' with thousand separators throughout.
- Trap: counting up too slowly. Anything over 1.5s feels broken.
25 · Section
Lesson 21 · The magnetic button
When the cursor approaches a CTA, the button gently tilts or shifts up to 6 degrees toward the cursor. It's the single most delightful micro-interaction on the modern web because it makes the button feel like it can see you. Use sparingly — one magnetic element per page.
- Library: GSAP's `Mouse.follow` or a 30-line vanilla JS handler on `mousemove`.
- Range: button moves up to 12px in any direction, max 6° rotation.
- Easing: `power2.out`, duration 400ms — feels physical, not laggy.
- Reset to rest position over 600ms when the cursor leaves.
- Look for it: awwwards.com winners — it's almost a meme at this point. Use it well.
26 · Section
Lesson 22 · Scroll-driven progress
A 2-pixel horizontal bar pinned to the top of the screen that fills as the article scrolls. It's the smallest possible affordance that turns long-form pages from intimidating into navigable. The reader always knows how much is left, which is the entire reason they don't bounce.
- Height: 2px. Color: the accent. Position: `position: fixed; top: 0; left: 0;`.
- Width animates from 0% to 100% based on `scrollY / (documentHeight - viewportHeight)`.
- Use CSS scroll-driven animations: `animation-timeline: scroll();` — no JS needed.
- Show only on article pages, not the homepage.
- Look for it: every long-form publication — Stratechery, The Verge features.
27 · Section
Lesson 23 · The ticker marquee
A horizontal scrolling row of logos, quotes, or one-liners that loops continuously at a slow pace — about 30 seconds per loop. It draws the eye without demanding attention and makes a row of trust logos feel alive instead of static. The slow speed is the whole trick.
- Speed: 30 seconds for one full loop of the row. Faster feels frantic.
- Pause on hover so users can read individual items.
- Duplicate the content twice in the DOM to make the loop seamless.
- CSS: `animation: marquee 30s linear infinite;` with `transform: translateX(-50%)`.
- Use for: customer logos, testimonial quotes, ticker headlines.
28 · Section
Lesson 24 · The entrance stagger
When a section scrolls into view, child elements (cards, list items, image grid cells) fade up one after another with an 80-millisecond offset. It's the most professional 'the page came alive' move you can ship. Costs 10 lines of code with Framer Motion.
- Each child: `opacity: 0 → 1`, `translateY: 16px → 0`, duration 500ms.
- Stagger: 80ms between children. Six items finish in under 1 second.
- Easing: `cubic-bezier(0.22, 1, 0.36, 1)` (same as word-reveal — your house ease).
- Trigger: `whileInView={{ opacity: 1 }}` with `viewport={{ once: true, margin: '-80px' }}`.
- Trap: staggering on every section. Pick three sections per page. The rest pop in instantly.
Add an entrance stagger to the three feature cards in the Features section using Framer Motion. Each card fades from opacity 0 + translateY 16px to opacity 1 + 0, 500ms duration, cubic-bezier(0.22, 1, 0.36, 1) easing. 80ms stagger between cards. Trigger once when the section enters the viewport with -80px margin.
29 · Section
Module 5 — Editorial moves
Stop writing landing-page copy. Start writing the magazine version. Sections become essays, FAQs become Q&A blocks, the footer becomes a masthead. The next six moves are how you make a product site feel like a publication — which is the highest compliment a product site can get in 2026.
30 · Section
Lesson 25 · Testimonial attribution
A quote, set in display serif at 28–32px, followed by attribution on a single line: name · role · photo. No quote marks decorating the corners, no card around the testimonial, no gradient background. Just the quote, like it's running in a journal.
- Quote text in your display serif, 28–32px, italic, line-height 1.3.
- Attribution line: `Name · Role at Company` in 13px micro-caps, with a 32px round photo.
- No quote marks, no boxes, no gradient cards. Resist all of it.
- Three testimonials on the page, max. Set them in a vertical column with hairlines between.
- Look for it: stripe.com/customers, vercel.com/customers — both pure editorial.
31 · Section
Lesson 26 · FAQ as essay
Kill the accordion. Set the questions in italic display serif and the answers in body text immediately below — no toggles, no collapsible cards. The reader scans the questions and reads the ones they care about. It also doubles your SEO value because all the content renders.
- Question: 22–24px display serif, italic, weight 500.
- Answer: 16px body, regular weight, set in a slightly narrower column (max-w-prose).
- 32px space between Q and A. 64px between Q&A pairs.
- No icons, no chevrons, no boxes — just questions and answers in a column.
- Trap: accordion FAQs. They feel like a contact form. They are bad. Kill them.
32 · Section
Lesson 27 · Pricing as comparison
Three columns side by side, with the middle one elevated by a single step — slightly larger padding, slightly heavier border, a 'Most popular' eyebrow on top. The visual hierarchy does the recommending for you. No gradient backgrounds, no glow effects, no 'CHOOSE WISELY' theatrics.
- Three columns. Always three. Two looks unfinished, four looks indecisive.
- Middle column: 8px more vertical padding, 1px border in accent color, 'Most popular' badge on top.
- Each column: name, price, single sentence, feature list, one CTA.
- Hairline rules between every two features in the list.
- Look for it: linear.app/pricing, vercel.com/pricing.
33 · Section
Lesson 28 · The masthead footer
Set the footer like the masthead of a magazine: small uppercase categories down the left, names and roles down the right, a tiny logo at the bottom-left, copyright in 11px micro-caps at the bottom-right. It signals that this is a publication, not a SaaS landing page.
- Layout: 4 columns of links — Product, Company, Resources, Legal.
- Each column header: 11px uppercase, letter-spacing 0.18em, in `text-text-3`.
- Links: 13px body, regular weight, generous line-height (1.8).
- Bottom row: small wordmark left, '© 2026 Company. Made by hand in [city].' right.
- Look for it: every quality publication footer — The Verge, Aeon, Are.na.
34 · Section
Lesson 29 · The trust block
Customer logos at 40% opacity, single row, no carousel, no animation, no card backgrounds. The opacity is the move — it tells the eye 'these are credentials, not advertisements.' Five to seven logos, all the same height, evenly spaced. Quiet authority beats loud bragging every time.
- Opacity: 40–50%. Hover state: 100% opacity, 200ms transition.
- Logo height: 32–40px. Width auto. Set in grayscale, not color.
- 5–7 logos in a single horizontal row. No carousel. Ever.
- Tiny eyebrow above: 'Trusted by teams at' in 11px micro-caps.
- Trap: logo soup with 30 logos in a 3-row grid. That's a wall, not credibility.
35 · Section
Lesson 30 · Before / after compare
When showing a transformation — old design vs. new, before AI vs. after, ugly vs. polished — use a draggable split-frame slider, not two stacked images. The interaction is the proof. Users drag back and forth, comparing pixel by pixel, and the credibility lands in their hands instead of being claimed by you.
- Two images stacked, the top one clipped with `clip-path: inset(0 50% 0 0)`.
- A vertical handle in the middle, draggable left and right.
- Add a tiny 'BEFORE' label top-left and 'AFTER' top-right in micro-caps.
- Library: `react-compare-slider` does this in 5 lines. Or roll it in 30.
- Trap: two side-by-side images with no interaction. The whole point is the dragging.
Build a before/after image compare component using react-compare-slider. Two 16:9 images stacked, draggable vertical handle in the middle. Tiny 'BEFORE' label top-left and 'AFTER' label top-right, both in 10px uppercase letter-spacing 0.2em, white with 60% opacity. Container has 12px border radius and a 1px hairline border.
36 · Section
Glossary — the words editors use
Twelve words that separate someone who 'does design' from someone who reads design. Use these correctly in a sentence and people will assume you've shipped a magazine.
- Kicker — the small line above a headline that gives context. Same as an eyebrow.
- Rag — the right edge of a left-aligned paragraph. A 'good rag' has no ugly shapes.
- Widow — a single word stranded on the last line of a paragraph. Kill it.
- Orphan — a single word stranded at the top of a new column. Also kill it.
- Leading (rhymes with sledding) — the vertical space between lines of text.
- Baseline grid — the invisible horizontal lines every line of text sits on. Aligning to it is the cleanest type move there is.
- Optical alignment — nudging characters by 1–2px so they look aligned even when math says otherwise. Punctuation often needs it.
- Hairline — a 1-pixel rule used as a divider. The thinnest possible mark of organization.
- Accent — the single color used 3 times per screen to create focal points.
- Eyebrow — a tiny uppercase label above a heading. Same as a kicker.
- Masthead — the credits panel of a publication. Often used as a footer pattern.
- Drop cap — the oversized opening letter of an article, set 4–5 lines tall.
37 · Section
Capstone — Pick ten, ship one page
Pick one real page on something you're building — a landing page, an article, a pricing page. Open this guide. Pick ten moves from the thirty above. Apply all ten. Ship the page. Then come back and self-review with the rubric below. If you score 7/10, you've already lapped 95% of the AI-built pages on the internet.
- Brief: 'I'm rebuilding [page name]. I will apply these 10 moves: [list them by lesson number].'
- Time-box: 90 minutes. No more. The discipline is in the cut, not the polish.
- Self-review rubric: (1) Can I name the #1 thing on the page in 1 second? (2) Is there one accent, used 3 times max? (3) Are the headlines two fonts maximum? (4) Is there a hairline rule above every section? (5) Is there one full-bleed or one bento? (6) Is there one motion move, calm and short? (7) Is there an editorial detail — eyebrow, drop cap, pull quote, masthead? (8) Did I cut at least one section that didn't earn its space? (9) Does the page work on a phone? (10) Would I screenshot it and put it on Are.na?
- If you score 7+, ship it. If 5–6, run the squint test and cut one more thing. If under 5, start with three moves instead of ten next time.
I'm rebuilding [PAGE NAME] for [PRODUCT]. I'm applying these 10 moves from The Moves course:
1. [Lesson #N — name]
2. [Lesson #N — name]
... (list all 10)
The page audience is [USER]. The page goal is [ACTION]. The feel is [METAPHOR — e.g. 'the inside of a Muji store'].
Do NOT use: purple gradients, glassmorphism, Inter font, centered hero with one CTA, AI-generated stock imagery.
Return the page in TanStack route file format, using the existing design tokens from src/styles.css.
Thirty moves. Pick ten on every page. Ship the page. Repeat.