Originally published at https://zerodrag.cloud/blog
Every time I started a new SaaS project, I spent the
first week doing the exact same things.
Wiring up auth. Integrating Stripe. Setting up a
database. Configuring transactional email.
35+ hours of setup before writing a single line of
actual product logic.
The worst part? None of it was my product. It was
just infrastructure. The same infrastructure every
SaaS needs. Built from scratch. Again.
The breaking point
When I built zerodrag.cloud, I realized something.
The entire backend - auth, payments, database, and
email - was running in production before I'd written
a single line of product code.
The only "setup" was filling in a .env file.
That's it.
No wiring NextAuth. No debugging Stripe webhooks for
four hours. No figuring out why Prisma migrations
weren't running in production.
Just credentials in a .env file. Done.
What I built
I packaged that entire foundation into ZeroDrag - a
production-ready Next.js SaaS starter.
Here's what comes pre-wired:
Auth
- Google OAuth + magic links
- NextAuth v5 + App Router
- Protected routes via middleware
- Server-side session helpers
Payments
- Stripe AND Razorpay (switch via env var)
- Subscription lifecycle handled
- Webhooks pre-configured
- Entitlement sync built in
Database
- PostgreSQL + Prisma ORM
- Works with Supabase, Neon, Railway
- Seed scripts included
- Production-safe migrations
- Resend integration
- React email templates
- HTML + plain text support
AI (Pro)
- OpenAI, Claude, Gemini - unified API
- Keys never exposed to client
- Per-user rate limiting
- Token usage tracking
Error tracking (Pro)
- Sentry pre-configured
- API and webhook error capture
The Razorpay thing
One thing that makes ZeroDrag different from every
other Next.js starter: it supports both Stripe AND
Razorpay out of the box.
If you're building for Indian customers, you already
know the problem. Stripe has poor card acceptance
rates in India. Razorpay doesn't support international
payments well.
ZeroDrag solves this with a unified payment API.
Switch between providers by changing one env var:
PAYMENT_PROVIDER=stripe
PAYMENT_PROVIDER=razorpay
No rewrites. No refactoring. Just change the variable
and deploy.
Who it's for
- Indie hackers shipping real SaaS products
- Solo founders going from idea to paid users fast
- Engineers tired of wiring the same infrastructure again and again
It's not for beginners or no-code builders. It assumes
you know how to build apps — it just removes the
boring, repetitive parts.
Pricing
One-time payment. No subscription.
Would love honest feedback from other developers —
especially on what's missing or what you'd do
differently.
Top comments (0)