Skip to main content

Prerequisites

Before you start, make sure you have:
  • Node.js 24+ — check with node -v
  • pnpm 10+ — install with corepack enable or npm install -g pnpm
  • Accounts on Neon, Supabase, Upstash, and Vercel (free tiers work fine)

Step-by-Step Setup

1. Clone and Install

pnpm install also configures local git hooks automatically via pnpm prepare — you’ll get pre-commit linting and pre-push checks out of the box.

2. Configure Environment Variables

Copy the example files and fill in your values:
The API needs credentials for Neon (Postgres), Upstash (Redis), Supabase (auth), Vercel Blob (file storage), Inngest (background jobs), and Anthropic (AI). The web app needs the API URL and Supabase public keys. See the Environment Variables page for a full reference of every variable.
Generate an encryption key for the API with:

3. Set Up the Database

Push the Drizzle schema to your Neon database:
This compiles the TypeScript schema to JS first, then runs drizzle-kit push. Always use this command instead of running drizzle-kit directly.

4. Start Development

Run everything at once (web, API, email preview, Inngest dev server):
Or start individual apps:

5. Verify It Works

Useful Commands

Monorepo Structure

Shared code lives in packages/. The two apps (web and api) are independent deployments — never import directly between them.

Next Steps