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.
| 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.
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.
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
Leave a Reply