Early Bird50% off SaaS Starter Kit — only for the first 100 buildersGrab it →
pealdev
Templates
BlogRoadmapOur StoryChangelogUI Kit
Get Started
pealdev

Premium Next.js templates built by two developers who actually use them in production.

TemplatesBlogOur StoryChangelogNewsletter

Dev stories, new templates, zero spam.

Subscribe →
Earn 20% — become a partnerJoin the community
Custom Development
Schedule a meeting →

Can't find what you need? We'll build it.

Custom features, weird integrations, full apps from scratch — we've done it all. Fair warning: we're not cheap, but we're fast, we don't ghost, and the code actually works in production. Shocking, we know.

Next.js & ReactAPI IntegrationsFull-stack AppsAuth & PaymentsDatabasesDeployment
Terms of ServicePrivacy PolicyRefund PolicyLicensing
© 2026 peal.dev. All rights reserved.
Built with caffeine not even jokingsomewhere around coffee #347 we said "let's start counting." we never did.if peal saved you a late night or two, you could fuel our next one buy us a coffeeMade in Romania yep, Romanialand of fast internet, Dracula's castle, and developers who ship at 3am because the mountains outside the window are too pretty to sleep through.seriously though — come visit sometime. the food alone is worth the flight Listen to this
All templates
SaaSComing soon

SaaS Starter Kit

Auth, billing, teams, dashboards, and admin panel — the full stack you need to launch a SaaS. Stop rebuilding the same foundation every time.

Built with

Next.jsTypeScriptTailwindStripeDrizzle ORMBetter Auth
Ștefan

Ștefan walks you through it

Honest breakdown — no marketing fluff

Stop building the same infrastructure for every SaaS.

A production-ready Next.js 16 starter that handles auth, billing, teams, and dashboards so you can focus on what makes your product actually different. The foundation you keep rebuilding — done once, properly.


The Problem

You've got a SaaS idea. You pick Next.js. You pick Stripe. You pick an auth library. And then you spend the next month:

  • Wiring auth to Stripe so paying users get access and churned users don't
  • Building a team system with invites, roles, and permission checks on every route
  • Creating an admin panel because you need to see what's happening without running SQL queries
  • Debugging why the webhook fires but the user's plan doesn't update
  • Writing the same "settings page with name, email, avatar, and password change" for the 12th time
  • Figuring out multi-tenancy — should you use a column, a schema, or a separate database?

By the time the infrastructure works, your motivation is gone and your competitor shipped.

We've been there. Three times. So we built this once — the right way — and never looked back.


What You Get

Auth that's actually complete

Not a "sign in with GitHub" demo. A full auth system:

  • Email/password with verification and password reset
  • OAuth providers (Google, GitHub, Discord) — pre-wired, not documented
  • Session management with secure cookies and CSRF protection
  • Protected routes via middleware — not scattered if (!session) checks
  • Role-based access: owner, admin, member — enforced at the API level

Billing that handles the edge cases

Stripe integration that goes beyond checkout.session.completed:

  • Subscription plans (monthly + annual toggle)
  • Customer portal for self-service plan changes
  • Webhook handlers for every lifecycle event: created, updated, canceled, past_due
  • Grace periods and dunning — your app doesn't break when a card expires
  • One-time payments supported alongside subscriptions
  • Usage-based billing hooks ready for implementation

Teams and organizations

Multi-tenancy that actually works:

  • Create organizations, invite members by email
  • Role hierarchy: owner → admin → member with granular permissions
  • Org-scoped data isolation — queries are automatically filtered
  • Team settings page with member management
  • Pending invites with expiration and resend

Admin panel

Because you need to see what's happening:

  • User list with search, filter, and pagination
  • Subscription status overview per user
  • Manual actions: impersonate user, reset password, revoke access
  • Activity log for audit trails
  • Dashboard with key metrics (MRR, churn, signups)

Developer experience

The boring stuff that makes shipping fast:

  • TypeScript strict mode — zero any, noUncheckedIndexedAccess enabled
  • Database migrations — Drizzle ORM with seed data and a clear schema
  • Environment validation — Zod-validated env vars that fail fast, not at runtime
  • Error boundaries — on every route segment with helpful fallbacks
  • Loading states — skeleton loaders that match the actual layout

The Stack

Next.js 16 (App Router) · TypeScript (strict) · Tailwind CSS 4 · shadcn/ui · Stripe SDK v20 · Better Auth · Drizzle ORM · PostgreSQL

No experimental packages. No beta APIs. Nothing that will break in a month.


What's NOT included (on purpose)

  • No specific business logic — this is a foundation, not a finished product. Your product code goes on top.
  • No email templates — TODO comments mark exactly where to send emails. Pick Resend, Postmark, or whatever you like.
  • No deployment config — works on Vercel, Railway, Fly.io, or anywhere Node runs. We're not going to pick your hosting.
  • No analytics — add Posthog, Mixpanel, or Plausible when you're ready. The hooks are there.

This is infrastructure, not a boilerplate. It does the hard stuff so you can do the interesting stuff.


How fast can you launch?

  1. Clone the repo
  2. Copy .env.example, add your Stripe + database keys
  3. Run npm run db:migrate — database is ready
  4. Run npm run db:seed — test data loaded
  5. npm run dev — you're looking at a working SaaS

Steps 1–5 take about 15 minutes. After that, every line of code you write is product code, not infrastructure.


"But I can just stitch together separate auth and billing templates..."

You can. And in about 6 weeks you'll have something similar — if you handle:

  • The race condition where a Stripe webhook arrives before the auth session is created
  • The edge case where a user is removed from a team but their Stripe subscription is still active
  • The permission check that needs to work in middleware, server components, AND client components
  • The org switcher that needs to update the Stripe customer context without a full page reload
  • The invite flow that needs to create a user, add them to a team, and send an email — atomically
  • The admin impersonation that needs to preserve the admin's session while acting as another user
  • The subscription downgrade that should revoke premium features at period end, not immediately

We already made every one of these mistakes so you don't have to.


What people usually ask

How is this different from the Stripe Checkout Starter? The Stripe Checkout Starter handles payments only. This kit includes payments AND auth, teams, admin panel, multi-tenancy, and role-based access — everything wired together.

Can I use a different auth provider? The auth layer uses Better Auth, which is modular. You can swap providers, but the team/role system is built on top of it, so you'd need to adapt the permission logic.

Do I need a specific database? PostgreSQL is the default and recommended choice. Drizzle ORM also supports MySQL and SQLite, but the migration files are Postgres-specific.

Can I remove features I don't need? Yes. Each feature (teams, admin panel, billing) is in its own module. Delete the folder, remove the route, done. No spaghetti dependencies.

What if I only need one-time payments, not subscriptions? Supported. The billing config has a mode toggle. Set it to "one-time" and the subscription UI is disabled automatically.


Built by Peal.dev

We're Robert and Ștefan. This template exists because we got tired of rebuilding the same SaaS foundation for every new project. Auth, billing, teams, permissions — it's always the same 4–6 weeks of infrastructure before you write a single line of product code.

Now it's 15 minutes. And the code is better than what we used to write under deadline pressure.

What's included

Everything you need to go from zero to production.

Yours forever

One payment. No subscriptions, no renewals. Use it on every personal project you ever build.

A real repo, not a zip

Full git history, proper branches, and the ability to pull updates. The way code should be shared.

Built for production

We run these in our own apps. Every edge case has been caught, every handler stress-tested.

Updates on us

When we improve something, you get it for free. Just pull the latest changes.

Crafted by two developers who care about code quality

No startup hype, no investor money — just clean code we'd use in our own apps. Curious who we are? Read our story (it's fun).

SaaS Starter Kit

SaaS

$125$249

Coming soon

We're still building this one. Drop your email to get notified.

Notify me
Secure payment by Stripe
Robert

“We got mass-tired of copy-pasting the same Stripe webhook handler into every new project, so we packaged it properly. This is the exact code running in our own apps — not a tutorial, not a demo. Just the thing we wished existed when we started.”

Robert, co-founder

Real people, real support. No ticket queue — you email us, we answer. Usually the same day.

We use this ourselves. Every bug fix and improvement we make for our own apps, you get for free.

No subscriptions, ever. Pay once, own it forever. We don't believe in renting code.

Robert
Ștefan

Built by Robert & Ștefan

Read our story (it's fun) →

5.0from early adopters
100%Production ready
<5 minSetup time
0Refund requests

We don't have thousands of customers yet — we have a handful who actually use this in production and keep coming back for more.