I'm a 25 year old web developer. I started my career in 2022 and have been
building websites and web apps for clients ever since — landing pages, custom
web apps, business websites. Decent work, but always for someone else. Always
on their timeline, their revisions, their requirements.
I wanted to build something for myself. Something I own. Something that makes
money while I sleep.
So I built KitBolt SaaS Starter — a production-ready Next.js 14 boilerplate.
This is the story of what's inside it and why I built it.
🤔 Why a boilerplate?
Every SaaS application needs the same foundation:
- ✅ User authentication (login, register, password reset)
- ✅ Payment processing
- ✅ A database
- ✅ A user dashboard
- ✅ Email notifications
- ✅ An admin panel
Every developer builds this from scratch. Every. Single. Time.
It takes 3-4 weeks minimum. And it's the most boring part of building a
SaaS — because none of it is your actual product. It's just the plumbing.
KitBolt is that plumbing. Pre-built, tested, and ready to go. Clone it,
fill in your environment variables, and skip straight to building your actual
product.
🛠 The Tech Stack
| Layer | Technology |
|---|---|
| Framework | Next.js 14 (App Router) |
| Language | TypeScript (strict mode) |
| Styling | Tailwind CSS + shadcn/ui |
| Auth | NextAuth v5 |
| Database | Prisma + Supabase PostgreSQL |
| Payments | Stripe |
| Resend | |
| Blog | MDX |
| Deployment | Vercel |
Every piece of this stack is free to start. The only costs are when you
scale — which is exactly when you can afford it.
⚡ What's Actually Built
Let me walk you through every feature — not marketing speak, actual working code.
🔐 Authentication
Full auth flow built with NextAuth v5:
- Login with email and password
- Register with name, email, password
- Forgot password flow
- JWT session strategy
- Middleware that protects dashboard routes automatically
- Redirects authenticated users away from login/register
The Prisma schema includes User, Account, Session, and VerificationToken
models — exactly what NextAuth needs, nothing extra.
🗄️ Database
One command to get your database live:
npx prisma db push
That's it. Your Supabase PostgreSQL database is ready with all tables created.
The schema includes:
- Role-based access — USER vs ADMIN
- Plan-based access — FREE, STARTER, PRO
All built right into the User model.
💳 Stripe Payments
Full subscription billing:
- Checkout session creation via API route
- Webhook handler for
checkout.session.completedandcustomer.subscription.deleted - User plan automatically updates in database after payment
- Billing page in dashboard shows current plan and upgrade options
📊 User Dashboard
Four pages inside the authenticated dashboard:
| Page | What it does |
|---|---|
| Dashboard | Welcome message, stats cards, getting started checklist |
| Billing | Current plan display, upgrade options with Stripe checkout |
| Settings | Update name, change password, delete account |
| Admin | Full user management table — ADMIN role only |
Two transactional email templates built with Resend:
- ✉️ Welcome email — sent automatically on registration
- 🔑 Password reset email — with secure expiring link
Both are HTML emails that look great in any email client.
📝 Blog with MDX
A fully functional blog:
- Write posts in MDX (Markdown + JSX components)
- Reading time calculated automatically
- SEO metadata generated per post
- Two starter posts included out of the box
🌙 Dark Mode
Light and dark toggle built with next-themes. Persists across sessions.
Every single component supports both modes using Tailwind's dark: prefix.
😤 The Hardest Parts
Building the features was the easy part. Here's what actually gave me trouble:
🔴 NextAuth v5 on Vercel
The middleware was too large for Vercel's free tier edge function limit (1MB).
Had to rewrite it using getToken instead of importing the full auth config.
Took hours to debug.
🔴 Supabase Connection
Direct connections don't work on IPv4 networks. Had to switch to the Session
Pooler connection string with port 5432 instead of the direct connection.
🔴 Package Conflicts
@auth/prisma-adapter and next-auth@beta pull in different versions of
@auth/core causing TypeScript errors. Fixed by casting the adapter as any
and aligning versions.
Every one of these bugs took hours to find and fix. That's time a buyer of
this boilerplate never has to spend.
🚀 The Live Demo
See the full thing running here:
👉 kitbolt-saas-starter.vercel.app
Register a free account, explore the dashboard, check the billing page, read
the blog. Everything works.
📦 What's Next
KitBolt SaaS Starter is launching very soon at $49.
If you're a developer who's tired of rebuilding the same foundation on every
project — this is for you.
Follow the journey on Twitter: @kitboltdev
Drop any questions in the comments — I read everything.
Built with ❤️ by KitBolt
Top comments (0)