This post is my submission for DEV Education Track: Build Multi-Agent Systems with ADK.
What I Built
I built an Autonomous Multi-Agent Handwritten Notes Generator.
Students and educators often need clean, visual study guides that resemble real handwritten notes, but manually summarizing technical subjects and formatting them takes hours.
This system solves that by combining autonomous web research, structured note extraction, and headless browser rendering. You enter any topic or question, and a coordinated team of AI agents researches the concept, formats it into a notebook layout using Google handwriting fonts (Caveat), and captures a high-resolution .png notebook page screenshot.
Deployment & Repository Links:
-
GitHub Repository:
himanshuyeolecse-jpg / multi-agent-handwritten-notes
An autonomous multi-agent system built with LangGraph, Tavily, and Playwright that researches complex topics and renders handwritten-style student study notes into PNG screenshots.
multi-agent-handwritten-notes
An autonomous multi-agent system built with LangGraph, Tavily, and Playwright that researches complex topics and renders handwritten-style student study notes into PNG screenshots.
π Multi-Agent Handwritten Notes Generator
An autonomous multi-agent workflow built using LangGraph, LangChain, Tavily Search, and Playwright. The system researches complex technical concepts and dynamically compiles the findings into styled, handwritten-notebook PNG screenshots.
ποΈ System Architecture
[ User Input / Prompt ] β βΌ [ Researcher Node ] ββ (Tavily Web Search & Summarization) β βΌ [ Note Renderer Node ] ββ (HTML/CSS + Google Caveat Font + Playwright Screenshot) β βΌ [ Critic Node ] ββ (Validation Check: Is Output Complete?) β Approved? βββΊ No βββΊ [ Researcher Node ] β Yes βΌ [ PNG Screenshot Saved ]
β‘ Features
- Autonomous Research: Uses Tavily API to fetch up-to-date technical context.
- Dynamic HTML/CSS Rendering: Formats structured summaries into a paper-notebook layout utilizingβ¦
Live Application: https://multi-agent-handwritten-notes-uyc8am8kwydzwgjufxo3tp.streamlit.app/
Your Agents
The system uses a stateful multi-agent graph with discrete responsibilities:
-
Researcher Agent (
researcher_node):- Role: Queries the web via the Tavily API to gather technical context, then summarizes key concepts into structured bullet points, definitions, and exam tips.
-
Temperature:
0.0for deterministic, accurate factual extraction.
-
Note Renderer Agent (
note_renderer_node):-
Role: Converts structured research text into styled HTML/CSS featuring lined notebook paper, margin lines, and Google's Caveat handwriting font. It then spins up a headless Playwright Chromium instance to capture a pixel-perfect
.pngscreenshot.
-
Role: Converts structured research text into styled HTML/CSS featuring lined notebook paper, margin lines, and Google's Caveat handwriting font. It then spins up a headless Playwright Chromium instance to capture a pixel-perfect
-
Critic Agent (
critic_node):-
Role: Acts as a quality control guardrail. It checks that notes meet character thresholds and verifies the screenshot file was successfully generated before marking the loop as
APPROVED. If validation fails, it routes back for reflection.
-
Role: Acts as a quality control guardrail. It checks that notes meet character thresholds and verifies the screenshot file was successfully generated before marking the loop as
Agent Workflow Diagram
[ User Prompt ]
β
βΌ
[ Researcher Agent ] βββΊ (Tavily Search + Summarization)
β
βΌ
[ Note Renderer Agent ] βββΊ (HTML/CSS + Playwright Screenshot)
β
βΌ
[ Critic Agent ] βββΊ Approved? βββΊ [ Output PNG Saved ]
β β
ββββββββ No βββββββββ
Key Learnings
- Headless Browsers for Generative UI: Using LLMs to produce structured HTML/CSS coupled with Playwright for rendering turned out to be far more reliable and controllable for generating handwritten documents than standard diffusion-based image models.
- Managing Dict vs Object State: Handling message structures across different agent frameworks taught me the value of creating fail-safe input extractors for state objects to avoid runtime key errors during agent transitions.
-
Deployment System Dependencies: Deploying headless browsers in cloud environments requires careful management of Linux system dependencies (
packages.txtwith Chromium) alongside standard Python requirements.
Top comments (0)