Sign inSign up

gouz/kanbam

By gouz

•Updated 11 days ago

Self-hosted Trello-style Kanban — Bun + Elysia + React, GitHub/ATProto auth

Image
0

4.2K

gouz/kanbam repository overview

⁠Kanbam

A self-hosted, Trello-style Kanban app. One Bun process serves the Elysia API and the React SPA. Sign in with GitHub or ATProto (Bluesky); boards, columns, drag & drop cards, tags, notes, dependencies, and a per-user Pomodoro timer.

⁠Tags

  • latest — the most recent release.
  • X.Y.Z (e.g. 0.22.0) — a specific version.

⁠Quick start

# /app/data holds BOTH the config (.env) and the SQLite database → mount a host folder.
mkdir -p data
cat > data/.env <<'EOF'
GITHUB_OAUTH_CLIENT_ID=your_client_id
GITHUB_OAUTH_CLIENT_SECRET=your_client_secret
APP_URL=http://localhost:3000
EOF

docker run --rm -p 3000:3000 -v "$(pwd)/data:/app/data" gouz/kanbam:latest
# open http://localhost:3000

On start the container sources data/.env and runs the schema sync (prisma db push), so both config and database live in the mounted volume.

⁠docker-compose

services:
  app:
    image: gouz/kanbam:latest
    ports:
      - "3000:3000"
    volumes:
      - ./data:/app/data     # .env (GITHUB_OAUTH_*, APP_URL) + the SQLite DB
    restart: unless-stopped

⁠Configuration

Provide these via data/.env (as above) or -e / compose environment:.

VariableRequiredDefaultPurpose
GITHUB_OAUTH_CLIENT_IDyes—GitHub OAuth app client id
GITHUB_OAUTH_CLIENT_SECRETyes—GitHub OAuth app client secret
APP_URLrecommendedhttp://localhost:3000Public base URL — set to your real HTTPS domain in production
DATABASE_URLnoSQLite in /app/dataSet to a postgresql://… URL to use Postgres instead
PORTno3000Listen port
  • Port: 3000 (API + SPA).
  • Volume: /app/data — back it with a named volume or bind mount; it holds all state.

⁠First run: create a GitHub OAuth app

GitHub sign-in needs an OAuth app:

  1. https://github.com/settings/developers⁠ → New OAuth App
  2. Homepage URL = your APP_URL; Authorization callback URL = APP_URL + /login/github/callback (e.g. http://localhost:3000/login/github/callback, or your HTTPS domain in production).
  3. Put the Client ID / Client secret in data/.env.

Full guide: https://github.com/gouz/kanbam/blob/main/docs/how-to/configure-github-oauth.md⁠

ATProto (Bluesky) sign-in needs no secrets — just set APP_URL to your HTTPS domain in production. See https://github.com/gouz/kanbam/blob/main/docs/how-to/sign-in-with-atproto.md⁠

⁠Production notes

⁠Documentation

Tag summary

Content type

Image

Digest

sha256:eba7ba5f6…

Size

44.1 MB

Last updated

11 days ago

docker pull gouz/kanbam