Inspiration

We built Euclid because everyone deserves high-quality, one-on-one math tutoring—no matter where they live or what resources they have available. Many students struggle with learning math, and while private tutoring can be greatly beneficial, the cost is often prohibitive. By combining voice interaction with real-time canvas snapshots, Euclid feels like it's truly present: speaking naturally, listening attentively, and annotating each student’s work. This lets it deliver instant, tailored guidance and personalized feedback. But Euclid does more than just solve math problems—it encourages students with gentle, confidence-boosting prompts, breaks every problem into bite-sized steps, and celebrates each win, keeping learners motivated. This dynamic, multimodal experience replicates the best parts of private tutoring while being more accessible than ever and far more effective than simple LLM Q&A.

What it does

Euclid is a collaborative math problem space where students can:

  • Upload notes or PDFs to generate practice problems.
  • Sketch solutions on a whiteboard-like interface powered by Tldraw.
  • Ask for help from an AI tutor who can view their current whiteboard and provide hints.
  • Check their work, get feedback, and receive new problems based on their progress.

Everything happens in-context—on the canvas—through arrows, equations, and agent feedback, mimicking how a tutor might work alongside you on a physical whiteboard.

How we built it

Frontend: React + Tldraw for the canvas-based UI, using custom shapes and math rendering via KaTeX.

Conversational Agent: Built with Vapi, using Claude 4 with vision to process current whiteboard state and provide hints, guidance, or feedback.

Practice Problem Generation: Claude 4 processes uploaded PDFs of math notes to extract concepts and generate new LaTeX-formatted practice questions.

Authentication and Storage: Supabase stores user accounts, problem spaces, and canvas snapshots for each question.

Challenges we ran into

  • Getting usable context into the LLM agent: we explored both passing images of the canvas and using snapshot.json state.

Accomplishments that we're proud of

  • Created a somewhat working and deployed web application

What we learned

  • Tldraw is very cool but also incredibly complicated especially when it comes to saving and loading canvas states.
  • Using vision description as context worked surprisingly well when it comes to getting context from the canvas to the voice agent.

What's next for Euclid

  • Add a social layer: allow users to share their problem spaces with friends or tutors for collaborative solving.
  • Improve agent grounding: extract and annotate key steps or errors in student work over time.

Built With

  • anthropic
  • react
  • supabase
  • vapi
  • vite
Share this project:

Updates