Back to Blog
Case Study8 min read

How We Cranked Out a Full SaaS in 20 Days

Published on March 9, 2026·By Raghav Shah

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.

RS

Raghav Shah

Founder of RAGSPRO. Building startups in 20 days. Helping founders launch MVPs faster with AI automation and modern development practices.

Want to Build Something Like This?

Get your MVP built in 20 days — starting at ₹49,999

Book Free Discovery Call →