Roadmap → Excalidraw
Generate roadmaps that mimic the roadmap.sh visual language, rendered as Excalidraw
scenes the user can open and edit. roadmap.sh itself uses a React Flow node graph; this skill
recreates its style + layout (central dashed spine, yellow topics alternating left/right of the
spine, purple subtopics stacked under each topic, hand-drawn Rough.js look) and emits an
.excalidraw file via a zero-dependency Node generator.
Workflow
- Get the content.
- If the user gives only a subject (e.g. "Rust backend roadmap"), design a sensible
topic → subtopic breakdown yourself.
- If the user gives a markdown/outline or list, normalize it to the schema below.
- Write the outline JSON to a file (e.g.
roadmap.json).
- Run the generator:
node <skill-dir>/generate.js roadmap.json -o roadmap.excalidraw
(<skill-dir> = ~/.claude/skills/roadmap-excalidraw. Output defaults next to the input if
-o is omitted.)
- Tell the user how to open it: drag-and-drop the
.excalidraw file onto
excalidraw.com, or open it with the Excalidraw VS Code extension or
desktop app.
Outline schema
{
"title": "Frontend",
"topics": [
{
"name": "Internet",
"subtopics": [
{ "name": "How does the internet work?", "level": "recommended" },
"What is HTTP?",
{ "name": "Browsers and how they work", "level": "optional" }
]
},
{ "name": "HTML", "subtopics": ["Learn the basics", "Semantic HTML"] }
]
}
subtopics entries may be plain strings (shorthand, treated as recommended) or
objects with an optional level.
level: recommended → solid purple box; optional → outlined purple box (mirrors
roadmap.sh's "alternative/optional" emphasis).
- Keep topic/subtopic names short (a few words) so they fit the boxes.
See examples/frontend.json for a complete worked example.
Style guide (what the generator reproduces)
- Central dashed spine down the middle (blue
#0a33ff), the backbone of the roadmap.
- Title: large hand-drawn text centered above the spine.
- Topics: yellow (
#ffe599) rounded rectangles with black border, alternating to the
right and left of the spine, connected to it with short lines. The vertical order = learning
order, top to bottom.
- Subtopics: purple boxes (
#d9ccf5 solid, or outlined when optional) stacked in a column
under their topic, chained with thin connectors.
- Hand-drawn font + Rough.js sketch style (Excalidraw native) match the roadmap.sh feel.
To tweak colors, spacing, or fonts, edit the STYLE / LAYOUT constants at the top of
generate.js.
Notes
- The script is Node, zero dependencies — output is plain Excalidraw JSON. Turning a subject
or freeform outline into the outline schema is the model's job; the script only does layout.
- Text labels are bound to their boxes (they move/resize together when edited).
- Connectors are plain lines (not interactive bindings), which keeps layout robust; the user can
re-route or re-bind them in Excalidraw if desired.
1---2name: roadmap-excalidraw3description: Build roadmap.sh-style learning roadmaps as editable Excalidraw scenes. Use when the user wants to create, visualize, or design a roadmap, learning path, skill tree, or curriculum (e.g. "make a roadmap for X", "build a frontend roadmap", "visualize a learning path in Excalidraw"). Produces a .excalidraw file with a central dashed spine, yellow topic boxes, and purple subtopics.4---56# Roadmap → Excalidraw78Generate roadmaps that mimic the **roadmap.sh** visual language, rendered as **Excalidraw**9scenes the user can open and edit. roadmap.sh itself uses a React Flow node graph; this skill10recreates its *style + layout* (central dashed spine, yellow topics alternating left/right of the11spine, purple subtopics stacked under each topic, hand-drawn Rough.js look) and emits an12`.excalidraw` file via a zero-dependency Node generator.1314## Workflow15161. **Get the content.**17 - If the user gives **only a subject** (e.g. "Rust backend roadmap"), design a sensible18 topic → subtopic breakdown yourself.19 - If the user gives a **markdown/outline or list**, normalize it to the schema below.202. **Write the outline JSON** to a file (e.g. `roadmap.json`).213. **Run the generator:**22 ```bash23 node <skill-dir>/generate.js roadmap.json -o roadmap.excalidraw24 ```25 (`<skill-dir>` = `~/.claude/skills/roadmap-excalidraw`. Output defaults next to the input if26 `-o` is omitted.)274. **Tell the user how to open it:** drag-and-drop the `.excalidraw` file onto28 [excalidraw.com](https://excalidraw.com), or open it with the Excalidraw VS Code extension or29 desktop app.3031## Outline schema3233```json34{35 "title": "Frontend",36 "topics": [37 {38 "name": "Internet",39 "subtopics": [40 { "name": "How does the internet work?", "level": "recommended" },41 "What is HTTP?",42 { "name": "Browsers and how they work", "level": "optional" }43 ]44 },45 { "name": "HTML", "subtopics": ["Learn the basics", "Semantic HTML"] }46 ]47}48```4950- `subtopics` entries may be plain **strings** (shorthand, treated as `recommended`) or51 **objects** with an optional `level`.52- `level`: `recommended` → solid purple box; `optional` → outlined purple box (mirrors53 roadmap.sh's "alternative/optional" emphasis).54- Keep topic/subtopic names short (a few words) so they fit the boxes.5556See `examples/frontend.json` for a complete worked example.5758## Style guide (what the generator reproduces)5960- **Central dashed spine** down the middle (blue `#0a33ff`), the backbone of the roadmap.61- **Title**: large hand-drawn text centered above the spine.62- **Topics**: yellow (`#ffe599`) rounded rectangles with black border, **alternating** to the63 right and left of the spine, connected to it with short lines. The vertical order = learning64 order, top to bottom.65- **Subtopics**: purple boxes (`#d9ccf5` solid, or outlined when `optional`) stacked in a column66 under their topic, chained with thin connectors.67- Hand-drawn font + Rough.js sketch style (Excalidraw native) match the roadmap.sh feel.6869To tweak colors, spacing, or fonts, edit the `STYLE` / `LAYOUT` constants at the top of70`generate.js`.7172## Notes7374- The script is **Node, zero dependencies** — output is plain Excalidraw JSON. Turning a subject75 or freeform outline into the outline schema is the model's job; the script only does layout.76- Text labels are **bound** to their boxes (they move/resize together when edited).77- Connectors are plain lines (not interactive bindings), which keeps layout robust; the user can78 re-route or re-bind them in Excalidraw if desired.