Self-host

On infrastructure you own. End-to-end.

Sadie deploys as a single Next.js app against a single Neon Postgres database. No multi-tenancy, no org schema, no shared state. Your sources and your Soul live in a database you can point at.

The stack

Runtime
Next.js 15 App Router, deployed to Cloudflare Pages
Database
Neon Postgres (serverless HTTP driver)
ORM
Drizzle ORM, migrations via drizzle-kit
Collab server
Yjs + y-websocket (y-indexeddb persistence for solo use)
Auth
Single-user cookie session. No login form. No credential store.
AI provider
Configurable: Anthropic, OpenAI, or local LlmProvider implementation

The path to deploy

  1. 01

    Fork the repo

    git clone the Sadie monorepo. One Next.js app under apps/app, plus workspace packages. pnpm install.

  2. 02

    Provision a Neon project

    Create a Neon project, copy the connection string into DATABASE_URL. pnpm db:push applies the schema.

  3. 03

    Set the AI provider

    Drop your Anthropic or OpenAI key into the env. Or ship the deterministic stub and wire your own LlmProvider.

  4. 04

    Deploy to Cloudflare Pages

    wrangler deploy. The dual-driver client auto-selects Neon HTTP in production. Your deployment is your Sadie.

What the single-tenant constraint buys you

  • No migration to "teams" in your future. Your data will never be joined into a tenant column.
  • No row-level security complexity. The schema has no tenant. Queries are direct.
  • No credential juggling. The session is a cookie. The bootstrap route handler creates it on first request.
  • No exposure to other users. There are no other users. A deployment is a person.