Start with the summary, not the features. Write one paragraph on the dashboard: who the product is for, what outcome it delivers, and what v1 will not do. That last sentence matters most. Unstated scope is where AI-built products sprawl, and every later decision gets tested against this paragraph.

Then personas — two to four, no more. A persona earns its place by changing decisions: goals that brought them in, pains that make them quit, and tech comfort, which decides how much hand-holding your UI owes. Look at Dan in the example. His "one missed day kills my motivation" pain is the reason streak freezes exist.

Now the spine: features → stories → criteria, in that order, breadth-first. Rough out all your features before writing a single story, and all of a feature's stories before writing criteria. The reason is mechanical: stories hang off features and criteria hang off stories. Write criteria for feature #1 while features #2–7 are still moving, and every change to the feature list forces rework two levels down. Stabilise the list, sanity-check the priorities (they can't all be High), then go one level deeper across the board.

Pages and schema come last, because they're derived. Walk your feature list and give every feature a home on a page and a place for its data. Streakly's check-in feature implies a check_ins table with a one-per-day uniqueness rule; your features imply your schema the same way.

Finish with the orphan test. Pick any criterion and walk up: criterion → story → feature → persona. Pick any persona and walk down. A broken walk means scope creep or dead weight. Fix it here, where it costs minutes.


⚡ VibeMap runs this whole sequence for you in minutes → https://vibemap.ai?utm_source=notion&utm_medium=template&utm_campaign=spec-kit