Inspiration

I was frustrated by how expensive and generic AI education platforms have become. Every tool out there charges a monthly subscription just to wrap a paid API and spit out the exact same cookie-cutter study plans. I wanted to build something completely different: a private, 100% offline-capable career coach that doesn't just generate a static syllabus, but actively adapts to you over time using local agents and real machine learning.

What it does

DreamCatcher is a self-hosted agentic AI platform that turns career goals into dynamic, localized roadmaps. At its core is a local AI Tutor running entirely on your machine. Instead of generic templates, it uses local vector stores (RAG) to search real-world curricula and textbooks.

It features an Agentic Coordinator that continuously adapts your roadmap based on your pace and performance. There is a built-in spaced repetition engine, an ML-driven question difficulty calibrator trained using a scikit-learn random forest pipeline, and a live Interview Simulator that uses your webcam and mic to track presence metrics like pitch control and voice dips.

How we built it

The backend is powered by Python and FastAPI, handling a SQLite database and serving as the orchestrator for our local AI agents. We integrated Ollama directly to run models like Phi3 locally for our reasoning and logic tasks. For document retrieval, we built a custom RAG engine using FAISS and local sentence transformers. The difficulty calibrator is a pure scikit-learn pipeline using TF-IDF and RandomForest to classify questions on the fly.

The frontend is built with Next.js and styled with Tailwind CSS using a custom Neobrutalism design system. We leaned heavily into the Web Audio API to build custom oscillator sound effects and handle the voice processing for the interview simulator natively in the browser without heavy external dependencies.

Challenges we ran into

Getting multiple local LLM agents to orchestrate without timing out or hallucinating was brutal. Local models are slow, especially when processing large JSON schemas for the interview evaluations. We had to implement strict timeouts, fallback mock structures, and aggressively tune our system prompts. Another major headache was handling the asynchronous RAG ingestion pipeline; embedding large PDFs on a local CPU blocked the FastAPI event loop initially, forcing us to rethink our startup architecture and file hashing logic.

Accomplishments that we're proud of

We managed to build a completely free, zero-subscription platform that feels just as premium as paid tools. Implementing the bilingual English/Hindi toggle that dynamically injects constraints into the local Ollama prompts and swaps the TTS engine targets on the fly was a huge win. The Neobrutalist UI also turned out exactly how we envisioned it, complete with custom tactile feedback and sound design.

What we learned

We learned a massive amount about the realities of running local inference. You can't just throw massive prompts at a local 3B parameter model and expect it to work like a massive cloud model. We had to learn how to aggressively chunk context, use strict system instructions, and handle connection failures gracefully. We also got a deep dive into Web Audio APIs when building the custom pop sounds and voice analysis features.

What's next for DreamCatcher

We want to expand the local agent roster. The next step is adding a dedicated Code Reviewer agent that runs static analysis on local workspaces. We also plan to optimize the RAG pipeline by moving the embeddings to a dedicated worker queue so it scales better with massive textbook libraries.

Built With

Share this project:

Updates

Submission history