Trello-style task board running locally on the Raspberry Pi. Dark theme, drag-and-drop, card detail modals — the works.
cd ~/.openclaw/workspace
node server.js
# Or use the startup script
./start-dashboard.sh
# Then visit: http://localhost:3000
# From other devices: http://REDACTED_HOST:3000server.js → Express REST API + SQLite (one file, ~1400 lines)
public/index.html → Layout + CSS (Trello-style board, dark theme)
public/app.js → All frontend logic (board, cards, modals, drag-drop)
tasks.db → SQLite database (shared with CLI and insights script)
No frameworks, no build step, no transpilation. Plain Node.js + vanilla JS.
- Header (48px): Board title, inline stats, compact filters, "..." menu
- Board canvas: Horizontally scrollable, four 272px columns
- Columns: Backlog → Pending → Completed → Archived
- Cards: Compact with label bars, title, badge icons, hover pencil
- Card detail: Two-column modal (main content + action sidebar)
Tasks
GET /api/tasks— List all (query: status, category, priority, search)POST /api/tasks— Create (body: name, description?, category?, priority?, dueDate?, status?)GET /api/tasks/:id— Get onePUT /api/tasks/:id— UpdateDELETE /api/tasks/:id— Delete
Subtasks
GET /api/tasks/:id/subtasks— List subtasksPOST /api/tasks/:id/subtasks— Add subtaskPUT /api/subtasks/:id— Update subtaskDELETE /api/subtasks/:id— Delete subtask
Notes
GET /api/tasks/:id/notes— List notesPOST /api/tasks/:id/notes— Add noteDELETE /api/notes/:id— Delete note
Time Tracking
POST /api/tasks/:id/timer/start— Start timerPOST /api/tasks/:id/timer/stop— Stop timerGET /api/tasks/:id/time-logs— Get time logs
Categories
GET /api/categories— List categoriesPOST /api/categories— Add categoryPUT /api/categories/:id— Update categoryDELETE /api/categories/:id— Delete category
Analytics & Stats
GET /api/stats— Task counts and category breakdownGET /api/analytics/flow— Status transitions over 30 daysGET /api/analytics/cumulative-flow— Stacked area dataGET /api/analytics/cycle-time— Average time per statusGET /api/due-summary— Overdue and upcoming tasks
Other
GET /api/insights— AI productivity analysis (requires Gemini key)GET /api/settings— Get settingsPOST /api/settings— Save settingsPOST /api/test-key— Test Gemini API keyGET /api/wip-limits— Get WIP limitsPOST /api/wip-limits— Save WIP limitsGET /api/export— Export all data as JSONPOST /api/import— Import data from JSONPOST /api/tasks/bulk-action— Bulk complete/delete/update
Same SQLite database, instant sync:
node task-manager.js add "My task" "2026-03-01" "high" "work"
# Appears on the board within 10 seconds (or on refresh)GEMINI_API_KEY=your-key node task-insights.js
# Or configure in Settings → board saves the key encryptedReminder scripts can send notifications:
openclaw message send --channel telegram --target REDACTED_TELEGRAM_USER_ID \
--message "Task completed!"nohup node server.js > dashboard.log 2>&1 &