· 7 min read · Alican

A dashboard is not a homepage.

We curated 60 page patterns because 'just write a sign-up page' is one of the fastest ways to ship something inconsistent.

Component contracts solve the small-scale problem: how do you tell an AI to write a Button that matches the rest of your buttons. They do not solve the large-scale problem: how do you tell it to write a sign-up flow.

A sign-up flow has structure that is invisible until you list it. Header. Welcome state vs error state. Trust signals (security shield, terms checkbox, social provider grouping). Microcopy that says "Forgot?" not "Forgot password?". Motion: error fields shake; success transitions fade. Haptics on iOS. Specific accessibility rules — focus moves to the first invalid field, errors are announced via aria-live.

Tell the AI 'write a sign-up page' and it picks defaults from training data — usually a Stripe-flavoured form, sometimes a Vercel one, occasionally a 2014 Bootstrap layout. None of them have your trust signals, your microcopy voice, your motion timing.

What a pattern actually contains

A Windcraft pattern is a structured recipe. For sign-in:

  • Layout regions — header, hero (or centered card), social-providers, divider, form, footer
  • States — default, loading, error, partial-success, locked-out
  • Microcopy — exact strings: "Welcome back" not "Sign in", "Continue with GitHub" not "GitHub login"
  • Motion specs — error → 200ms shake, success → 280ms fade-out
  • Haptics — error → notificationFeedback.error, primary tap → impactFeedback.medium
  • Composition rules — only one primary CTA per page; password field has reveal toggle; backup-code option below 2FA

60 patterns, by category

V1 covers nine categories — auth, onboarding, billing, dashboard, ecommerce, blog, marketing, errors, realtime. Each pattern is fed to the AI through MCP via get_page_pattern, returning the structured recipe.

The AI doesn't have to invent the structure of a checkout. It asks the server, gets back: regions, states, microcopy, motion. Then writes that, in your tokens, using your contracts. The output is consistent across every developer on every prompt.

Why this matters for solo founders

If you are one person shipping a SaaS, your homepage and your dashboard and your billing and your settings should all read like the same product. They never do. Patterns are the contract that makes them.

Components keep your buttons consistent. Patterns keep your product consistent.