Quickstart
Clone the repo, set NEXT_PUBLIC_DEPLOYMENT_MODE=oss, migrate Postgres, connect IMAP.
Clone and install
git clone https://github.com/Humaner-inc/humaner.git
cd humaner
pnpm installDatabase
PostgreSQL 16+ with pgvector. User and database names are yours.
CREATE USER johndoe WITH PASSWORD 'password' SUPERUSER;
CREATE DATABASE acme OWNER johndoe;
\c acme
CREATE EXTENSION IF NOT EXISTS vector;Environment
cp apps/dashboard/.env.example apps/dashboard/.env.local.env.local
NEXT_PUBLIC_DEPLOYMENT_MODE=oss
DATABASE_URL=postgresql://acme:password@localhost:5432/acme
DIRECT_URL=postgresql://acme:password@localhost:5432/acme
AUTH_SECRET="$(openssl rand -base64 32)"
AUTH_TRUST_HOST=true
NEXT_PUBLIC_APP_URL=http://localhost:3001Build-time flag
`NEXT_PUBLIC_DEPLOYMENT_MODE` is read at build time. Changing it later requires a rebuild. `AUTH_SECRET` signs sessions, mailbox credentials, and the sign-up OTP — set it before first boot.
Email is required for credentials sign-up. Set `EMAIL_*` (NodeMailer or Resend). In development the OTP can print to the terminal. For Docker, `SELF_HOST_LOG_VERIFICATION=true` only while wiring SMTP — never leave it on for real users.
Optional: `CLAUDE_API_KEY` if MCP should draft replies. `AUTH_GOOGLE_CLIENT_ID` / `AUTH_GOOGLE_CLIENT_SECRET` for Google dashboard login (callback `/api/auth/callback/google`). GitHub login is Cloud-only.
Migrate and start
pnpm --filter @humaner/dashboard exec prisma migrate deploy
pnpm --filter @humaner/dashboard devOpen http://localhost:3001. You land on Inbox. Sign up at `/auth/sign-up` (email or Google), then enter the OTP.
IMAP idle worker
pnpm --filter @humaner/dashboard imap:idleKeep that process running, with `IMAP_IDLE_ENABLED=true` and the same `DATABASE_URL` / `AUTH_SECRET` as the dashboard. Connect IMAP in Workspace settings → Inbox first. Production without `.env.local`: `imap:idle:prod`.
Docker
export AUTH_SECRET="$(openssl rand -base64 32)"
export ANTHROPIC_API_KEY="sk-ant-..."
docker compose up --buildCompose starts Postgres, the dashboard, and the IMAP IDLE worker (`imap-idle`). The Next.js image cannot hold IDLE — that is a second container (`apps/dashboard/Dockerfile.imap-idle`).
Verify
- DB migrated + email (or console OTP) working
- Sign up with email or Google
- Connect IMAP in Workspace settings → Inbox
- Idle worker running — new mail appears
- Create a task and an in-app calendar event
- Add a resource file
- Create an API key and list threads over MCP or `/api/v1/mail`