Crewboard
A team task board you can remix into your own Dodil organization and have running in minutes. Boards → lists → cards, three roles, a full change history, drag and drop on the web, and the same actions from Claude or ChatGPT over MCP.
- People: the board owner invites members and viewers. Members work the cards; viewers read and can't change anything (not even through the AI). Only the owner manages people and lists. Nobody sees a board they are not on: it answers "no such board" on the web and over MCP.
- Cards: title, description, assignee, due date, labels, short ids like
OPS-12. Drag a card between lists or within a list to reorder it. Lists are the owner's own (add, rename, remove when empty); the last list means "done". - History: every change is recorded with who, when, and each field's before and after.
- Two people editing one card: the second save gets "changed since you opened it" (409) instead of silently overwriting the first.
- Extras: overdue cards are flagged automatically; "blocked by" links with loop protection and a "what is blocking X?" answer that follows chains; Dodil Models suggests a checklist (a person picks what to keep), finds cards that mean the same thing (embeddings), and writes a daily board summary from the board's own data.
Use it from Claude or ChatGPT
Add https://<your app host>/mcp as a connector (Claude.ai: Settings → Connectors → Add custom
connector). You sign in as yourself, so the AI sees exactly your boards. Things to try:
| You say | Tool |
|---|---|
| "What's on my plate this week?" | my_cards |
| "Add a card 'Send invoice' to Doing on the Ops board, due Friday, assign it to me" | add_card |
| "Move card 12 to Done" | move_card (a bare number works when only one of your boards has it) |
| "What's overdue?" | overdue |
| "What is blocking the launch?" | what_blocks |
| "Who changed OPS-4, and what?" | card_history |
| "Give OPS-7 to bo@team.com" | assign_card |
| "Turn OPS-3 into a checklist" | suggest_checklist, then apply_checklist with what you keep |
| "Any cards like OPS-9?" | similar_cards |
| "Summarise the Ops board for today" | board_summary |
Every tool is an action from application/use_cases.py; there is no raw table access.
Remix it
dodil git remix <org>/crewboard --to-org <your-org> --name <your-repo> # repo name ≤ 18 chars
The remix creates the bucket with its tables (schema.sql), the user pool, the app's service
account and its CI secrets, then deploys through Dodil Git CI.
One step after the remix (sign-in needs it): register the app's callback on its user pool.
dodil ignite app get <your-repo> # copy the host from public_urls
dodil appid settings get <your-repo>-users # keep any redirect URIs already there
dodil appid settings set <your-repo>-users \
--redirect-uris https://<host from public_urls>/.dodil/auth/callback
Open https://<host>/, sign up or sign in, create a board, invite people by email.
Connecting Claude.ai? It registers itself and waits for approval once:
dodil appid client list <your-repo>-users, then
dodil appid client approve <your-repo>-users <client-id>.
Health: GET /healthz (no database), and dodil ignite invoke <your-repo> (POST /), which opens
the bucket with the app's own credential and returns the row count per table.
Run it locally
No Dodil account needed: with no BUCKET set, the app keeps everything in memory and acts as
DEV_USER (AI features are off).
cd app
pip install -r requirements.txt pytest
python -m pytest -q ../tests
DEV_USER=you@example.com uvicorn boards.main:app --port 8080
Layout
app/boards/
domain/model.py Board, Card, roles and every rule (no I/O)
application/use_cases.py the actions; web and MCP call only these
application/ports.py what the use cases need: a repository and an assistant
infrastructure/ DataK3 repository, Dodil token + Models client, in-memory repository
doors/web.py, page.html JSON routes and the board page
doors/mcp.py the MCP tools
main.py wiring, /mcp sign-in metadata, self-check
tests/test_boards.py roles, visibility, history, locking, ordering, dependencies, both doors
schema.sql the tables a remix creates
.dodil/remix.yaml what a remix provisions
.dodil/deploy.yaml how CI deploys every copy
Design notes: DESIGN.md.
What I would improve next
- A "today" view per person in the web page with the daily summary sent by email.
- Card comments and attachments (DataK3 objects).
- Vector search through DataK3's own vector column instead of the in-process cache.
- Board templates (a "Sprint" or "Hiring" board with ready lists).
MIT licence. Built on the Dodil Boards Challenge starter.