Skip to main content
  1. Blog/

Automating Roadmap.sh into NotebookLM

Waseem Al-Dmeiri
Author
Waseem Al-Dmeiri
Product Engineer @ WAJ
Table of Contents

Introduction
#

If you’re a developer, you probably know roadmap.sh. It’s the gold standard for figuring out what to learn, packed with community-curated articles and videos.

Then there’s NotebookLM. For me, this is the “holy grail” of studying. You feed it a few links, and it generates these incredibly fun, informative “Deep Dive” podcasts. I started listening to them on my daily commute, and honestly, I’ve never absorbed complex tech topics faster.

The Problem: The Backend roadmap has over 130 nodes. Each node has about 7 resources. Doing the math? That’s nearly 1,000 links to manually copy-paste.

I tried doing it by hand for about ten minutes before realizing I’d be there all week. So, I did what any developer would do: I automated it.

Seeing it in Action
#

Example of a generated notebook about gRPC

How I Built the Bridge
#

I wanted a simple, three-stage pipeline that didn’t over-engineer the problem. I used a community-built wrapper called notebooklm-py to handle the heavy lifting with Google’s internal API.

flowchart TD
A[(roadmap.sh\nGitHub Repo)]
A -->|Scrape Links| B[/Stage 1\nget_resources.py/]
B -->|JSON Map| C[/Stage 2\ncreate_notebooks.py/]
C -->|Auto-Upload| D{{NotebookLM}}
D -->|Fuzzy Search CLI| E[/Stage 3\ngenerate_study_material.py/]
E --> F1([Flashcards])
E --> F2([Podcasts])
E --> F3([Quizzes])

    classDef source fill:#1e3a5f,stroke:#4a9eff,color:#e0f0ff
    classDef stage fill:#1a2e1a,stroke:#4caf50,color:#b8f0b8
    classDef platform fill:#3b1f4e,stroke:#a855f7,color:#e9d5ff
    classDef output fill:#2e1f1a,stroke:#f97316,color:#fed7aa

    class A source
    class B,C,E stage
    class D platform
    class F1,F2,F3 output

1. The Scraper (get_resources.py)
#

First, I needed the data. I targeted the open-source repo behind roadmap.sh. The script recursively digs through their JSON structures and markdown files to find every curated YouTube video and article link.

2. The Heavy Lifting (create_notebooks.py)
#

This is where the magic happens. The script logs into NotebookLM (reusing a local session) and:

  • Creates a dedicated notebook for every single topic.
  • Generates a “context” markdown file so the AI knows why it’s looking at these links.
  • Uploads the resources automatically.

Note: Google doesn’t love it when you create 130 notebooks in 2 seconds, so I added some deliberate asyncio.sleep pauses to keep things civil.

3. The Interactive CLI (generate_study_material.py)
#

Since you can’t (and shouldn’t) generate 130 podcasts at once, I built a snappy CLI. It uses InquirerPy for fuzzy searching.

When I want to study “Redis” or “gRPC,” I just type a few letters, select the topic, and hit Enter. The script triggers the generation on Google’s servers, and by the time I’ve grabbed a coffee, my study materials are ready.

The Takeaway
#

I’ve learned more in the last few weeks using this setup than I have in months of “doom-scrolling” documentation.

If you want to set this up for yourself (it works for Frontend, DevOps, or any other roadmap too), check out the GitHub repo!