SlateFlow is a self-hosted, single-container project management platform for agile teams. It pairs a drag-and-drop Kanban board with the full Hierarchy (Project → Sprint → Epic → Feature → Story → Task), sprint planning with burndown, a per-sprint Retrospective Board, a calendar that blends sprints/epics/features with team holidays, events, and vacations, a Gantt-style roadmap, velocity / cycle-time / capacity reports, test case management, real-time collaboration over Server-Sent Events, multi-user RBAC at global / project / epic level, and AI card summarisation across Claude, Gemini, OpenAI, Azure OpenAI, and Ollama. SQLite + Hono + React in a single Docker image — no external services required.
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
Full list of screenshots:
screenshots/
- Dashboard — project overview with stats (open cards, active sprints) and a cross-project activity feed
- Kanban board — swim lanes and cards with full drag-and-drop reordering; manage lanes inline
- Lane presets — pick a workflow template (e.g. Scrum, Kanban) when creating a project, or define custom lanes
- Sprint management — create, activate, and complete sprints; burndown charts per sprint
- Backlog — full CRUD on unassigned cards (create, click-to-edit via modal, delete); cards grouped by swim lane; move to any sprint in one click
- Story tasks — sub-items on any story card; to-do / in-progress / done toggle with an inline progress bar in the card modal
- Card attachments — upload files and images directly to story cards; preview images inline; download or delete attachments (gated by
FEATURE_CARD_ATTACHMENTS) - Due dates — set due dates on cards and tasks; hourly background reminders for upcoming or overdue items; email notifications for assigned users
- Drag-and-drop — powered by
@dnd-kitwith pointer sensor support - Activity log — automatic
create,update, andmoveevents per card - Test management — attach test cases to cards; group into test suites; record pass/fail/blocked runs; track status with a per-card summary bar
- Labels & comments — project-scoped colored labels; threaded comments with
@mentionsupport - Notifications — in-app bell with unread count badge; real-time SSE delivery via Server-Sent Events; email notifications for mentions, assignments, and due date reminders (SMTP-based, per-user opt-out preference); triggered by
@mentionin comments, story assignment, and due dates - Multi-user with RBAC — JWT auth (httpOnly cookie); three role layers: global (
super_admin/global_reader), project (project_admin/contributor/reader), and epic (epic_admin/contributor/reader); project admins have a dedicated/projects/:id/adminpanel (Members, Settings, Lanes) without needing super_admin - Flexible login methods — email/password, Google OAuth, and GitHub OAuth, each independently toggleable via feature flags (
FEATURE_AUTH_PASSWORD,FEATURE_AUTH_GOOGLE,FEATURE_AUTH_GITHUB); identities stored in auser_identitiestable that's ready for SSO - Real-time updates — Server-Sent Events stream board mutations and notifications to every connected client
- AI features — gated by
FEATURE_AI=true; provider-agnostic across Anthropic Claude, Google Gemini, OpenAI, Azure OpenAI, and Ollama:- Card summarisation — generates a 2–3 sentence summary from a story's title and description
- Story generation from features — generates 3–7 user story outlines from a feature's title and description (gated by
FEATURE_AUTO_STORY_GENERATION_AI) - Test case generation — generates 3–5 test cases from a story's title and description (gated by
FEATURE_AUTO_TEST_CASE_GENERATION_AI) - Natural-language work-item creation — type a sentence to create an epic, feature, story, task, project, sprint, or calendar event; AI returns an editable preview before confirming; available on the Board, Epics, Sprints, Calendar, and Dashboard pages
- Retrospective Board — per-sprint reflection with three fixed columns (Went well / To improve / Action items) and live drag-and-drop reorder; gated by
FEATURE_RETROSPECTIVE=true - Calendar — month view of sprints, epics, and features alongside super-admin-managed global holidays, project events, and per-user vacations; holidays support optional country and state/province tagging; calendar view lets users filter by country; gated by
FEATURE_CALENDAR=true - GitHub & GitLab integration — attach PR, MR, issue, or commit links to any story card; gated by
FEATURE_GITHUB_INTEGRATION/FEATURE_GITLAB_INTEGRATION; webhook receivers (POST /webhooks/github,POST /webhooks/gitlab) automatically move linked cards to the done lane when a PR/MR is merged or close linked GitHub issues when the card moves to done; optional PAT for fetching titles on private repos - Self-host — single Docker container, SQLite database on a named volume; no external services required
- Roadmap / timeline view — Gantt-style view across Epics and Features with date ranges
- Story dependencies — "blocks / blocked by" relationships between stories
- User skills — app-level and project-level skill tags on team members for resource planning
- Capacity planning — assignee workload view per sprint with committed capacity (story points per person) vs. actual; visual indicators for over-allocation
- User profiles — extended profile fields including work/home location (country, state, city), timezone, job title, department, phone, gender, and reporting manager for team context and resource planning
- Velocity chart — story points completed per sprint, trend over time, with average velocity calculation; velocity snapshots for completed sprints
- Cycle time / lead time — how long cards spend in each lane
- Capacity report — per-assignee workload with team skills and committed capacity
- CSV export — backlog, sprint report, or full project snapshot as CSV
Prerequisites: Node.js 20+
Node : https://nodejs.org/en/download/archive/v20.20.1
git clone https://github.com/your-org/slateflow.git
cd slateflow
npm install
npm run dev| URL | What |
|---|---|
| http://localhost:5173 | Kanban board (React + Vite HMR) |
| http://localhost:3000 | REST API (Hono) |
| http://localhost:3000/api/docs | OpenAPI / Swagger documentation |
| http://localhost:3000/health | Health check endpoint |
The SQLite database (server/slateflow.db) is created and seeded with a demo project on first boot.
Prerequisites: Docker and Docker Compose
# Copy and edit env vars (required if you want OAuth, AI, or to change SECRET/PORT).
# The dev server reads this file at startup; Docker passes through anything set
# here via docker-compose.yml.
cp .env.example .env
# Build and start on port 3000
docker-compose up -dOpen http://localhost:3000. The database is stored in the slateflow-data Docker volume and survives container restarts.
docker-compose down # stop
docker-compose build # rebuild after source changesIf port 3000 is already in use, see CONTRIBUTING.md for PowerShell and Bash recipes to free it.
| Command | Description |
|---|---|
npm run dev |
Start client + server concurrently |
npm run dev -w server |
Server only (tsx watch, port 3000) |
npm run dev -w client |
Client only (Vite HMR, port 5173) |
npm run build |
Production build (client + server) |
npm run lint -w client |
ESLint on the client workspace |
| Layer | Tech |
|---|---|
| Frontend | React 18, Vite 5, TypeScript, Tailwind CSS v3, react-router-dom v7, recharts |
| State | Zustand, react-hot-toast |
| HTTP client | axios + native fetch |
| Drag-and-drop | @dnd-kit/core + @dnd-kit/sortable |
| Backend | Node.js, Hono 4, TypeScript, tsx, Zod |
| Auth | JWT in httpOnly cookie (sf_token), bcrypt |
| Real-time | Server-Sent Events (no broker) |
| Database | SQLite (better-sqlite3), WAL mode |
| Monorepo | npm workspaces |
| Container | Docker + Docker Compose (single image) |
Contributions are welcome! Please read CONTRIBUTING.md before opening a pull request.
For issues, questions, or contributions:
- Open an issue on GitHub
- Join the Discord community
- Contact: ather.techie@gmail.com
Feedback is always appreciated — if this project has been useful to you, please let the author know via email.











