Skip to main content

What's new

Changelog

Every release - new features, security fixes, and improvements.

v2.0.0
breakingfeatureupgradebillingaisecuritymonitoringclimcptheming

SaaS Starter 2.0 โ€” TypeScript 6, Next.js 16, Hono 4.12, React 19 & Major Platform Expansion

The biggest SaaS Starter release ever. Core upgrades to TypeScript 6, Next.js 16, Hono 4.12, and React 19, plus nine major new features: 13 SaaS vertical templates, 4-provider billing factory, admin dashboard, Prometheus + Grafana monitoring, CLI tool, MCP server, 7-provider AI factory, 27 theme presets, dynamic branding, and module gating. Security hardened with fail-close admin, Docker Secrets, and stealth admin paths.

SaaS Starter v2.0.0 โ€” Major Release

Version 2.0 is the largest SaaS Starter release to date, delivering core framework upgrades alongside nine major new features and a security hardening pass. Several breaking changes require migration โ€” read the notes carefully.


๐Ÿ’ฅ Breaking Changes

  • TypeScript 6.0 โ€” strict rootDir enforcement; apps/api/tsconfig.json updated with "rootDir": "../../". exactOptionalPropertyTypes and noUncheckedIndexedAccess are now enabled.
  • ESLint 10 flat config โ€” .eslintrc dropped; new eslint.config.mjs at repo root; next lint replaced by eslint src --ext .ts,.tsx in web.
  • Zod v4 โ€” z.record() now requires an explicit key schema: z.record(z.string(), valueType).
  • Vitest v4 โ€” constructor mocks must use function keyword, not arrow functions.

โฌ†๏ธ Dependency Upgrades

| Package | From | To | |---|---|---| | TypeScript | 5.5 | 6.0 | | Next.js | 15.x | 16.2.3 | | Hono | 3.x | 4.12 | | React | 18.x | 19 | | ESLint | 8.x | 10.2.0 | | Tailwind CSS | 3.4 | 4.2.2 | | Vitest | 2.x | 4.1.4 | | Zod | 3.x | 4.3.6 | | Stripe SDK | 16.x | 22.0.1 | | OpenAI SDK | 4.x | 6.34.0 | | Anthropic SDK | 0.32 | 0.88.0 | | Groq SDK | 0.7 | 1.1.2 | | Framer Motion | 11.x | 12.38.0 | | Recharts | 2.x | 3.8.1 | | Pino | 9.x | 10.3.1 | | Nodemailer | 7.x | 8.0.5 | | Resend | 4.x | 6.10.0 | | bcryptjs | 2.x | 3.0.3 | | nanoid | 4.x | 5.1.7 | | Vite | 5.x | 8.0.8 | | @types/node | 20.x | 25.6.0 | | Lucide React | 0.447 | 1.8.0 |

๐Ÿ—๏ธ Template System (13 SaaS Vertical Templates)

Pre-built vertical presets that configure modules, landing page, dashboard sections, and navigation for a specific business domain โ€” expanded from 8 to 13 templates:

  1. Developer API Platform (developer) โ€” API-first, usage-based billing, developer tools
  2. E-Commerce (ecommerce) โ€” product catalog, cart, order management
  3. CRM / Professional Services (professional) โ€” client portals, pipeline management
  4. Creator Platform (creator) โ€” content subscriptions, digital storefronts, payouts
  5. Internal Tools Builder (internal-tools) โ€” admin panels, workflow automation, audit logs
  6. Fintech (fintech) โ€” financial dashboards, transactions, risk monitoring
  7. Healthcare (healthcare) โ€” patient portals, appointments, care notes
  8. Kanban / Productivity (productivity) โ€” boards, tasks, team collaboration
  9. AI SaaS Platform (ai) โ€” multi-provider AI, credit metering, streaming chat, RAG
  10. Education / LMS (education) โ€” course creation, student enrollment, certificates
  11. Marketplace Platform (marketplace) โ€” multi-vendor, commissions, dispute resolution
  12. Social & Community (social) โ€” feeds, groups, messaging, moderation
  13. Booking Platform (booking) โ€” scheduling, calendar management, reminders

Each template includes relevant landing page content, dashboard sections, DB schema additions, and visual identity. Generate with pnpm saas-starter init or install from the admin panel at /admin/templates.

๐Ÿ’ณ Billing Factory (4 Providers)

The billing factory now supports four providers, swappable via BILLING_PROVIDER:

| Provider | Env Value | Notes | |---|---|---| | Stripe | stripe | Checkout, customer portal, subscriptions, metered billing | | Paddle | paddle | Paddle Billing (v2), tax handling, Paddle-specific webhook events | | Lemon Squeezy | lemonsqueezy | License key management, subscriptions, one-time payments | | Polar | polar | Open-source-friendly billing, pay-what-you-want, subscriptions |

Webhook handlers are implemented for all four providers with HMAC verification, idempotent processing (Redis dedup), and BullMQ retry with exponential backoff.

๐Ÿ–ฅ๏ธ Admin Dashboard

Completely overhauled admin experience at /admin:

  • MRR, churn, growth, DAU/MAU stats with trend charts
  • User impersonation with audit trail
  • Feature flags (runtime toggles without redeploy)
  • Plan overrides per org
  • Trial extensions
  • AI usage overview (tokens by provider, spend)
  • Billing history and invoice download
  • SEO metadata editor
  • RBAC permissions matrix viewer
  • Real-time notification stream

๐Ÿ“Š Monitoring Stack (Prometheus + Grafana)

Production observability out of the box:

  • apps/api exposes /metrics endpoint (Prometheus prom-client)
  • Pre-built Grafana dashboards covering API latency, p95/p99, request rates by route, error rates, BullMQ queue depth, DB connection pool, and AI token consumption
  • docker-compose.monitoring.yml โ€” adds Prometheus + Grafana containers with pre-configured data sources and dashboards
  • Alerting rules for error rate spikes, queue backlogs, and certificate expiry

๐Ÿ”ง CLI Tool (packages/cli)

A saas-starter CLI for common operations, run via pnpm saas-starter:

  • pnpm saas-starter init โ€” interactive project initialization wizard
  • pnpm saas-starter add <module> โ€” enable an optional module
  • pnpm saas-starter remove <module> โ€” disable an optional module
  • pnpm saas-starter doctor โ€” run 11 environment checks
  • pnpm saas-starter deploy <platform> โ€” generate deployment config for Coolify, etc.

โš ๏ธ Always use pnpm saas-starter inside the monorepo. Using npx saas-starter may download an unrelated package from the public npm registry.

๐Ÿค– MCP Server (packages/mcp)

Model Context Protocol server for AI agent integration:

  • Exposes project context (routes, schema, config, plans) to AI coding tools
  • Run with pnpm mcp โ€” compatible with Cursor, Claude Code, Copilot Workspace, and other MCP clients
  • Provides real-time schema and route information so agents write correct factory calls and ESM imports

๐Ÿง  AI Factory (7 Providers)

Expanded from 4 to 7 AI providers, swappable via AI_PROVIDER:

| Provider | Env Value | Default Model | |---|---|---| | OpenAI | openai | gpt-4.1 | | Anthropic | anthropic | claude-sonnet-4-20250514 | | Google Gemini | gemini | gemini-2.5-pro | | Groq | groq | llama-4-maverick | | Cerebras | cerebras | llama-3.1-8b | | Mistral | mistral | mistral-large-latest | | Together | together | meta-llama/Llama-3.3-70B-Instruct-Turbo |

Streaming and non-streaming chat endpoints unchanged: POST /api/ai/stream and POST /api/ai/chat.

๐Ÿ’ณ Billing Webhooks (All 4 Providers)

Full webhook handler coverage for Stripe, Paddle, Lemon Squeezy, and Polar:

  • HMAC signature verification per provider
  • Idempotent event processing via Redis dedup
  • BullMQ retry with exponential backoff for failed deliveries
  • Events processed: checkout.completed, subscription.created, subscription.updated, subscription.cancelled, subscription.renewed, payment.failed, payment.refunded
  • Admin UI for manual retry of failed webhook deliveries

๐ŸŒ— Dark / Light Theme with 27 Presets

Full theming system powered by CSS custom properties:

  • System-preference detection with manual override toggle
  • Smooth transitions between light and dark modes
  • 27 preset color themes across 4 categories:
    • B2B Corporate: Default (Indigo), Ocean, Forest, Fintech, Enterprise, Banking, Legaltech
    • B2C Friendly: Rose, Amber, Pastel, Bubbly, Wellness, Edtech, Marketplace, Healthcare, Productivity
    • Developer: Dracula, Terminal, GitHub, Monokai, Synthwave, Brutalist, Cyber Minimal
    • VibeCoder: Neon, Retrowave, Aurora, Candy, Frost, Glass, AI Native
  • Presets applied at runtime โ€” no rebuild required
  • Per-org theme preference persisted in DB

๐ŸŽจ Dynamic Branding System

Runtime-configurable branding without code changes:

  • saas-starter.config.ts โ€” top-level feature toggles, branding colors, module enablement
  • Logo, favicon, and OG image served from config
  • Primary/accent colors propagated to all UI components including charts, buttons, and email templates
  • Plan names and descriptions editable in packages/shared/src/plans.ts

๐Ÿ”’ Module Gating System

Fine-grained control over which features are active:

  • Toggle SaaS modules on/off from the admin dashboard (/admin/modules) or via saas-starter.config.ts
  • Disabled modules vanish from navigation, routes return 404, and API endpoints are blocked โ€” no dead ends
  • 13 built-in modules: AI, storage, roadmap, webhooks, referrals, waitlist, affiliates, feedback, customDomains, projects, announcements, blog, changelog

๐Ÿ›ก๏ธ Security Improvements

  • Fail-close admin access โ€” if ADMIN_UIDS env var and admin_user DB table are both empty, admin routes return 403 (previously fell through to open access)
  • Docker Secrets โ€” all sensitive environment variables (database passwords, API keys, secrets) can be loaded from Docker Secrets (/run/secrets/<name>); supported in apps/api/src/config.ts
  • Stealth admin path โ€” configure a custom admin path via ADMIN_PATH env var (defaults to /admin). Set REQUIRE_ADMIN_PATH_COOKIE=true for stealth 404 behavior.
  • @types/bcryptjs removed (deprecated; types ship with bcryptjs v3)

๐Ÿ› Bug Fixes

  • PostgreSQL 15+ schema permissions โ€” setup-local.sh now grants SCHEMA public to saas-starter user on the correct database for both macOS and Linux
  • Next.js build-time fetch hang โ€” AbortController (3 s timeout) added to all build-time fetch() calls in page.tsx and demo/layout.tsx
  • Stripe API version literal โ€” updated to '2026-03-25.dahlia' (Stripe SDK 22 requirement)
  • Recharts v3 formatter types โ€” tooltip formatter updated to handle undefined values
  • Nginx reverse proxy generation โ€” scripts/setup-proxy.sh and configs/nginx.conf.template no longer emit map inside server blocks, fixing nginx: "map" directive is not allowed here

๐Ÿ“ฆ Other Changes

  • apps/web/src/types/global.d.ts โ€” ambient module declarations for CSS/SVG/image imports (required by TS6)
  • eslint.config.mjs โ€” ESLint 10 flat config with TypeScript, Next.js, and React Hooks rules
  • LICENSE โ€” Commercial Source License added to repository root

๐Ÿ”„ Migration Guide

  1. Update env vars โ€” run pnpm saas-starter doctor to validate; add any new provider keys (CEREBRAS_API_KEY, MISTRAL_API_KEY, TOGETHER_API_KEY, LEMONSQUEEZY_API_KEY, POLAR_ACCESS_TOKEN)
  2. Run migrations โ€” pnpm migrate
  3. Fix Zod v4 โ€” search for z.record(ValueType) and add explicit key schema: z.record(z.string(), ValueType)
  4. Fix Vitest v4 โ€” convert arrow-function constructor mocks to function keyword
  5. Fix ESLint โ€” remove .eslintrc* files; use the new eslint.config.mjs
  6. Set ADMIN_PATH โ€” configure a custom admin path or use the default /admin
  7. Configure monitoring โ€” docker compose -f docker-compose.yml -f docker-compose.monitoring.yml up -d to add Prometheus + Grafana

v1.4.2
docsdemocopylegal

Docs, copy & demo polish โ€” private distribution, honest updates

Docs site no longer points at placeholder GitHub URLs; README and FAQ match boilerplate delivery (not public GitHub). Demo pricing ribbon uses card clipping for correct rounding. Stronger disclaimer: updates may continue without a cutoff but are never guaranteed.

SaaS Starter v1.4.2 โ€” Documentation accuracy & demo polish

๐Ÿ“š Docs app (apps/docs)

  • Removed the default GitHub project icon and โ€œEdit on GitHubโ€ link from the Nextra layout โ€” they implied a public repo; this boilerplate is delivered privately (zip, vendor portal, or your own remote).
  • Feedback in the docs TOC now directs readers to email instead of opening GitHub issues.
  • README stack table now lists Nextra 4 (matching package.json) and notes the /docs base path.

โš ๏ธ Purchase expectations (Disclaimer, FAQ, README)

  • Clarified that updates are not guaranteed and must not be read as a 12โ€‘month window or โ€œlifetime updatesโ€ promise: access to the source can be lifetime; delivery of future patches is best-effort only and may continue without a fixed end date.
  • Replaced โ€œGitHub issuesโ€ wording in FAQs with vendor / purchase-channel support (OAuth โ€œGitHubโ€ as a login provider is unchanged).
  • Spanish license bullet no longer implies guaranteed lifetime updates in the same breath as โ€œcompras una vezโ€.

๐ŸŽจ Demo pricing ribbon (highlighted tier)

  • Pricing cards use overflow-hidden with rounded-2xl so the โ€œMost popularโ€ ribbon follows the cardโ€™s corner radius.
  • Added top padding when the ribbon is shown so the tier label does not sit under the badge.

v1.4.1
fixdxdeploydemo

Bug fixes โ€” static assets 404, demo newsletter, pricing copy & badge

Fixes CSS/JS 404 on PM2 restart (cwd mismatch in standalone server), interactive newsletter widget in demo, honest updates wording, and rounded badge on highlighted pricing card.

SaaS Starter v1.4.1 โ€” Bug Fixes & Copy Accuracy

๐ŸŽฏ Demo newsletter widget now interactive

The "Weekly focus digest" block in the Flowspace (productivity) demo previously rendered the email address as static placeholder text. It is now a real <input> with a submit button that simulates a 700 ms delay and shows a success state โ€” making the demo feel like a real product for prospects.

๐Ÿ“‹ Pricing copy โ€” honest updates language

Replaced all instances of "12 months of updates" and "lifetime updates included" with accurate language: updates are pushed best-effort and are not guaranteed. Affected locations:

  • DisclaimerBanner (pre-purchase warning)
  • FAQ items ("Is this a one-time purchase?" and "What's NOT included?")
  • Pricing card feature list and subtext
  • SocialProof badge strip
  • /pricing page metadata description

๐Ÿท๏ธ Pricing card ribbon badge corners

The "Most popular" ribbon banner on highlighted demo pricing cards was missing the top-left rounded corner (rounded-tl-2xl) โ€” the corner was square against the card's rounded-2xl parent. Added rounded-tl-2xl so the badge contours correctly with the card edge.


v1.4.0
featuredxadminbillingaisecurity

New Features โ€” API Playground, RBAC Matrix, Env Badge, SEO Editor & More

Seven new features: API Playground, Environment Badge, RBAC Permissions Matrix, Webhook Retry UI, SEO Metadata Editor, AI Usage Dashboard, and Billing History.

SaaS Starter v1.4.0 โ€” Developer Experience & Platform Features

This release adds seven high-value features targeting the day-to-day experience of building and operating a SaaS product.

๐ŸŽฎ API Playground (/dashboard/api-playground)

An interactive API explorer built directly into the dashboard:

  • Lists all available API endpoints grouped by category
  • Executes requests using the signed-in user's session
  • Shows request/response with syntax highlighting
  • Accepts custom body JSON for POST/PATCH endpoints
  • Powered by the existing OpenAPI schema at /api/docs

Perfect for debugging and for onboarding new devs to the API surface.

๐ŸŒ Environment Badge

A persistent badge in the dashboard header shows the current deployment environment:

  • DEV โ€” blue badge (development mode)
  • STAGING โ€” yellow badge (staging environment)
  • PROD โ€” red badge (production)

Driven by NEXT_PUBLIC_APP_ENV. Visual reminder prevents accidentally running production commands in dev and vice versa.

๐Ÿ” RBAC Permissions Matrix (/dashboard/team/permissions)

A visual role ร— action matrix table showing exactly what each role can do:

| Action | Owner | Admin | Member | |--------|-------|-------|--------| | Invite members | โœ… | โœ… | โŒ | | Remove members | โœ… | โœ… | โŒ | | Manage billing | โœ… | โŒ | โŒ | | View audit logs | โœ… | โœ… | โŒ | | Manage webhooks | โœ… | โœ… | โŒ | | ... | | | |

Makes it easy to communicate permission boundaries to new team members and enterprise customers.

๐Ÿ”„ Webhook Retry UI (/dashboard/webhooks)

Webhook delivery history now includes a Retry button on failed deliveries:

  • Retries failed webhook payloads on demand
  • Updates delivery status in real time
  • Shows retry count and next retry timestamp
  • Success/failure toast feedback

๐Ÿ”Ž SEO Metadata Editor (/admin/seo)

Admin-level SEO editor for key pages:

  • Edit page title, meta description, and OG image URL
  • Changes saved to the settings DB table (existing KV store)
  • Live preview of how the page will appear in search results
  • Supports homepage, pricing, blog, changelog, and roadmap pages

๐Ÿ“Š AI Usage Dashboard (/dashboard/ai)

The AI page now shows a comprehensive usage dashboard above the chat widget:

  • Total tokens used this month (vs. plan limit)
  • Breakdown by AI provider (OpenAI, Anthropic, Gemini, Groq)
  • Credit balance with "Buy Credits" CTA
  • Credit transaction history (paginated)
  • Gauge chart showing % of monthly quota consumed

๐Ÿงพ Billing History Table (/dashboard/billing)

The billing page now includes a Payment History section:

  • Lists all invoices from Stripe/Paddle
  • Shows date, amount, status, and plan
  • Download PDF invoice link per entry
  • Powered by the existing /api/billing/invoices endpoint

Other Changes

  • Landing page hero copy updated to clearly identify SaaS Starter as a SaaS boilerplate
  • CSP connect-src now correctly allows http://localhost:* in development mode
  • Dashboard layout now has proper error boundary and not-found pages
  • 5 new SEO-optimized blog posts added to content/blog/

v1.1.0
aisecuritydxbilling

AI Credits, MCP Server, Security Hardening

Prepaid AI credit packs, a Model Context Protocol server for AI agents, full security hardening (CSP, HSTS, rate-limit brute-force), and a code generation CLI.

What's new in v1.1.0

๐Ÿง  Prepaid AI Credit Packs

Users can now purchase credit packs (100 / 500 / 2000 credits) via a one-time Stripe payment. Credits are consumed on every AI request. Orgs on lower plans can still use AI by topping up โ€” no plan upgrade required.

  • New orgCredits and creditTransaction DB tables
  • GET /credits/balance โ€” balance + pack options
  • POST /credits/topup โ€” Stripe one-time checkout
  • GET /credits/history โ€” full transaction ledger
  • 402 Payment Required returned when balance is zero

๐Ÿค– MCP Server (packages/mcp)

A Model Context Protocol server that gives AI agents (Claude, Cursor, Codex) deep context about your SaaS Starter codebase โ€” org structure, plans, routes architecture. Agents write correct code faster with zero hallucination about the project layout.

pnpm mcp

๐Ÿ” Security Hardening

  • secureHeaders() with full CSP, HSTS preload, Permissions-Policy, and X-Frame-Options on all routes
  • Brute-force rate limiting on /api/auth/sign-in, /api/auth/forget-password, /api/auth/magic-link (5 req / 15 min per IP)
  • Pino logger redacts password, token, secret, authorization, cookie fields โ€” no credential leaks in logs
  • All sensitive fields in structured logs are now [REDACTED]

โšก Code Generator CLI

pnpm generate route payments
pnpm generate component BillingCard
pnpm generate worker cleanup
pnpm generate email welcome

Scaffolds complete files (route with zValidator, shadcn component, BullMQ worker, HTML email template) with the correct imports and patterns pre-filled.

๐Ÿ”„ Automated Dependency Updates

.github/dependabot.yml โ€” weekly PRs for npm + Docker base images, grouped by ecosystem.

๐Ÿ›ก๏ธ CI Security Audit

New GitHub Actions job: pnpm audit --audit-level=high + TruffleHog secret scanning on every PR. PRs automatically receive a test coverage comment.


v1.3.0
featuremodulespluginsdxarchitecture

Plugin / Module System โ€” Toggle Features from the Dashboard

SaaS Starter is now a modular SaaS platform. Enable or disable 10 built-in modules from a single settings page. Disabled modules vanish from navigation and routes โ€” no dead ends.

SaaS Starter v1.3.0 โ€” Plugin / Module System

This is the biggest architectural addition since v1.0.0. SaaS Starter now functions as a modular SaaS operating system โ€” each feature is a toggleable plugin, not a hard-wired dependency.

๐Ÿ”Œ 10 Built-in Modules

| Module | Description | Plan | |--------|-------------|------| | ai | AI assistant, streaming chat, token usage | Starter+ | | billing | Subscription management, invoices, portal | Free | | analytics | Usage charts, event tracking, PostHog | Free | | blog | Public blog with MDX content | Free | | changelog | Versioned changelog, update widget | Free | | notifications | In-app notifications, SSE stream | Free | | webhooks | Outgoing webhooks, delivery history | Pro+ | | storage | File upload, S3/R2 management | Starter+ | | roadmap | Public roadmap, user upvoting | Free | | referrals | Referral codes, tracking dashboard | Free |

โš™๏ธ Plugin Settings Page (/dashboard/settings/plugins)

A new settings page lists all modules with:

  • Toggle switch (enabled/disabled)
  • Description of what the module provides
  • Required plan tier
  • Instant save via the feature flags API (no redeploy)

๐Ÿงญ Plugin-Aware Navigation

The sidebar and mobile nav now filter items based on enabled plugins. When ai is disabled:

  • AI Assistant disappears from sidebar
  • /dashboard/ai redirects to /dashboard
  • No 404, no confusing permission errors

๐Ÿ›ก๏ธ Route Guards

Every module page now checks if its module is enabled before rendering. Accessing a disabled module's URL safely redirects to the dashboard.

๐Ÿ—๏ธ Architecture

The plugin system is built on top of the existing feature flags DB table โ€” no schema changes required. The new PluginContext client provider:

  • Fetches flag states from GET /api/admin/feature-flags on mount
  • Caches results with React Query (60s stale time)
  • Exposes isEnabled(moduleId) and togglePlugin(moduleId) hooks
  • Admin users can toggle; member users see current state only

Developer Guide

To add a new module to the registry, add a single entry to apps/web/src/lib/plugins.ts:

export const PLUGINS = {
  // ...existing
  my_feature: {
    id: 'my_feature',
    name: 'My Feature',
    description: 'What this does.',
    icon: 'โœจ',
    requiredPlan: 'starter',
    navItem: { href: '/dashboard/my-feature', label: 'My Feature', icon: 'โœจ' },
  },
}

Then guard your page and the nav item handles itself.


v1.2.0
uithemingdxfeature

Theme System โ€” 25 Themes, Live Preview & Dashboard Selector

Introducing a full multi-theme system with 25 color themes across 4 categories, a visual theme selector in settings, and localStorage persistence.

SaaS Starter v1.2.0 โ€” Theme System

This release transforms SaaS Starter's visual layer from a single blue+dark-mode combination into a full multi-theme platform with 25 distinct color palettes and a live preview selector.

๐ŸŽจ 25 Color Themes

Four theme categories covering every SaaS use case:

B2B Corporate

  • enterprise โ€” Corporate blue with slate neutrals, squared corners
  • banking โ€” Deep navy with gold accents, financial weight
  • legaltech โ€” Dark slate, minimal contrast, ultra-tight radius

B2C Friendly

  • pastel โ€” Soft lavender/lilac, large radius, gentle UI
  • bubbly โ€” Coral primary, large radius, warm and friendly
  • wellness โ€” Sage green, soft corners, calming tones
  • edtech โ€” Bright orange, high contrast, engaging
  • marketplace โ€” Teal primary, optimized for product discovery

Developer & Tech Tools

  • dracula โ€” Purple/pink, dark-mode-first, familiar to devs
  • terminal โ€” Matrix green, minimal radius, technical aesthetic
  • github โ€” Blue-gray, neutral, GitHub-familiar design language
  • monokai โ€” Warm orange/amber, editor-inspired
  • synthwave โ€” Neon pink/purple, retro-futuristic

VibeCoder / Indie Hacker

  • neon โ€” Electric blue, high contrast, modern SaaS
  • retrowave โ€” Hot magenta, 80s aesthetic, memorable
  • aurora โ€” Emerald/teal gradient-inspired
  • candy โ€” Hot pink, maximum rounded corners, playful
  • frost โ€” Ice blue, glass-like clarity

All themes also include an updated ocean, forest, rose, amber, fintech, healthcare, and productivity with properly distinct color values (previously all had the same fallback blue).

๐ŸŽ›๏ธ Theme Selector UI (/dashboard/settings)

A new Appearance section in Settings shows a visual swatch grid with:

  • Real color previews per theme
  • Category grouping (B2B, B2C, Dev, VibeCoder)
  • One-click apply with instant preview
  • Persisted to localStorage โ€” survives page reloads

๐Ÿ”„ ThemeContext Provider

The new ThemeContext extends next-themes integration:

  • Exposes { dataTheme, setDataTheme } across the app
  • Applies data-theme attribute on <html> with zero flash
  • Co-exists with existing light/dark mode toggle

Bug Fixes

  • Fixed: All existing [data-theme] presets had identical primary color (217 91% 59%) โ€” now each has a genuinely distinct palette
  • Fixed: BrandingInjector now syncs localStorage theme on mount

v1.0.0
releaseauthbillingdevops

Initial Release โ€” Full B2B SaaS Foundation

The first release of SaaS Starter. Complete multi-tenant SaaS with authentication, billing, admin dashboard, email, queues, webhooks, and Docker-first DevOps.

SaaS Starter v1.0.0 โ€” Initial Release

The first public release of SaaS Starter โ€” a production-ready TypeScript monorepo boilerplate for B2B SaaS products.

๐Ÿข Multi-Tenant Organizations

  • Users can belong to multiple organizations with roles (owner / admin / member)
  • Seat limits enforced per plan
  • Trial period tracking per org
  • X-Org-Id header resolves org context on every API request

๐Ÿ” Authentication (Better Auth)

  • Email + password with verification
  • Google and GitHub OAuth
  • Magic link (passwordless)
  • TOTP 2FA
  • All self-hosted โ€” no Auth0, no Firebase, no vendor lock-in

๐Ÿ’ณ Billing (Stripe + Paddle)

  • Factory pattern: swap between Stripe and Paddle via BILLING_PROVIDER env var
  • Full checkout, customer portal, cancellation, and reactivation flows
  • Webhook handlers for both providers with idempotency (Redis dedup)
  • Annual/monthly billing with 20% annual discount
  • Per-seat metered billing

๐Ÿ› ๏ธ Admin Dashboard

  • MRR, churn, growth stats, DAU/MAU
  • User impersonation with audit trail
  • Feature flags (runtime toggles without redeploy)
  • Plan override per org
  • Trial extension

โœ‰๏ธ Email (SMTP / Resend / SendGrid)

  • Factory pattern: swap provider with one env var
  • 6 polished templates: welcome, password reset, team invite, subscription confirmed/cancelled, onboarding
  • Async delivery via BullMQ queue (concurrency: 5)

โšก BullMQ Workers

  • emailQueue โ€” transactional emails
  • webhookQueue โ€” outbound webhooks with retry
  • maintenanceQueue โ€” GDPR hard-delete, expired token cleanup
  • onboardingQueue โ€” day-3 and day-7 nurture email sequences

๐Ÿ”— Outgoing Webhooks

  • HMAC-SHA256 signed payloads (X-Signature: sha256=...)
  • Event subscriptions per webhook
  • Delivery history with request/response captured
  • Exponential backoff retry (BullMQ)

๐Ÿณ Docker + Caddy

  • Full production docker-compose.prod.yml with PostgreSQL, Redis (dual), API, Web, Caddy
  • Auto-TLS via Caddy (Let's Encrypt / ZeroSSL)
  • Docker Secrets support for all sensitive env vars

๐Ÿ”‘ CI/CD API Tokens

  • nsk_PREFIX_SECRET format tokens (bcrypt stored)
  • Optional expiry, last-used tracking
  • Feature-gated per plan

๐Ÿ“‹ Audit Log

  • Immutable trail for: plan changes, impersonation, webhook creates, user deletes
  • Fire-and-forget (never fails user requests)

๐ŸŒ i18n

  • next-intl with English and Spanish out of the box
  • Add new languages by adding a messages JSON file

Stay up to date

Check this page regularly for release notes, migration tips, and production fixes.

Read implementation guides