How We Cranked Out a Full SaaS in 20 Days
The Sprint Begins – Defining Scope in 48 Hours
We stopped talking and started writing. The client wanted a lead‑capture SaaS for real‑estate agents, with email drip, WhatsApp alerts, and a simple admin panel. No fancy AI, no endless feature list – just three core flows. We wrote a one‑page spec, listed 12 user stories, and set a hard deadline: 20 days. That forced us to cut the fluff and focus on paisa vasool features.
First 24 hours were all about validation. I called a friend who runs a brokerage in Delhi, showed him the mockup on Figma, and got his thumbs‑up after a 3 AM debugging session on my laptop. He said, "Chalta hai, just make it work." That was the green light. We priced the MVP at ₹85K for the first tier, ₹3L for the enterprise tier – a range that matches the Indian market.
Lesson: If you can’t explain the product in a coffee break, you’re still dreaming. Stop dreaming, start building.
Choosing the Stack – No‑Brainer Decisions
We went with the Vercel‑Next.js‑Supabase combo. Why? Vercel gives instant global CDN, free tier covers our traffic, and Next.js lets us ship server‑side rendering without a separate server. Supabase provides Postgres, auth, and real‑time without managing infra. It’s a classic jugaad that works for Indian founders on a shoestring.
Alternatives were considered: building a custom Node‑Express API on a DigitalOcean droplet, or buying a pricey Firebase plan. Both added latency or cost. The trade‑off? Supabase’s UI is less polished than Firebase, but we got full SQL control for just ₹0 until we crossed 500 GB. That’s a win.
We also added n8n for workflow automation – it stitches the email drip and WhatsApp Business API without writing a webhook for each event. The whole stack stayed under ₹5K/month in the first month.
Architecture & Data Layer – Blueprint in Code
We split the app into three zones. The front‑end (Next.js) lives in /pages and /components. The API routes (also Next.js) talk to Supabase via its JS client. The automation layer (n8n) runs on a cheap Hetzner box, listening to Supabase triggers.
Database schema was a single table for leads, plus an audit log. Here’s the SQL we ran in Supabase console:
create table leads ( id uuid primary key default gen_random_uuid(), name text not null, phone text not null, email text, source text, created_at timestamptz default now() );create table audit ( id uuid primary key default gen_random_uuid(), lead_id uuid references leads(id), action text, performed_at timestamptz default now() );
We added a row‑level security policy to ensure agents only see their own leads. One line of policy saved us a potential security nightmare.
Result: a clean, auditable data model that scales to a few thousand rows without sharding. Simple beats complex every time.
Building Core Features – From Wireframe to Working UI
The dashboard went live in 5 days. We used Tailwind CSS for rapid styling – the className strings grew like a grocery list, but the payoff was instant visual polish. The lead form uses React Hook Form; validation lives in the client and repeats on the server for safety.
Code snippet for the submit handler:
const onSubmit = async data => {const { error } = await supabase.from('leads').insert({
name: data.name,
phone: data.phone,
email: data.email,
source: 'web'
});
if (error) {
toast.error('Failed, try again');
} else {
toast.success('Lead saved');
// fire n8n webhook
fetch('https://n8n.mycompany.com/webhook/lead', {method: 'POST', body: JSON.stringify(data)});
}
};
We integrated Razorpay for subscription billing. The checkout page loads Razorpay’s script, opens the modal, and on success we write a subscription record to Supabase. It took two evenings to get the webhook signature verification right – a classic 3 AM debugging story.
We also built a WhatsApp alert flow: Supabase trigger → n8n → WhatsApp Business API. Agents get a message within seconds of a new lead. The whole pipeline runs under 2 seconds end‑to‑end.
One‑liner: Automation turned a manual chase into a push notification.
Deploy, Monitor, Iterate – Keeping the Ship Afloat
Deployment was a single command. vercel --prod pushed the Next.js app, Supabase changes were already live, and n8n was docker‑compose on Hetzner. We set up Vercel’s built‑in analytics and Supabase’s log drain to a Logflare bucket – cheap and instant.
Monitoring revealed a spike: agents were hitting the lead list API every 5 seconds, causing rate‑limit warnings. We added a simple caching layer using Vercel Edge Functions – store the last 20 leads per user for 30 seconds. That cut the DB calls by 80% and saved us ₹2K/month on Supabase bandwidth.
Iteration cycle: feedback from the Delhi brokerage came in day 12. They wanted bulk import via CSV. We added an /api/upload endpoint, used papaparse on the client, and a Supabase function to batch insert. The feature shipped in a day, and they paid the extra ₹30K upgrade without a second thought.
Bottom line: ship fast, listen hard, fix cheap.
What We Learned – No‑Fluff Takeaways
Most founders waste money on fancy UI kits. We spent ₹12K on a premium icon set that never got used. The real value was in a solid data pipeline.
Choosing managed services (Vercel, Supabase, n8n) shaved off 3 weeks of ops work. The trade‑off is vendor lock‑in, but for a 20‑day MVP that’s acceptable.
Team velocity spikes when you set a hard deadline and keep scope tight. The 20‑day sprint forced us to say "no" to every nice‑to‑have.
Ready to turn your idea into a ₹85K‑₹3L SaaS in under a month? RAGSPRO can make it happen. Drop us a line, and we’ll sketch the roadmap over chai.
Want to Build Something Like This?
Get your MVP built in 20 days — starting at ₹49,999
Book Free Discovery Call →