Hit every milestone.
A self-hosted project management tool. Track tasks, milestones, and time across projects β with a public shareable board and real-time updates.
- Kanban & list views β drag-and-drop task ordering with fractional indexing
- Milestones β group tasks with progress tracking and target dates
- Time tracking β start/stop timer, manual entries, time-in-status reporting
- Comments β threaded markdown comments with emoji reactions
- Public boards β shareable read-only project view, no login required
- Invitations β email-based project invites for new and existing users
- Real-time β SSE-powered live updates across browser tabs
- Keyboard shortcuts β
Tnew task,Nnew project,Cmd+Kcommand palette
- SvelteKit + Svelte 5 (runes) + TypeScript
- PostgreSQL + Prisma ORM
- Tailwind CSS v4
- Docker (multi-stage build,
adapter-node)
- Node.js 22+
- pnpm (
npm i -g pnpm) - Docker + Docker Compose
docker compose -f docker-compose.yml up db mailpit -dThis starts PostgreSQL on port 5432 and Mailpit (SMTP on 1025, web UI on 8025).
cp .env.example .envThe defaults in .env.example match the Docker services above β no edits needed for local dev.
pnpm install
pnpm db:migrate # runs prisma migrate dev
pnpm db:seed # optional: seed demo datapnpm devApp is at http://localhost:5173. Outgoing emails are caught by Mailpit at http://localhost:8025.
docker compose -f docker-compose.yml up --buildApp runs at http://localhost:3000. Migrations are applied automatically on container start.
Copy .env.prod.example to .env.prod and fill in your values, then:
docker compose -f docker-compose.prod.yml up -dKey environment variables:
| Variable | Description |
|---|---|
DATABASE_URL |
PostgreSQL connection string |
SESSION_SECRET |
Random string, at least 32 characters |
BASE_URL |
Public URL of your instance (used in email links) |
SMTP_HOST/PORT/USER/PASS/FROM |
Outbound email config |
pnpm dev # Dev server
pnpm build # Production build
pnpm check # Svelte type check
pnpm db:migrate # Create and apply a Prisma migration
pnpm db:generate # Regenerate Prisma client after schema changes
pnpm db:seed # Seed database
pnpm test:e2e # Run Playwright e2e testsGitHub Actions runs on every push and PR to main:
- typecheck β
svelte-check - e2e β Playwright against a Postgres service container
- docker-build β validates the Dockerfile builds cleanly
Dependabot keeps npm packages, Docker base images, and Action versions up to date (weekly, Monday).
MIT Β© 2026 Andrea Pavone
