Feature requests, votes, and discussion for Kaneo. Accepted requests become GitHub issues; linked PRs and releases update their status.
Built with Bun, Hono, SQLite, and htmx.
Requires Bun 1.3.12 or newer.
bun install
cp .env.example .env
bun run db:migrate
bun run db:seed # optional
bun run dev # http://localhost:3000Seed accounts: maintainer@example.com and ada@example.com, password password123. Development emails appear at /dev/mail.
Configure .env.example:
- Set
APP_URL,BETTER_AUTH_SECRET(openssl rand -hex 32), and SMTP settings includingMAIL_FROM. - Leave
MAIL_TRANSPORTempty or set it tosmtp. Startup checks the SMTP connection. - Set
TRUST_PROXY=trueonly behind a proxy that overwritesX-Forwarded-For.
docker build -t kaneo-feature-track .
docker run -d -p 3000:3000 -v feature-track-data:/data --env-file .env kaneo-feature-trackDocker runs migrations on startup and stores the database in /data. Without Docker:
bun install --frozen-lockfile
bun run build
NODE_ENV=production bun dist/scripts/migrate.js
bun run startOptional integrations:
- GitHub sign-in: set
GITHUB_CLIENT_IDandGITHUB_CLIENT_SECRET. Callback:<APP_URL>/api/auth/callback/github. - GitHub issues: set
GITHUB_REPOandGITHUB_TOKENwith Issues read/write, Contents read, and Pull requests read. - Auto-labeling: set
OPENROUTER_API_KEYorTYPESAFE_API_KEY. The provider receives request titles and descriptions and selects up to two product topics, such as Integrations, Notifications or Recurring tasks. Existing custom topic labels are also available. Maintainer choices survive edits; explicit reruns replace only previous automatic labels.
Grant a maintainer role after the account has verified its email:
bun run maintainer grant person@example.com
# Docker: docker exec <container> bun dist/scripts/maintainer.js grant person@example.comUse revoke to remove the role. Maintainers manage labels and moderation in the account menu.
Production backs up at startup and daily, keeping seven snapshots beside the database (/data/backups in Docker). See .env.example for overrides. Copy snapshots off-host too.
For a manual backup, run bun run db:backup ./backups/tracker.db. To restore, stop the server, replace the database with a backup, and remove its -wal and -shm files before restarting.
bun run typecheck && bun test && bun audit && bun run build
bun run smoke:docker