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
- 01
Fork the repo
git clone the Sadie monorepo. One Next.js app under apps/app, plus workspace packages. pnpm install.
- 02
Provision a Neon project
Create a Neon project, copy the connection string into DATABASE_URL. pnpm db:push applies the schema.
- 03
Set the AI provider
Drop your Anthropic or OpenAI key into the env. Or ship the deterministic stub and wire your own LlmProvider.
- 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.