Inspiration
As a CS student at Cal Poly, I've spent countless hours grinding LeetCode problems alone. No feedback, no guidance, just staring at the screen until I give up and look at the answer. I wanted to build something that actually teaches you to think through problems instead of just showing you solutions.
What it does
AlgoMentor is an AI-powered mock technical interview coach. You pick a problem by difficulty, write code in a real editor, and get guided help along the way:
- Ask AI questions about your approach and get contextual guidance without spoilers
- Progressive hints that build on each other and never repeat
- In-browser code execution for both Python and JavaScript
- Full debrief after submission with AI analysis of your specific code, complexity breakdown, readiness score, missed edge cases, and alternative approaches in three languages
- The AI never gives you the answer. It coaches you toward it.
How I built it
- Built the entire project using Kiro's spec-driven development
- Three full specs drove the implementation:
- Core app with problem selection, editor, test runner, hints, and debrief
- Enhanced problems with multi-language code solutions
- Python language support with in-browser execution via Pyodide WebAssembly
- Each spec went through requirements, design, and implementation tasks
- Kiro generated design documents and task breakdowns from my requirements, then implemented each task with tests
- AI layer uses OpenAI through a lightweight Express backend with graceful fallback
- Tech stack: React 19, Vite, Tailwind CSS, Monaco Editor, Pyodide, OpenAI, Express, Vitest, fast-check
Challenges I ran into
- Pyodide loading time - The Python WebAssembly runtime is around 10MB and takes several seconds to load. Had to add lazy initialization and graceful error handling so the app doesn't break if you click Run before it's ready.
- AI hint repetition - The AI hints and Ask AI answers would sometimes say the same thing. Fixed by sending previous hints as context so the AI knows what's already been said.
- Keeping AI from giving answers - Tuning the system prompt to be helpful without being a cheat sheet took several iterations. The AI needs to guide thinking, not dump solutions.
Accomplishments that I'm proud of
- 193 passing tests across 26 test files, including property-based tests that validate correctness across randomly generated inputs
- In-browser Python execution via Pyodide WebAssembly with no backend needed
- AI coaching layer that genuinely guides thinking instead of giving answers
- Graceful fallback - the entire app works without AI enabled, falling back to static hints and rule-based analysis
- Three complete Kiro specs documenting the full journey from requirements to design to implementation
What I learned
- Spec-driven development with Kiro forces you to think about what you want before writing code
- The specs became living documentation that made the codebase easy to understand as it grew
- Property-based testing with fast-check caught edge cases I never would have thought to test manually
- Building an AI coaching system that helps without giving answers is harder than building one that just answers questions
What's next for AlgoMentor
- More problems across more categories like dynamic programming, graphs, and trees
- User accounts to track progress over time
- Conversation memory for the AI coach so it can reference earlier exchanges
- Timed mock interview mode that simulates real interview pressure
- Community-contributed problems so students can help each other learn
Built With
- express.js
- fast-check
- javascript
- monaco-editor
- node.js
- openai-api
- pyodide
- react-19
- tailwind-css
- vercel
- vite
- vitest
Log in or sign up for Devpost to join the conversation.