saasprokit
Getting Started

Features

Complete feature list of this SaaS boilerplate — authentication, billing, multi-tenancy, and more

Features are marked as: Implemented (working in code), Partial (scaffolded or basic implementation), or Planned (not yet built).

Authentication System

Sign-In Methods

FeatureStatusNotes
Email & PasswordImplementedTraditional email/password via Better Auth with email verification
OAuth (Google, GitHub)ImplementedThird-party sign-in via Better Auth plugins
Magic LinksImplementedPasswordless email link authentication (10-min expiry)
Email OTPImplementedOne-time password via email (5-min expiry)
Two-Factor Authentication (2FA)ImplementedTOTP + backup codes at password sign-in. Magic link, email OTP, and OAuth skip 2FA
Account LinkingImplementedLink multiple social providers (Google, GitHub) to one account
Multi-Session SupportImplementedConcurrent sessions with device tracking
Session ManagementImplementedSecure cookie-based sessions with IP/UA tracking (7-day expiry)

Account Management

FeatureStatusNotes
Sign-UpImplementedUser registration with email verification enforced
Password ResetImplementedReset-token email, not the verification flow
Profile ManagementImplementedUpdate name at /account/profile (no avatar uploader)
Security SettingsImplementedView active sessions, enable/disable 2FA at /account/security
Account DeletionImplementedDelete account with confirmation at /account/danger
Email ChangePlannedNot yet implemented

Auth Pages

PageRouteDescription
Sign In/auth/sign-inEmail, password, social, magic link, OTP options
Sign Up/auth/sign-upRegistration with email verification
Forgot Password/auth/forgot-passwordPassword reset request
Reset Password/auth/reset-passwordPassword reset with token
Verify Email/auth/verify-emailEmail verification flow
Two-Factor/auth/2fa2FA challenge screen

Platform Admin

Staff surface at /admin, gated on platform User.role (not org Member.role). Dual RBAC: see Authentication.

FeatureStatusNotes
User list and detailImplemented/admin/users, /admin/users/[userId]
Organization list and detailImplemented/admin/organizations, /admin/organizations/[orgId]
ImpersonationImplementedStaff can impersonate a non-admin user
Ban / unbanImplementedStaff can ban a user

Multi-Organization Support

FeatureStatusNotes
Multiple Organizations per UserImplementedUp to 10 orgs per user (configurable)
Organization CreationImplementedCreate new orgs at /account/new-org
Auto Personal WorkspacePlannedSign-up creates no organization — no scaffold in the repo
Organization SettingsImplementedConfigure name, logo, slug at /[orgSlug]/settings
Organization SwitcherImplementedSidebar dropdown. /org is a post-login redirect hop, not a switcher UI
Default OrganizationImplementedSet and remember preferred org
Member ManagementImplementedInvite, remove, and transfer ownership at /[orgSlug]/members
Role-Based Access ControlImplementedOwner, Admin, Member org roles
Member SuspensionPlannedNo suspendedAt (or similar) on Member — membership is role + org only
Member InvitationsImplementedEmail-based invitations with 7-day expiry
Bulk InvitationsImplementedInvite multiple members at once
Resend InvitationsImplementedRe-send pending invitations
Invite LinksImplementedShareable links with max uses and expiry
Revoke Invite LinksImplementedDeactivate and bulk-revoke links
Teams within OrganizationsPartialSchema exists (Team, TeamMember models), UI not built

Organization Limits by Plan

PlanMembersStoragePrice
Free1100 MB$0
Pro105 GB$19/mo or $190/yr
Enterprise5050 GB$49/mo or $490/yr

Organization creation isn't plan-gated by count — it's capped at 10 total orgs per user (MAX_ORGS_PER_USER) regardless of plan, and only 1 free-tier org is allowed per user (additional orgs require a paid plan). Teams have no per-plan limit since the feature has no UI yet (see below).

Billing & Payment

Subscription Management

FeatureStatusNotes
Subscription PlansImplementedFree, Pro ($19/mo), Enterprise ($49/mo)
Plan Upgrade/DowngradeImplementedFirst paid sub via Checkout. Existing upgrades use the portal. Paid downgrades use changePlanAction + a period-end schedule
Monthly & Annual BillingImplementedAnnual discount (~17% savings)
CancellationImplementedCancel at period end and reactivate; paused is a Stripe status with no app UI
Stripe IntegrationImplementedCheckout, webhooks, customer portal
Auto Customer CreationImplementedStripe customer created on first checkout, not on signup (createCustomerOnSignUp: false)
Webhook ProcessingImplementedIdempotent Stripe event handling with deduplication
Checkout FlowImplementedCheckout with success and canceled pages
Manage BillingImplementedUpdate payment methods via Stripe portal
Usage StatsImplementedDisplay resource usage per org
Free Org LimitImplementedMax 1 free org per user; additional require paid plan
Trial PeriodPartialSchema has trialStart/trialEnd; trialing is in ACTIVE_STATUSES. Checkout does not start trials
Invoice HistoryPlannedView past invoices (via Stripe portal link only)
Usage-Based PricingPlannedNot implemented
Coupon SupportPlannedNot implemented

Multi-Language & Internationalization

FeatureStatusNotes
Multiple LanguagesImplementedEnglish, Spanish, French, German, Portuguese, Chinese
Locale-Based RoutingImplemented/[locale]/... URL structure
Language SwitchingPartialLocale in the URL (/[locale]/…). No language selector in the UI
SEO-Friendly URLsImplementedLocale in URL path
Dictionary-Based TranslationsImplementedType-safe dictionary access with English fallback
Translation WorkflowImplementedLocale JSON translated by hand or with AI coding agents
RTL SupportPlannedNot implemented

File Management & Storage

FeatureStatusNotes
File UploadImplementeduploadOrganizationLogoAction server action — MIME/size validation, org permission, per-plan quota
Local StorageImplementedLocal filesystem storage provider
S3 StorageImplementedAWS S3 provider with configurable credentials
Per-Plan Storage QuotasImplemented100 MB / 5 GB / 50 GB per plan
File MetadataImplementedTracks filename, size, mime type, provider
Allowed TypesImplementedJPEG, PNG, WebP, GIF
Soft DeleteImplementedFiles can be soft-deleted with timestamp
File SharingPlannedNot implemented
File VersioningPlannedNot implemented

Email System

FeatureStatusNotes
Email PreviewImplementedPreview templates in email app (port 3003)
Email TemplatingImplementedReact Email templates in packages/email/ — wired subset vs preview-only; see Templates
Resend IntegrationImplementedPrimary email provider via Resend API
Nodemailer (SMTP)ImplementedFallback SMTP provider
Pluggable ProvidersImplementedSwap between Resend and Nodemailer

Email Templates

Wired today (Better Auth hooks + Stripe hooks): email verification, password reset, magic link, sign-in OTP, verification OTP, 2FA OTP, org invitation, subscription started / upgraded / downgraded / cancelled.

The rest of packages/email/templates/ exist for preview only — they are not sent. See Templates.

Security

FeatureStatusNotes
Security HeadersImplementedHSTS, X-Frame-Options, X-Content-Type-Options, X-XSS-Protection
Content Security PolicyImplementedPer-request nonce-based CSP
CSRF ProtectionImplementedOrigin header validation on server actions
Permissions PolicyImplementedDisables camera, microphone, geolocation, payment, USB
Password HashingImplementedVia Better Auth's default hasher (scrypt)
Session SecurityImplementedSecure cookies, 7-day expiry, revocation on password reset
Webhook Signature VerificationImplementedStripe webhook signature validation
Idempotent Webhook ProcessingImplementedWebhookEvent deduplication model
SQL Injection PreventionImplementedAll queries via Prisma ORM (parameterized); one static $queryRaw health check with no user input
Edge Route ProtectionImplementedmiddleware.ts — optimistic cookie-presence gate; real auth checks happen server-side
Rate LimitingImplementedPer-route limits (sign-in, sign-up, password reset, 2FA) via Better Auth, backed by a database-stored RateLimit model

Monitoring & Logging

FeatureStatusNotes
Structured LoggingImplementedPino logger (separate server + client exports)
Health CheckImplemented/api/health endpoint with database + auth validation
Error BoundariesImplementedReact error boundary components

SEO & Metadata

FeatureStatusNotes
Per-Page MetadataImplementedStatic export const metadata on several pages overrides the root title template; no route uses generateMetadata for param-based dynamic titles
Open GraphImplementedOG tags for social sharing (root layout only)
Twitter CardsImplementedTwitter card metadata (root layout only)
JSON-LDImplementedOrganization + WebSite schemas only (see SEO)
SitemapPartialsitemap.ts returns a single static homepage entry, no dynamic route enumeration
Canonical URLsImplementedCanonical link tag (root layout only)

Design System

FeatureStatusNotes
UI ComponentsImplemented50+ shadcn/ui components (Radix-based)
Landing Page BlocksImplemented12 blocks: hero, pricing, testimonials, FAQ, CTA banner, features grid, feature showcase, code preview, tech stack, deps table, social proof bar, stats section (footer is components/molecules/footer/)
Dark ModePartialThemeProvider follows the system preference. No in-app toggle
Responsive DesignImplementedMobile-first responsive layouts
Direct ImportsPartialConvention is no barrel imports. Remaining package entry: packages/design-system/index.tsx (@repo/auth also has a main of ./index.ts — prefer @repo/auth/server etc.)

Developer Experience

FeatureStatusNotes
TypeScriptImplementedFull type safety across all packages
TurborepoImplementedBuild orchestration with caching
Component LibraryImplementedshadcn/ui components via design-system package
StorybookImplementedComponent documentation (port 6006)
Documentation SiteImplementedCustomer docs: Fumadocs starter apps/docs (port 3004). Kit docs: root docs/ / kit-docs (port 3006), excluded from pnpm dev
Email PreviewImplementedReact Email preview app (port 3003)
Prisma StudioImplementedDatabase inspection (port 3005)
Biome LintingImplementedAutomated linting and formatting via ultracite
Hot Module ReloadImplementedFast development refresh via Turbopack
Code GenerationImplementedPrisma schema to TypeScript types

Testing

FeatureStatusNotes
Unit TestsPartialVitest in @repo/auth, apps/web, and @repo/database (redact.test.ts). @repo/storage / @repo/utils have no test setup. See Testing
E2E TestsImplementedPlaywright specs under apps/web/e2e/ (see Testing)
Integration TestsPlannedNot yet implemented

Infrastructure & DevOps

FeatureStatusNotes
Monorepo SetupImplementedpnpm workspaces with Turborepo
Database MigrationsImplementedpnpm migrate = format + generate + db push. Not prisma migrate dev
Database SeedingImplementedComprehensive seed script
CI/CDImplementedGitHub Actions workflows
Docker SupportPartialDockerfiles exist for web and docs; email, storybook, studio do not have one

Feature Coverage by Package

PackageFeatures
@repo/authAuthentication, dual RBAC (admin + org), permissions, 2FA, magic links, email OTP, Stripe billing, subscriptions, plan management, checkout
@repo/databasePrisma schema, client, types, migrations
@repo/emailReact Email templates with Resend + Nodemailer
@repo/design-system50+ shadcn/ui components, 12 landing page blocks, dark mode
@repo/storageFile uploads with local + S3 providers, quota management
@repo/seoSite metadata, Organization + WebSite JSON-LD schemas
@repo/internationalization6 languages, locale routing, dictionary translations
@repo/loggerConsole-backed logging, one universal export (@repo/logger/log)
@repo/utilsDate, payment, slug, organization, storage, user utilities

Feature Coverage by App

AppPortFeatures
web3000Authentication, billing, org management, account settings, file uploads, platform /admin
docs3004Customer's product documentation (empty Fumadocs starter)
email3003Email template preview (React Email)
storybook6006Component showcase and design system
studio3005Database inspection (Prisma Studio)
kit-docs (root docs/)3006SaaSProKit's own documentation; excluded from pnpm dev / pnpm build

On this page