All Templates
Day 6 of 77-Day AI Build Challenge

Build Plan Template

Break your SaaS MVP into phased, ordered tasks with files, acceptance criteria, and dependencies.

Download .md
1

Principles

  • Phase 1 must be deployable. Even if minimal, ship something real.
  • No task > 4 hours. If it's bigger, break it down.
  • Dependencies are explicit. Don't start a task until its prerequisites are done.
  • Every task has acceptance criteria. "Done" is defined before you start.
  • Every task lists specific files. No ambiguity about what to create or modify.
2

Example Task (for reference)

This shows the level of detail expected for every task below.

FieldValue
TaskCreate users table with auth sync
Phase1 — Foundation
Dependencies#1 (project setup)
Files to createconvex/schema.ts, convex/users.ts
Files to modifynone
DescriptionDefine users table in Convex schema with fields: clerkId (string, indexed), email (string, indexed), name (string), imageUrl (optional string), plan (string, default "free"), stripeCustomerId (optional string), createdAt (number). Create query getByClerkId and mutation create with full Convex v validators.
Acceptance criteria
  • Schema defines users table with all fields and correct types
  • by_clerkId index exists and is used in getByClerkId query
  • create mutation validates all inputs with v validators
  • npx convex dev runs without schema errors
3

Phase 1: Foundation

Goal: Working skeleton with auth, database, and basic UI. Deployable at the end of this phase.

Task 1: Project scaffolding

  • Dependencies: None
  • Files to create: Project root files
  • Files to modify: None
  • Description: Initialize project with [framework]. Install core dependencies: [list them]. Configure TypeScript strict mode. Set up Tailwind with custom design tokens. Initialize [database].
  • Acceptance criteria:

- [ ] npm run dev starts without errors

- [ ] TypeScript strict mode enabled

- [ ] Tailwind styles working

- [ ] [Database] connected and syncing

Task 2: Database schema + seed data

  • Dependencies: #1
  • Files to create: [schema file, seed file]
  • Files to modify: None
  • Description: Define all tables from ARCHITECTURE.md. Add indexes for every query pattern. Include a seed script with test data for development.
  • Acceptance criteria:

- [ ] All tables defined with correct field types

- [ ] Every query pattern has a matching index

- [ ] Seed script populates test data

- [ ] No schema validation errors

Task 3: Authentication setup

  • Dependencies: #1
  • Files to create: [auth config, webhook route, user sync function]
  • Files to modify: [layout file, middleware]
  • Description: Set up [auth provider]. Configure sign-in/sign-up pages. Create webhook handler for user.created, user.updated, user.deleted events. Sync auth users to database.
  • Acceptance criteria:

- [ ] Can sign up with email and OAuth

- [ ] User record created in database on signup

- [ ] Protected routes redirect to sign-in

- [ ] Sign-out clears session and redirects

Task 4: App layout + navigation

  • Dependencies: #1, #3
  • Files to create: [layout, sidebar, header components]
  • Files to modify: [root layout]
  • Description: Create app layout with sidebar navigation, header with user menu, and responsive mobile menu. Marketing pages use a separate layout with no sidebar.
  • Acceptance criteria:

- [ ] Sidebar shows navigation items

- [ ] Header shows user avatar and sign-out

- [ ] Mobile menu works on small screens

- [ ] Marketing pages don't show app chrome

Task 5: Deploy skeleton

  • Dependencies: #1-#4
  • Files to create: None
  • Files to modify: [deployment config]
  • Description: Deploy to production. Set all environment variables. Verify auth works on production domain. This is the "walking skeleton" — everything after this builds on a working deployed app.
  • Acceptance criteria:

- [ ] Production URL loads without errors

- [ ] Can sign up and sign in on production

- [ ] All environment variables set

- [ ] SSL certificate active

4

Phase 2: Core Feature

Goal: The main value proposition works end-to-end.

Task 6: [Core entity] data model + CRUD

  • Dependencies: #2
  • Files to create: [backend file, type definitions]
  • Files to modify: [schema if not done in #2]
  • Description: [Specific description of what to build, referencing your data model]
  • Acceptance criteria:

- [ ] [Specific testable criterion]

- [ ] [Specific testable criterion]

- [ ] [Specific testable criterion]

Task 7: [Core entity] list page

  • Dependencies: #6, #4
  • Files to create: [page file, component files]
  • Files to modify: [sidebar nav to add link]
  • Description: [Specific description]
  • Acceptance criteria:

- [ ] [Specific testable criterion]

- [ ] [Specific testable criterion]

- [ ] Empty state shown when no items exist

Task 8: [Core entity] detail page

  • Dependencies: #6, #4
  • Files to create: [page file, component files]
  • Files to modify: [list page to add links]
  • Description: [Specific description]
  • Acceptance criteria:

- [ ] [Specific testable criterion]

- [ ] [Specific testable criterion]

- [ ] Loading skeleton shown while data fetches

Task 9: [Core entity] create/edit flow

  • Dependencies: #6, #7
  • Files to create: [form component, modal or page]
  • Files to modify: [list page to add create button]
  • Description: [Specific description]
  • Acceptance criteria:

- [ ] [Specific testable criterion]

- [ ] Form validation with inline error messages

- [ ] Success toast on create/edit

Task 10: [Secondary feature]

  • Dependencies: [list]
  • Files to create: [list]
  • Files to modify: [list]
  • Description: [Specific description]
  • Acceptance criteria:

- [ ] [Specific testable criterion]

- [ ] [Specific testable criterion]

5

Phase 3: Monetization

Goal: Users can pay and get premium features.

Task 11: Stripe setup + checkout

  • Dependencies: #3, #5
  • Files to create: [stripe utility, checkout action, pricing page]
  • Files to modify: [user schema to add stripeCustomerId]
  • Description: Install Stripe SDK. Create checkout action that generates a Stripe Checkout session URL. Build pricing page with plan comparison. Handle redirect back from Stripe.
  • Acceptance criteria:

- [ ] Pricing page shows Free vs Pro comparison

- [ ] Clicking "Upgrade" opens Stripe Checkout

- [ ] Successful payment redirects back to app

- [ ] Works with Stripe test cards

Task 12: Stripe webhooks

  • Dependencies: #11
  • Files to create: [webhook route handler]
  • Files to modify: [user mutations to handle plan changes]
  • Description: Create webhook handler for: checkout.session.completed, invoice.paid, customer.subscription.deleted. Verify webhook signature. Update user plan in database.
  • Acceptance criteria:

- [ ] Webhook signature verified before processing

- [ ] User plan updated to "pro" on successful checkout

- [ ] User plan reverted to "free" on subscription deletion

- [ ] Duplicate events handled idempotently

Task 13: Plan gating

  • Dependencies: #12
  • Files to create: [gate component, plan check utility]
  • Files to modify: [all pro-only features]
  • Description: Create a gate wrapper and utility function that checks the user's plan. Apply to all Pro-only features. Free users see an upgrade prompt instead of the feature.
  • Acceptance criteria:

- [ ] Pro features hidden behind plan check

- [ ] Free users see upgrade prompt with CTA

- [ ] Plan check runs on both client and server

6

Phase 4: Polish + Launch

Goal: Production-ready with error handling, SEO, and pre-launch checks.

Task 14: Error handling + loading states

  • Dependencies: #1-#13
  • Files to create: [error boundary, 404 page, loading components]
  • Files to modify: [every page/component that fetches data]
  • Description: Add loading skeletons to every data-fetching component. Add error boundaries. Create 404 page. Add toast notifications for all async actions. Ensure no blank screens or unhandled errors.
  • Acceptance criteria:

- [ ] Every page shows a skeleton during load

- [ ] API errors show user-friendly toast messages

- [ ] 404 page renders for unknown routes

- [ ] No unhandled promise rejections in console

Task 15: SEO + meta tags

  • Dependencies: #4
  • Files to create: [sitemap, robots.txt, OG image]
  • Files to modify: [every marketing page for metadata]
  • Description: Add unique title and meta description to every page. Add Open Graph tags for social sharing. Generate sitemap.xml and robots.txt. Add structured data where appropriate.
  • Acceptance criteria:

- [ ] Every page has unique title and description

- [ ] Social sharing preview works (test with sharing debugger)

- [ ] Sitemap lists all public pages

- [ ] Robots.txt allows crawling

Task 16: Final review + testing

  • Dependencies: All
  • Files to create: None
  • Files to modify: [anything found during review]
  • Description: Run through the full Review Checklist (Day 7 template). Test every user flow. Check auth on every route. Verify Stripe in live mode. Test on mobile.
  • Acceptance criteria:

- [ ] All Review Checklist items pass

- [ ] npm run build succeeds with zero errors

- [ ] Core flows work on mobile

- [ ] Stripe live mode tested with real card

Task 17: Launch

  • Dependencies: All
  • Files to create: None
  • Files to modify: [environment config for production]
  • Description: Final production deploy. Verify all environment variables. Test signup → core feature → checkout → pro feature flow in production. Post announcement.
  • Acceptance criteria:

- [ ] Production deploy successful

- [ ] Full user journey works on production

- [ ] Monitoring/error tracking active

- [ ] Launch announcement posted

7

Critical Path

The longest chain of dependent tasks that determines the minimum build time. If any of these slip, the whole project slips.

#1 (Setup) → #2 (Schema) → #6 (Core CRUD) → #7 (List) → #9 (Create/Edit) → #11 (Stripe) → #12 (Webhooks) → #13 (Gating) → #16 (Review) → #17 (Launch)

Parallel work possible:

  • #3 (Auth) and #2 (Schema) can run in parallel after #1
  • #4 (Layout) can start after #1, doesn't need #2
  • #14 (Error handling) and #15 (SEO) can run in parallel after Phase 3
8

Progress Tracker

PhaseTasksCompleted
Foundation#1-#50/5
Core Feature#6-#100/5
Monetization#11-#130/3
Polish + Launch#14-#170/4
Total170/17

Want the AI to generate task-specific Claude Code prompts for each task? Try Build a Startup →

Skip the manual work

Want the AI to fill this out for you?

Build a Startup walks you through every step with a conversational AI that asks the right questions and pushes back on bad decisions.

Try Build a Startup — Free