
Roadmap Tool
I got tired of roadmap tools, so I built a small one
Every team eventually needs a roadmap. Not a backlog, not a kanban board, but an actual timeline showing what's happening and when. And every time I've gone looking for something to fill that role, I end up choosing between "too much" (Jira, Linear, full project management suites) and "too fragile" (a shared Google Sheet that someone inevitably breaks).
So I built something for the middle ground.
The idea
I wanted the data to live in a YAML file. In the repo, versioned, editable in a text editor, reviewable in a PR like any other config. No proprietary format, no lock-in, no "export to CSV" button that produces garbage.
The visual layer is a browser app: a Gantt chart rendered as SVG. You run a local server, open localhost, and there's your roadmap. State lives in localStorage; nothing is persisted server-side because there is no server-side persistence.
The YAML structure is pretty much what you'd expect:
title: My Roadmap
start: 2025-01-01
end: 2025-12-31
groups:
- id: backend
name: Backend
color: "#4A90D9"
tasks:
- id: auth
name: Authentication
start: 2025-01-15
end: 2025-02-28
assignee: Alice
progress: 80
tags: [security]
notes: OAuth2 + JWT
Tasks go inside groups. Each task has a date range and optionally an assignee, tags, a progress percentage, and notes. That's the whole model.
Things I spent more time on than I expected
Dependencies. You can declare depends_on between tasks or groups, and the tool rejects anything that would create a cycle. Cycle detection sounds simple until you're actually writing it and realize you need to think carefully about what "a cycle in a partially-specified graph" even means at import time.
Undo/redo. Full history, Ctrl+Z / Ctrl+Y. This felt like a nice-to-have until I started actually using the app and immediately wanted it.
Read-only mode. Append ?url= to point the app at a remote YAML file and it loads in read-only. I use this to share roadmaps with people who shouldn't be editing them, like our management team who can use this in their weekly alignments. Just host the YAML somewhere and hand out the link.
The stack
FastAPI backend, vanilla JS frontend, ruamel.yaml for parsing, Pydantic for validation. No React, no build step, no node_modules. I made that choice deliberately and I don't regret it. The frontend is just app.js, and when something breaks I can actually find it.
Running it
uv sync
uv run app
That's it. Hot reload if you're developing:
RELOAD=true uv run app
Tests:
uv run pytest -v
It's not going to replace your issue tracker. But if you've ever wanted a clean visual overview of a project that lives in your repo and doesn't require anyone to log into anything then this does that job well.
You can find the code for this on https://github.com/nilicule/roadmapTool, a demo is running on https://n2g.dev/roadmap



Comments