Get Started
Get Started
Let's get your SaaS in front of customers: fast.
Warpkit is a full-stack TypeScript SaaS starter built on Bun, TanStack Start, and per-user SQLite. Clone it, configure config.ts, and ship.
Everything under
/docson this site is rendered straight from thedocs/folder in the repo you clone, and this page you're reading isdocs/warpkit/index.mditself. No separate marketing docs to keep in sync, no drift. Point Claude Code, Cursor, or any LLM at your clone and it opens the same context you're reading right now, plus a checked-inCLAUDE.mdand real Claude Code skills that read like actual conventions, not a wiki nobody kept current.
What's included
Auth and billing
- Passwordless auth: OTP, magic-link, Google, GitHub OAuth
- Email validation: disposable-address + MX checks, pre-submit UX layer plus a hard server-side gate
- Stripe subscriptions, one-time purchases, billing portal, free trial support
- Credits system: per-call metering, Stripe top-up, atomic deduct
Data and storage
- Per-user SQLite databases: every user gets their own isolated DB
- S3 file uploads: presigned POST/GET, plan-enforced limits, per-user metadata
- Background jobs: SQLite-backed queue, survives restarts, dead-letter support
Application features
- AI chat: SSE streaming via OpenRouter, per-user conversation history
- Apps: static integration card grid at
/dashboard/apps - Blog: markdown/JSON post renderer via content-collections
- API keys: hashed, plan-enforced limits, last-used tracking
- In-app notifications: notification bell, mark read, mark all read
- Notification preferences: per-user marketing email toggles
- Sidebar preferences: per-user sidebar item visibility
- Feature requests: user-facing voting board
- Notes: reference CRUD feature (per-user SQLite)
- Audit log: read-only admin event viewer
Admin and ops
- Admin panel: user management, impersonation, access control
- Feature flags: DB-backed, admin toggle at runtime, no redeploy needed
- Domain events: typed in-process event bus for side effects
- Durable operations: crash-safe state machine for multi-step cross-system tasks
- GDPR: data export, account deletion state machine
Frontend and UX
- Onboarding wizard: multi-step flow, prefetched data, skippable steps
- Cookie consent: GDPR banner, controlled via feature flag
- Analytics: Umami integration, opt-in via env vars
- Captcha: Cloudflare Turnstile, opt-in
- Dark mode and theming
- Landing page components: hero, pricing, FAQ, testimonials, and more
Infrastructure
- React Email templates with live preview in dev
- IP-based and per-user DB-backed rate limiting
- Pre-launch lead capture
- Startup/shutdown side effects (job workers, Sentry init, reconciliation): explicit calls in
server/start.ts, not a Nitro plugin , seedocs/warpkit/features/jobs.md - Observability: Sentry error tracking, opt-in via
VITE_SENTRY_DSN - Result type:
@bitclaw/result'sok/err, every server function returns one, never throws - E2E testing: Playwright-based browser tests, ships as source, run locally with
make e2e
Prerequisites
- Bun v1.1+
- A Stripe account (test mode is fine to start)
- A Resend account (or SMTP credentials) for email
Setup
1. Clone
git clone https://github.com/bitclaw/warpkit my-app
cd my-app
2. Bootstrap
make init
Copies .env.example to .env, generates BETTER_AUTH_SECRET, installs dependencies, and runs migrations. Safe to re-run (idempotent).
3. Configure and start
Fill in .env with your Stripe keys, Resend key, and ADMIN_EMAILS, then:
make dev
Open http://localhost:3000. Login at /login.
Next step
Follow the Ship in 5 minutes tutorial to customize and deploy your app.