A local, Markdown-driven project management app. dotodo puts a tactile interface on top of Markdown so you can manage projects visually while keeping your data portable and text-first.
- Use a visual interface on top of Markdown to manage projects
- Work directly in the UI and export project state as Markdown
- Load a board from an existing Markdown file
- Link a local Markdown file so file edits update the UI
- Update tasks in the UI and sync those changes back to the file
- Keep your project and project management together.
- Integrate with coding agent to plan and act upon tasks.
dotodo-smaller.mp4
Use the Markdown format below to update tasks. You may:
- Update status by moving tasks under the correct section.
- Create new tasks by adding new lines (omit
idto create).
- (id:UUID) [feature|medium] Task title - Optional description
- Status is determined by the section header (TODO / IN PROGRESS / DONE).
- To create a task, omit
(id:...):- [ ] [feature|low] New task title - Description
- To update a task, keep its
(id:...)and edit title/description. - Description comes after
" - "on the same line. Remove it if not needed. - Keep
typeasfeatureorbug. Priority islow,medium, orhigh. - Move tasks to the correct section to change status.
- [feature|medium] New task title - Short description
- (id:EXISTING-ID) [bug|high] Existing task title - Updated description
- (id:EXISTING-ID) [feature|low] Completed task title - Final notes
Create:
- [feature|medium] Add onboarding hints - Guide new users through actions
Update:
- (id:abc123) [bug|high] Fix sync race - Handle file update conflicts
Move to done:
- (id:abc123) [bug|high] Fix sync race - Handle file update conflicts
visit the official app : https://dotodo.dev
- Open
index.htmldirectly, or serve the folder for file-linking features:
python -m http.server 8000- Visit
http://localhost:8000. - Create a project, add tasks, drag cards between columns.
- Use Markdown pane to import/export board state.
- (Optional) Link a Markdown file for live sync (requires HTTPS/localhost).
index.htmlis the entry point and UI layout.css/styles.cssdefines the skeuomorphic hybrid theme, depth system, and typography.js/app.jswires UI interactions, keyboard shortcuts, rendering, and data flow.js/db.jsprovides IndexedDB storage for projects, tasks, and file links.js/markdown.jshandles Markdown parsing and export.js/linker.jswraps the File System Access API for optional file sync.js/ui/contains dialog and toast widgets used by the app.
openDB()initializes IndexedDB stores.BoardUIloads projects + tasks into memory.- UI interactions update the store and cache, then re-render columns.
- Markdown or file linking read/write passes through
markdown.jsandlinker.js.
- Data is stored locally in IndexedDB and localStorage.
- Clearing site data resets boards.
- File linking works only in secure contexts (HTTPS/localhost).
- The linked Markdown file is the source of truth.
- External edits to the file are reflected in the UI and IndexedDB on the next sync cycle.
- New tasks added without ids are assigned ids, synced into the UI, then written back to the file immediately.
- Tasks removed from the file (TODO / IN PROGRESS / DONE) are removed from the UI and IndexedDB.
- If there is any conflict, the Markdown file wins.