FFeedbacks DocsOpen app →

Self-hosting

Feedbacks is a Bun monorepo — a Next.js web app, a Hono API, and Postgres + Drizzle. It deploys as a Docker Compose stack.

Local development

bun install          # install all workspaces
cp .env.example .env # then fill in
bun infra:up         # Postgres + MinIO via Docker
bun db:push          # apply the schema to the dev DB
bun dev              # web (:3000) + api (:3001)

Other scripts: bun typecheck, bun db:generate, bun db:migrate, bun db:studio, bun infra:down.

What you need to configure

The .env (see .env.example) wires up:

  • DatabaseDATABASE_URL (Postgres).
  • Storage — S3-compatible object storage (S3_*); MinIO locally.
  • AuthAUTH_SECRET, plus optional Google / GitHub OAuth.
  • Email — Resend, for notifications and transactional mail.
  • Billing — Lemon Squeezy (optional; absence just means everyone is on Free).

Database migrations

Schema changes are Drizzle migrations under packages/db/drizzle/.

  • Dev: bun db:push syncs your local DB to the current schema.
  • Generating: bun db:generate writes a migration from schema changes; bun db:migrate applies pending migrations.

Production: migrations run automatically on deploy. A one-shot migrate service applies pending migrations before the API starts, so you never serve on a stale schema — just commit the generated migration and deploy.

Production deploy

scripts/deploy.sh rsyncs the repo to the server, ships .env.prod as the remote .env, then builds and brings up docker-compose.prod.yml. On startup a one-shot migrate service applies pending Drizzle migrations, and the API waits for it to finish before serving. Caddy terminates TLS and forwards /api/* to the API (so /api/mcp is reachable at your domain with no extra wiring).