Contact

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 install

Database

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:3001

Build-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 dev

Open 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:idle

Keep 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 --build

Compose 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

  1. DB migrated + email (or console OTP) working
  2. Sign up with email or Google
  3. Connect IMAP in Workspace settings → Inbox
  4. Idle worker running — new mail appears
  5. Create a task and an in-app calendar event
  6. Add a resource file
  7. Create an API key and list threads over MCP or `/api/v1/mail`