Getting Started
Introduction
Pulse is an AI-ready SaaS boilerplate built on Next.js 16, Better Auth, Drizzle ORM, and shadcn/ui. This documentation covers the architecture, conventions, and customization points.
Tech Stack
| Layer | Technology |
|---|---|
| Framework | Next.js 16 (App Router, Turbopack) |
| Backend | Convex or Drizzle ORM + PostgreSQL |
| Auth | Better Auth |
| Payments | Stripe |
| UI | shadcn/ui + Tailwind CSS 4 |
| Validation | Zod + t3-oss/env |
| Server Actions | next-safe-action |
Project Structure
app/ # Next.js pages (App Router)
(app)/ # Authenticated app shell
(dash)/ # Dashboard pages
admin/ # Admin pages
auth/ # Sign-in, sign-up, onboarding
blog/ # Fumadocs blog
docs/ # Fumadocs documentation
components/ # Shared React components
layouts/ # Page layout, sidebar, nav configs
ui/ # shadcn/ui components
content/ # MDX content (blog, docs)
drizzle/ # Database schema + migrations
features/ # Feature modules (auth, billing, admin, etc.)
hooks/ # Custom React hooks
lib/ # Utilities, env, auth, server actionsGetting Started
- Clone and install —
git clone <repo> && cd lnow && bun install - Configure env — Copy
.env.exampleto.envand fill in your keys - Run dev —
bun run devin one terminal,npx convex devin another - Database —
bun run db:pushto sync schema,bun run db:seed:plansto seed pricing
Key Conventions
- Server actions live in
lib/*-actions.tsand useauthActionfrom@/lib/safe-action - Client components use
"use client"directive - Forms use react-hook-form with zod validation via
ExtendedForm/useZodForm - Tables use
@tanstack/react-table/legacy - All UI components are in
components/ui/— add new ones withbunx shadcn@latest add <component> - Path alias:
@/maps to the project root