4 production apps shipped with this codebase

The boilerplate that
ships real products.

A full-stack monorepo with an interactive setup CLI. Clone, run one command, start building your product. Not a template — a production system we use ourselves.

Next.js 16Elysia.jsBunTypeScript11 prod bugs fixed
~/my-saas
$ git clone git@github.com:Dave93/shipkit.git my-saas $ cd my-saas && bun install 1,247 packages installed [2.1s] $ bun run cli ┌ ShipKit Setup Database host: localhost Admin email: you@company.com .env files created Database schema pushed Admin user created Setup complete $ bun run dev weblocalhost:3000 apilocalhost:3001 adminlocalhost:3002 Ready. Ship it.

Backend

Elysia.js — the fastest
Bun-native framework.

Your API isn't an afterthought bolted onto Next.js routes. It's a standalone Elysia.js server — type-safe end-to-end, with validation at the edge and zero code generation. Change an API response, TypeScript catches it in the frontend instantly via the Eden client.

  • End-to-end type safety (Elysia + Eden Treaty)
  • Built-in request validation via TypeBox schemas
  • Redis-powered rate limiting per route
  • OpenAPI documentation in one line
  • Webhook handlers pre-configured for Polar.sh
2.4M
Req/sec (TechEmpower)
21x
Faster than Express
6x
Faster than Fastify
// Type-safe API route with validation import { Elysia, t } from 'elysia' new Elysia() .post('/checkout', async ({ body }) => { const session = await polar.checkouts.create({ productId: body.productId, successUrl: body.successUrl, }) return { url: session.url } }, { body: t.Object({ productId: t.String(), successUrl: t.String({ format: 'uri' }), }) }) // Frontend — full type inference const { data } = await api.checkout.post({ productId: 'pro-monthly', successUrl: 'https://app.com/success', }) // data.url is typed as string ✓

Authentication

Better Auth — self-hosted,
zero vendor lock-in.

Not Clerk. Not Auth0. No monthly fees, no data leaving your server. Better Auth runs alongside your app with a plugin system for advanced features. Login, signup, password reset, and admin RBAC — all pre-configured with pages included.

  • Email/password + social providers (Google, GitHub)
  • RBAC with admin, user, and custom roles
  • Session management with secure cookies
  • Ready-made login/signup pages for web + admin
  • 2FA, multi-tenancy, multi-session via plugins
$0
Per month
4
Auth pages included
Users, no limits
// packages/auth — shared across all apps import { betterAuth } from 'better-auth' import { admin } from 'better-auth/plugins' export const auth = betterAuth({ database: pool, plugins: [admin()], emailAndPassword: { enabled: true }, socialProviders: { google: { clientId: process.env.GOOGLE_CLIENT_ID, clientSecret: process.env.GOOGLE_SECRET, } }, }) // Protecting an API route .get('/me', async ({ headers }) => { const session = await auth.api.getSession({ headers }) return session.user }

Payments

Polar.sh — payments
without Stripe complexity.

Checkout, webhook handler, subscription tracking in the database — all three wired together. Monthly and annual pricing with a toggle. Most boilerplates give you checkout. We give you the full revenue flow, tested with real money.

  • One-click checkout via Polar.sh API
  • Webhook handler with signature verification
  • Subscriptions table in Drizzle schema
  • Monthly/annual toggle on pricing page
  • Subscription status check middleware
3
Parts wired (checkout → webhook → DB)
1
File to swap payment provider
// Complete payment flow in one controller // 1. Create checkout .post('/checkout', async ({ body }) => { const productId = body.plan === 'annual' ? ANNUAL_PRODUCT_ID : MONTHLY_PRODUCT_ID return polar.checkouts.create({ productId }) }) // 2. Handle webhook .post('/webhooks/polar', async ({ body }) => { await db.insert(subscriptions).values({ userId: body.data.metadata.userId, status: 'active', plan: body.data.productId, }) }) // 3. Check subscription .get('/subscription/status', async () => { return db.select().from(subscriptions) .where(eq(subscriptions.userId, userId)) }

Developer Experience

Interactive CLI —
zero manual config.

Built with Ink (React for terminals). Run bun run cli and the setup wizard walks you through everything: database connection, .env generation, schema push, and admin user creation. No copy-pasting from docs, no forgetting environment variables.

  • Interactive prompts for DB host, port, credentials
  • Auto-generates .env in all required directories
  • Pushes Drizzle schema to your database
  • Creates admin user with hashed password via Better Auth
  • Generates BETTER_AUTH_SECRET automatically
1
Command to full setup
~30s
From clone to running
$ bun run cli ShipKit Setup Database host: localhost Database port: 5432 Database user: postgres Database pass: •••••••• Database name: my_saas Admin name: John Admin email: john@company.com Admin pass: •••••••• Created .env files (api, db, auth) Generated BETTER_AUTH_SECRET Database schema pushed Admin user created (role: admin) Done. Run bun run dev to start.

Admin Panel

A real admin panel,
not a dashboard page.

A separate Next.js app at apps/admin with its own auth gate, RBAC middleware, and sidebar layout. User management, role assignment, and admin-only routes — isolated from your public frontend by architecture, not by if (role === 'admin').

  • Separate app with dedicated auth gate
  • RBAC middleware (admin, user, custom roles)
  • Sidebar layout with navigation
  • User management out of the box
  • Runs on its own port — independent deployments
Monorepo structure

apps/web

Public frontend, landing pages, auth UI, user-facing features

apps/admin

Protected admin panel, RBAC, user management, sidebar

apps/api

Elysia.js REST API, webhooks, rate limiting, business logic

packages/*

auth, db, cache, ui, email, entities — shared across all apps


AI-Native Development

Your AI assistant
already knows the codebase.

CLAUDE.md documents the full architecture, coding rules, and 11 production pitfalls. The .claude/skills/ directory has step-by-step guides for deployment, design decisions, and payment integration. Claude Code and Cursor start productive from the first prompt.

  • CLAUDE.md — structured context for AI assistants
  • 4 skills: deploy, dev workflow, design, payments
  • 11 production bug rules AI won't repeat
  • Works with Claude Code, Cursor, Windsurf
CLAUDE.md # Architecture Monorepo with 3 apps (web, api, admin) and 8 shared packages. # Rules 1. Never hardcode colors — use semantic tokens 2. BetterAuth baseURL = app URL, not API URL 3. Canonical URL must be per-page, not layout 4. Always implement checkout + webhook + status 5. Admin logic in apps/admin, not apps/web ... 6 more rules # Skills .claude/skills/deploy-workflow/ → nginx, SSL .claude/skills/dev-workflow/ → setup, build .claude/skills/ui-ux-design/ → tokens, a11y .claude/skills/polar/ → payments

Also included

Everything else you'll need.

Each feature was added because we hit a wall without it while building real products.

i18n (3 languages)

next-intl configured for server and client. Locale routing built in. Add a language in minutes, not hours.

Dark Mode

Semantic color tokens everywhere. next-themes with system detection. Both themes actually tested. No hardcoded whites.

SEO

Dynamic sitemap.xml, robots.txt, JSON-LD structured data, per-page metadata. Canonical URL bug already fixed.

Drizzle ORM

Type-safe SQL with zero ORM overhead. Schema defined once, shared across all apps. Migrations via drizzle-kit.

Redis Caching

ioredis configured with prefix-based isolation. Rate limiting, session cache, usage tracking — ready to use.

React Email

Beautiful email templates with React components. Resend delivery configured. Transactional emails out of the box.

shadcn/ui + Tailwind v4

Accessible, composable components. Shared UI package across all three apps. One design system, no drift.

Turborepo

Parallel builds with caching. Change one package — only affected apps rebuild. CI goes from 5 min to 40 sec.

Landing Templates

Hero, features, pricing, FAQ, CTA, footer — semantic tokens, fully responsive. Customize content, keep structure.


Battle-tested

11 production bugs. All fixed.

We shipped 4 apps with this boilerplate and documented every mistake. Your AI assistant has these rules built in.

Auth

Double /api/ path

Better Auth appends /api/auth internally. Using API URL as baseURL causes /api/api/auth/. Fixed.

Frontend

Hardcoded colors

bg-white, text-slate-900 break dark mode. Every component uses semantic tokens now.

SEO

Canonical URL in layout

Hardcoding canonical to homepage tells Google every page is a duplicate. Per-page canonicals now.

Payments

Checkout without webhook

Payment received, subscription not activated. Now includes checkout, webhook, and status check.

Design

Default black --primary

shadcn default primary is black. Buttons and accents look wrong. Marked with "CHANGE THIS".

Deploy

Admin vs Web confusion

Dashboards in apps/web = no auth gate. Admin panel exists for a reason.

+ 5 more fixes documented in CLAUDE.md.


Social proof

9 production apps. One boilerplate.

From call center analytics to restaurant kitchen management — real teams ship real products with ShipKit every day.

Astervis

Call center analytics for Asterisk. 30+ real-time charts, agent performance tracking, queue monitoring.

Analytics SaaS

RunMate

Running analytics app with Strava integration. Workout analysis, world standard comparisons, goal tracking.

Fitness App

VGR.uz

E-commerce store for grooming products in Uzbekistan. Full catalog, cart, checkout, order management.

E-Commerce

Kiddie

Educational platform for children. Learning through games, progress tracking, interactive exercises.

EdTech

Picefy

Screenshot mockup generator. Upload a screenshot, get a beautiful device mockup for social media and portfolios.

Design Tool

ImgTools

Image toolkit: compress, resize, convert, crop, rotate, watermark, remove background. All in the browser.

Image Processing

DevTools

14+ developer utilities: color converter, Tailwind palette, formatters, encoders, and more.

Dev Utilities

Time Tracker

Internal

Employee time tracking, attendance, overtime management, payroll calculation, and Telegram notifications.

HR / Internal

Chef Task

Internal

Kitchen task management for restaurants. Portion tracking, cook productivity analytics, recurring tasks.

Restaurant / Internal
9 products shipped5 industries1 codebase

Pricing

$49. Once. Done.

Full source code. Private GitHub repo. Unlimited projects.

$49
one-time payment

Everything in the repo. No tiers, no upsells, no “pro” version hiding behind another paywall.

  • Full source code (3 apps + 8 packages)
  • Private GitHub repository access
  • Interactive setup CLI (zero manual config)
  • Auth, payments, admin panel, i18n, SEO
  • AI skills for Claude Code & Cursor
  • Landing page templates
  • Deployment guides (nginx, systemd, SSL)
  • Lifetime updates
  • Unlimited projects, commercial use

Payments via Polar.sh · 7-day refund policy


FAQ

Common questions.

Start building your product today.

The setup is done. Auth works. Payments work. Just add your idea.

Get ShipKit — $49

About ShipKit

ShipKit is a production-ready SaaS boilerplate built by DavrApps, an independent software studio. We built ShipKit because we were tired of spending weeks on auth, payments, and i18n before writing a single line of product code.

The same boilerplate powers our own products: Picefy, ImgTools, and DevTools — all built and deployed using ShipKit.

Stack: Next.js 16, Elysia.js (2.4M req/s on Bun), Better Auth, Polar.sh payments, Drizzle ORM, shadcn/ui, next-intl, Turborepo monorepo. One command to set up, one command to deploy.