Pulse

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

LayerTechnology
FrameworkNext.js 16 (App Router, Turbopack)
BackendConvex or Drizzle ORM + PostgreSQL
AuthBetter Auth
PaymentsStripe
UIshadcn/ui + Tailwind CSS 4
ValidationZod + t3-oss/env
Server Actionsnext-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 actions

Getting Started

  1. Clone and install — git clone <repo> && cd lnow && bun install
  2. Configure env — Copy .env.example to .env and fill in your keys
  3. Run dev — bun run dev in one terminal, npx convex dev in another
  4. Database — bun run db:push to sync schema, bun run db:seed:plans to seed pricing

Key Conventions

  • Server actions live in lib/*-actions.ts and use authAction from @/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 with bunx shadcn@latest add <component>
  • Path alias: @/ maps to the project root