saasprokit
  • Next.js kit
  • TanStack kit
  • Pricing
  • FAQ
  • About
v1.0.0See what shipped

Multi-tenant SaaS boilerplate for Next.js 16Better Auth and orgs, wired the day you clone

auth·2FA·orgs·roles·billing·email·uploads·deploys
Get the kit - 200$See the Cloudflare demo(opens in a new tab)
  • CloudflareCloudflare demo@Cloudflare|multi-tenant.saasprokit.com(opens in a new tab)
  • VercelVercel demo@Vercel|Not deployed yet
  • CloudflareDocs@Cloudflare|docs.saasprokit.com(opens in a new tab)

1010

Shared packages

Auth, database, email, design system, i18n, storage, logging

2828

App routes

Dashboard, orgs, account, admin, and every auth flow

190+190+

Unit tests

Vitest across auth, billing and data access - plus 25 Playwright suites

33

Deploy targets

Cloudflare Workers, Vercel, Docker/AWS - verified in production

Organization dashboard showing members, role, and quick actions for a workspace
Multi-tenant

Orgs and personal accounts

  • Org-scoped subscriptions with one Stripe customer per org
  • Owner / admin / member roles with route-level guards
  • Invite flows with email confirmation and seat handling
  • Slug-based URLs validated at the edge
Sign-in form with email, password, remember me, and Google and GitHub buttons
Magic link form asking only for an email address
Authentication

Every auth flow you'll ever need

  • Email + password with verification and recovery flows
  • Magic link sign-in and one-time code fallback
  • Google and GitHub OAuth out of the box
  • TOTP 2FA with backup codes and recovery
Plan picker with Free, Pro and Enterprise tiers, monthly and annual billing, and the current plan highlighted
Billing

Stripe, wired the right way

  • Per-org customer with subscription scoping and seat limits
  • Self-serve portal for cards, invoices, and cancellation
  • Idempotent webhook handling with replay-safe events
  • Tiered plans in one config file
Members admin table with owner role badge, filtering, bulk invite, and pagination
Hardened

Production security from day one

  • Per-request CSP nonces set by the edge middleware
  • Rate-limited sign-in attempts to deter brute force
  • Audit-ready session and account event tracking
  • Strict TypeScript and Zod validation at every boundary

Read the code before you buy

Verbatim files from the kit, not a marketing rewrite. This is the members page, its queries and the org half of the schema.

import { TableSkeleton } from "@repo/design-system/components/data-table/table-skeleton";
import { SetBreadcrumbs } from "@repo/design-system/components/layout/breadcrumb-context";
import { ContentSection } from "@repo/design-system/components/layout/content-section";
import { getDictionary } from "@repo/internationalization";
import { Suspense } from "react";
import { getActiveOrganization } from "@/lib/organization/queries";
import { orgRoutes } from "@/lib/routes";
import { MembersTable } from "./components/members-table";
import { getMembers } from "./queries";
import { getMemberPermissions } from "./utils";
import { membersSearchParamsCache } from "./validations";

interface MembersPageProps {
  params: Promise<{ locale: string; orgSlug: string }>;
  searchParams: Promise<Record<string, string | string[] | undefined>>;
}

export default async function MembersPage({
  params,
  searchParams,
}: MembersPageProps) {
  const [{ locale, orgSlug }, resolvedSearchParams] = await Promise.all([
    params,
    searchParams,
  ]);
  const [dict, orgContext] = await Promise.all([
    getDictionary(locale),
    getActiveOrganization(orgSlug),
  ]);

  const parsedParams = membersSearchParamsCache.parse(resolvedSearchParams);

  const membersPromise = getMembers({
    ...parsedParams,
    organizationId: orgContext.organizationId,
  });

  const permissions = getMemberPermissions(orgContext.role);

  return (
    <>
      <SetBreadcrumbs
        items={[
          { label: "Organization", href: orgRoutes.home(orgSlug) },
          { label: "Members" },
        ]}
      />
      <ContentSection
        description="Manage your organization members, invitations, and invite links"
        title="Members"
      >
        <Suspense fallback={<TableSkeleton />}>
          <MembersTable
            currentUserId={orgContext.userId}
            errors={dict.errors.action}
            membersPromise={membersPromise}
            organizationId={orgContext.organizationId}
            permissions={permissions}
          />
        </Suspense>
      </ContentSection>
    </>
  );
}

From checkout to running code

No license keys, no download portals. Access is a GitHub invitation to the address you pay with.

  1. 01

    Pay

    Checkout by Polar. Card or PayPal, no account to create.

  2. 02

    Get invited

    GitHub emails you an invitation to the private organization, usually within a minute.

  3. 03

    Clone and ship

    Accept, clone, pnpm install. You are running locally in under five minutes.

One price for the Next.js 16 App Router kit

One payment, lifetime updates, full source. Unlimited projects, any number of developers on your team, no subscription.

NextJs - Better Auth Pro Kits

The kit as it ships today.

$200one-time

  • Next.js 16 App Router
  • Full source, one seat in the private repo
  • Unlimited projects
  • Your whole team may work on it
  • Client and agency work permitted
  • Lifetime updates, no subscription
  • All future releases included
NextJs - Better Auth Pro Kits - 200$

Secure checkout by Polar · GitHub access within minutes · All sales final

Frequently Asked Questions

Short answers, no fine print surprises. The license page has the full text.

Ready to ship your product?

Clone it today and deploy it this week - the plumbing is finished. Or hand it to us: we build your MVP on the same kit, for a fixed price agreed before any code.

Get the kit - 200$Have us build it
saasprokit

A production-grade Next.js SaaS boilerplate. Buy once, ship forever.

GitHub

Product

  • Next.js kit
  • TanStack kit
  • Pricing
  • FAQ

Resources

  • About
  • Contact
  • Changelog
  • License
  • Terms

© 2026 saasprokit

LicenseTerms
SAASPROKIT