This is a submission for the Hacktoberfest Weekend Challenge: Build for a Friend
What I Built
I built Roadmap AI, a learning roadmap generator that turns a vague goal like "I want to become a machine learning engineer" into an interactive, visual graph of topics — showing which concept unlocks which next one.
I built it for my friend, who is trying to break into ML but keeps getting stuck. Not because the resources don't exist — there are thousands of them — but because nobody tells you what order to learn things in. He'd start a course, hit a wall, jump to another tutorial, and repeat. Classic tutorial hell.
So instead of handing him another YouTube playlist, I built him something that answers the actual question: "What should I learn next, and why?"
The app generates a directed graph where every node is a topic (with difficulty and estimated hours) and every edge is a prerequisite relationship. You can drag nodes around, zoom in, and see exactly which topic unlocks the next.
Demo
- Demo video: https://youtu.be/97DKdwSNPPQ
Code
How I Built It
The whole thing runs entirely on my laptop, offline, using open-source AI at every layer:
-
llama3.1via Ollama — the open-weight model doing the actual curriculum generation. No API keys, no rate limits, no per-token cost. - Streamlit — the entire UI and chat interface.
-
streamlit-flow(React Flow under the hood) — renders the interactive graph canvas. - NetworkX — validates the LLM's output as a proper DAG (no cycles), then computes a layered layout so the graph reads left-to-right by prerequisite depth.
The pipeline is simple on purpose:
- User types a learning goal + what they already know.
- The prompt asks the model for JSON only — an
overview, a list ofnodes, and a list ofedgeswhere each edge means "from must be learned before to." - Python parses the JSON, builds a NetworkX
DiGraph, breaks any cycles the LLM accidentally introduced, and computes layer positions. -
streamlit-flowrenders it as a draggable, zoomable flowchart with color-coded difficulty (green/yellow/red).
The hardest part was making the graph feel interactive and stable — Streamlit reruns constantly, and custom React components don't like being re-mounted. The fix was persisting the flow state in st.session_state and rendering the canvas in a dedicated section instead of inside a chat bubble. It took a lot of debugging, but it works smoothly now.
Why Does Open Innovation Matter?
This project would have been strictly worse as a closed-API build.
- Privacy. My friend's career goals, current skill level, and gaps are personal. With a local model, none of that ever leaves his laptop.
- Zero cost. He can regenerate roadmaps all day, try 20 different goals, and it costs nothing. A closed API would turn "let me explore" into "let me count my tokens."
- Offline. He can use it on a train, on a flight, in a cafe with bad Wi-Fi. No dependency on someone else's uptime.
- Swap the model. If a better open-weight model drops next month, he swaps one line. If he gets a beefier laptop, he runs a 7B or 13B model instead of 3B. No permission needed.
-
Tweak the behavior. The prompt is right there in
roadmap_generator.py. He can change the tone, the granularity, the hour estimates — it's his tool.
None of that is possible with a closed API where the weights, the behavior, and the pricing are all someone else's call. Open innovation is what made this a personal tool instead of a product.
Prize Categories
- Best Use of Open-Weight Models
- Best Local / Offline Build
- Best Use of Ollama
- Beginner-Friendly Build
Top comments (0)