Framework
Next.js 16 (App Router) is the foundation. The App Router enables React Server Components, nested layouts, and server actions — all of which Launch.now uses extensively for data fetching, form handling, and middleware.
Authentication
Better-auth handles the full authentication surface: email/password, social providers (GitHub, Vercel, Google), magic link, TOTP/OTP 2FA with QR code generation and backup codes, WebAuthn passkeys, session management, and rate limiting.
It was chosen over Auth.js (NextAuth) because it ships with a proper user profile and password management API out of the box, and its session model fits cleanly into both single-tenant and multi-tenant schemas.
Database
Payments
Stripe handles subscriptions and one-time payments. Launch.now includes pre-built webhook handlers for all subscription lifecycle events (customer.subscription.created, invoice.payment_failed, etc.) and a ready-made integration into both the B2C user model and the B2B organisation model.
Background jobs & caching
Inngest manages background jobs: sending emails, writing audit logs, and firing internal notifications. It provides reliable job execution with retries and a local dev UI.
Redis handles caching for notifications and audit log reads, keeping hot paths fast without hitting the database on every request.
Styling
Tailwind CSS is the base. shadcn/ui provides the component registry. MagicUI and TailArk extend it with animated and specialised components.
Permissions
next-safe-action is used for all server actions. It provides a typed, middleware-aware action layer that makes RBAC enforcement clean and consistent — you define who can call an action at the action level, not scattered across route handlers.
Developer tooling
| Tool | Purpose |
|---|---|
| Knip | Finds unused exports, files, and dependencies |
| Zustand | Client state (sidebar, dialogs) |
| Prettier | Code formatting |
| Husky | Conventional commit enforcement |
| Sentry | Runtime error tracking |
Auth, billing, orgs, and emails — all wired up. Clone and deploy in minutes.
Get launch.now