Multi-language i18n, 10 locales pre-wired
EN, VN, ES, FR, JA, KO, ZH, AR (with RTL), ID and TH ship as working locales. Type-safe translation keys, browser-locale and timezone auto-detect, hreflang alternates, a multi-locale sitemap, and a language switcher. Drop a new locale file into `src/locales/` and the build picks it up with no config change.
45 themed UI primitives and a showcase catalog
Every shadcn and Base UI primitive a SaaS needs: DataTable on TanStack v8, recharts, a cmdk command palette, a vaul drawer, resizable panels, combobox, sortable, hover-card, context-menu, tabs, dialog. A live `/components` catalog renders each one with copy-paste code so you never wire a primitive from scratch.
Live Theme Studio: 12 presets, fonts, RTL and LTR
A `/settings/theme` page with 12 WCAG-AA colour presets, light, dark and system modes, soft, default and bold contrast, a font-size slider, layout and stretch controls, RTL and LTR. Settings persist to localStorage through CSS variables, so the preview is instant and nothing rebuilds.
Supabase Auth with a NextAuth alternative stack
Supabase Auth by default: email and password, OAuth, OTP, recovery. Flip `AUTH_PROVIDER=nextauth` and `DB_PROVIDER=neon` for an Auth.js v5 and Neon Postgres stack with the same `requireUser` and `requireAdmin` API surface, the same admin panel, and no code changes. UX shells ship for social-only, multi-step register, 2FA, magic-link and SSO.
Stripe billing with multi-currency subscriptions
Free, Pro and Business tiers with webhook-verified upgrades, a customer portal, dunning, an idempotent `StripeEvent` table, and a `profiles_update_self_safe_columns` RLS policy that blocks user-side billing tampering. Multi-currency across USD, EUR, GBP and VND, with the visitor locale picking the price.
Full admin panel with an audit log
A dashboard with four KPI cards, a signups timeseries and a plan-mix donut. Users with list, detail and five lifecycle actions. Subscribers with CSV export. Messages with mark-all-read and reply through Resend. A filterable, paginated audit log. Site settings as runtime feature flags. Posts CRUD, an email gallery with test sends, a feature-flag editor and a docs viewer.
Public blog with full-text search and image uploads
Posts CRUD with `tsvector` full-text search through `websearch_to_tsquery`, `ts_headline` snippets that wrap matches in `<mark>`, drag-and-drop cover uploads to Supabase Storage behind folder-prefix RLS, public `/blog` and `/blog/[slug]` routes, and JSON-LD Article plus breadcrumb.
Multi-tenancy with Organizations and Memberships
`Organization` and `Membership` Prisma models with RLS through `is_org_member()` and `is_org_admin()` SECURITY DEFINER helpers. `/app/organizations` lets users list and create orgs, where the creator becomes owner inside an atomic transaction. Owner-only delete, admin-only update and member-only read are all enforced server-side.
Public API with per-user API keys
The `ApiKey` table stores a prefix and sha256 of the plaintext, and the plaintext is shown once at creation. `requireUser()` accepts `sk_live_` and `sk_test_` bearer tokens. `/api/v1/me` is the worked example, and `/app/settings#api-keys` handles create and revoke. RLS is owner-scoped.
AI chat widget over streaming SSE
The `/api/ai/chat` Server-Sent Events endpoint proxies to OpenAI when `OPENAI_API_KEY` is set, and otherwise streams a deterministic stub so the demo works without a key. A floating widget sits bottom-right, rate-limited to 30 messages per IP per minute.
Growth toolkit: analytics, affiliate, lead magnet
One `track(event)` call fans out to GA4, Plausible and PostHog. UTM and affiliate ref capture with a 60-day cookie, sanitised and forwarded into Stripe metadata. Crisp live chat, a social-proof toaster, and a lead-magnet modal with cookie-gated dismiss. Each one sits behind a `FEATURES.*` flag.
GDPR and observability: consent, Sentry, cron
A GDPR cookie-consent banner gates analytics and live chat until the visitor accepts. Sentry loads from CDN. The cron pattern (`/api/cron/trial-expiry` behind `requireCronSecret`) is scheduled through `vercel.json`. `bun run verify:rls` asserts every table's policies match expectations, and drift fails CI.