The full upstream README, mirrored here for reference. Install config, tool schemas, adoption signals, and an original overview live on the Kanban AI listing page.
Open-source AI kanban for side projects. Plan with AI, manage a board in the browser, and (optionally) drive the same board from Cursor or Claude via MCP.
Try the hosted app: kanbanai.dev · Docs: kanbanai.dev/docs · Release updates: kanbanai.dev/docs/release-updates
Most people cloning this repo want the local app. That path is first below.
No Supabase account, no sign-in. One SQLite database under .local/ (gitignored). Vite serves the UI; a small local API on port 3000 handles data and OpenAI.
Requirements: Node.js 18+, npm, and an OpenAI API key for AI features.
Edit .env.local:
Do not prefix the OpenAI key with VITE_ — that would expose it in the browser.
Open http://localhost:5173.
| Feature | Local |
|---|---|
| Kanban board, sprints, tasks, comments | Yes |
| AI project builder (chat + live workspace) + board assistant | Yes (needs OPENAI_API_KEY) |
| Project members (invite by email) | Yes — invite collaborator@dev.invalid to try (seeded) |
| Cloud auth / account / hosted analytics / feedback | No (needs Supabase) |
Remote MCP (/api/mcp) | No — use a hosted deploy or vercel dev with Supabase |
First run applies frontend/scripts/local-schema.sql. Vite proxies /api to the local process (frontend/vite.config.ts).
| Command | What it does |
|---|---|
npm run dev:local | Local SQLite API + Vite (default for contributors) |
npm start | Vite only (pair with Supabase / vercel dev) |
npm run build | Production build + static SEO prerender (unique HTML per public route; skip with SKIP_PRERENDER=1) |
npm run build:no-prerender | Faster local production build |
Use this when you want real accounts, multi-device sync, or the hosted MCP server.
frontend/.env.local, set VITE_SUPABASE_URL and VITE_SUPABASE_ANON_KEY, and remove VITE_LOCAL_MODE (or set it to anything other than true).OPENAI_API_KEY for /api/openai.frontend/, run two terminals: npx vercel dev --listen 3000 then npm start. UI: http://localhost:5173.Set OPENAI_API_KEY (and Supabase / MCP vars below) in the Vercel project. The OpenAI key is read only on the server — never put it in VITE_* client env.
frontend/vercel.json pins "buildCommand": "npm run build". Leave it there: Vercel's Vite preset otherwise runs bare vite build and silently skips the SEO prerender, which makes every public URL serve the homepage shell and canonical. See frontend/SEO_SETUP.md. AdSense recovery work (crawlable copy, ads off docs) is logged in docs/adsense-approval-log.md.
Ads are served by TinyAdz/Apitiny via the script tag at the bottom of frontend/index.html (site id + data-test-mode). Two things are easy to break:
<AdSlot /> (frontend/src/components/AdSlot.tsx) where an ad belongs — it renders a ta-ad-container div that TinyAdz fills. Currently used on blog posts and both landing variants (not on docs — see docs/adsense-approval-log.md).scroll, mousemove, or touchmove. Because every route scrolls inside a nested overflow-y-auto element, window never emits scroll on its own, so frontend/src/lib/nestedScrollBridge.ts re-broadcasts nested scrolls onto the window from main.tsx. Without it, visitors who only wheel-scroll see zero ads and register zero views.To preview demo ads locally, set data-test-mode="true" in frontend/index.html.
On a hosted deployment, Kanban AI exposes a remote MCP server at /api/mcp with the same board operations as the web app.
/connect) → copy the generated config into Cursor or Claude Desktop. Config uses a long-lived personal MCP key (kai_…) so you do not need to reconnect hourly.kai_… keys in production, apply supabase/migrations/20260714120000_mcp_api_keys.sql on the Kanban Supabase project (mruhzlixrwsgwqaodviy). Run ./scripts/apply-mcp-api-keys-migration.sh for the SQL editor link, or supabase db push after linking that project.docs/MCP_REGISTRY.md and the env table below./.well-known/mcp-server · OpenAPI: /openapi/mcp.json · AI index: /llms.txt| Variable | Purpose |
|---|---|
SUPABASE_URL | Same as VITE_SUPABASE_URL |
SUPABASE_ANON_KEY | Same as VITE_SUPABASE_ANON_KEY |
SUPABASE_SERVICE_ROLE_KEY | MCP analytics, member invites, personal MCP keys |
MCP_API_SECRET | Shared secret for X-MCP-API-Key (also used to encrypt personal keys at rest) |
MCP_KEY_ENCRYPTION_SECRET | Optional dedicated secret for encrypting personal MCP keys (falls back to MCP_API_SECRET / service role) |
OPENAI_API_KEY | In-app AI (optional for MCP CRUD tools) |
Tools: list_projects, get_board, create_project, update_project, delete_project, create_task, update_task, delete_task, list_task_comments, add_task_comment, delete_task_comment.
@kanban replies on task threads)React 18, TypeScript, Vite, Tailwind CSS · Local: SQLite API · Hosted: Supabase + Vercel · AI: OpenAI · MCP: mcp-handler
Issues and ideas: GitHub Issues
MIT — see LICENSE.