I built a SaaS with Cursor in 3 days: the full story

/

Friday morning I had an idea. Sunday night I had a working SaUs with Stripe payments, user auth, and a dashboard. Here is exactly what I built, what went wrong, and what I would do differently.

What SaAS did I build with Cursor in 3 days?

A tool that generates personalized workout plans from user goals. Users sign up, answer 5 questions, get a PDF. Cursor wrote the entire backend – Next.js API routes, Supabase database schema, Stripe checkout flow, PDF generation. I prompted component by component. 12 hours of active work across 3 days. Total code generated: ~3,000 lines. Bugs found before launch: 7. Bugs found after launch: 2. Read more in my deployment guide.

How did I structure the prompts for a full SaAS?

I did not prompt the whole app at once. I wrote one prompt per file. “Create the Stripe checkout page with price ID from env.” “Write the Supabase INSERT function for user goals.” Each prompt was a single, testable unit. When a prompt failed, I fixed just that file. This modular approach meant I never had to debug the entire codebase. I explain this method in my prompt engineering guide.

🗠 SaAS Prompt Breakdown
Auth 1 prompt Supabase Auth with Google OAuth
Payments 2 prompts Stripe checkout + webhook
Dashboard 3 prompts User profile, plan list, settings
PDF gen 1 prompt Template + data merge

What broke during the 3 days?

Three things. Stripe webhook signature verification took 2 hours because the AI used an old SDK pattern. PDF generation crashed on Unicode characters – the AI did not load a font. User session timing out after 15 minutes – the AI forgot to set Supabase session duration. All three were fixable with 1-2 debug prompts each. The pattern was consistent: the AI handles the happy path but misses configuration details. See my debugging guide for the exact workflow.

🔥Controversial take

A SaUs built in 3 days is not production-ready. It is demo-ready. I spent 2 more weeks hardening it – adding rate limiting, error boundaries, monitoring, and a proper CI/CD pipeline. The 3-day prototype got me the first paying customer. The 2-week hardening kept them paying. Both phases matter.

Copy-paste: SaQS prompt template
File: [path]
Stack: Next.js + Supabase + Stripe + Vercel
Task: [one specific function or component]
Constraints:
- Use [specific library version]
- Handle error case: [scenario]
- No hardcoded values - use env vars
- Add TypeScript types
💡 Coach channel: The constraint section prevents 80% of common AI mistakes. Be specific about the library version – the AI defaults to latest which may not match your project.

References

  1. Vibe Deploying – Vibe Coding Channel
  2. Prompt Engineering Guide – Vibe Coding Channel
  3. How to Debug AI Code – Vibe Coding Channel
  4. Stripe API Documentation

Leave a Reply

Your email address will not be published. Required fields are marked *