- Convert roadmap to YAML:
- Add data structure: id, priority, title, goal, tags, milestone
- Add `details` field (supports list or block string); populated initial content
- Quote scalars and use explicit nulls to avoid YAML parse edge cases
- Update `updated` date to 2025-08-22
- Flask blueprint + loader:
- New /roadmap view with section switching (roadmap | backlog | open_questions)
- Filters: q (search), tag (multi, AND), min_priority, milestone
- Dataclasses: RoadmapData/RoadmapItem; include `details`
- `_normalize_details()` to accept string or list, normalize to list[str]
- Configurable path via `ROADMAP_FILE` (env or defaults)
- Remove cache layer for simplicity
- UI (Tailwind):
- `templates/roadmap.html` with responsive cards, tag chips, and filter form
- Details modal (larger max width, scrollable body) showing ID/goal/priority/tags/milestone
- Safe JSON payload to modal via `|tojson|forceescape`
- JS:
- DOM-ready, event-delegated handler for `data-item` buttons
- Populate modal fields and render multi-paragraph details
- Fixes & polish:
- Resolved YAML `ScannerError` by quoting strings with `:` and `#`
- Ensured `details` is passed through route to template and included in button payload
- Minor styling tweaks for consistency with Tailwind setup
Usage:
- Set `ROADMAP_FILE` if not using default path
- Visit /roadmap and filter via q/tag/min_priority/milestone