Website: getcurio.us/
GitHub: github.com/krishinparikh/curio
Background
What is the best method to self-learn a topic? On one hand, a regular course (perhaps through school or online) provides clear structure, but constrains learners into a one-size-fits-all curriculum. On the other hand, ChatGPT and other AI tools adapt to each user, but lack the structure of a traditional course.
Is there an alternative learning tool that balances both structure and flexibility? That question inspired Curio, a platform that uses AI to generate a structured course on any topic, adapted to each user.
I was awarded a $1k grant from the Veale Institute for Entrepreneurship to pursue this idea.
Ideation
The goal for the first iteration of this product was to validate the idea of providing structure to an AI-driven learning experience. Therefore, I did not want to build any major features beyond this core capability. I started by making a low-fidelity mockup in Figma, which informed the general user flow.
Implementation
I built the MVP with Next.js for rapid development. Server Actions eliminated the need for separate API routes, and custom React hooks with Tanstack Query handled state management efficiently.
Data is stored in a PostgreSQL database — hosted on Neon — which works perfectly fine. However, given the small number of tables and large amounts of JSON data, I am curious if a document-store database like MongoDB would fit my needs better.
One new technical challenge I faced was creating a WebSocket server for real-time AI chat generation. Next.js does not have native support for this, so I used Socket.io to create another server that will be hosted separately.
The most interesting part of this project was the LLM integration. I created an abstract LLMProvider class with concrete implementations for OpenAI, Anthropic, etc., each handling complete() and stream() methods. I also built a custom MarkdownRenderer component to properly style generated content, which utilized a variety of styling libraries.
Authentication uses Google Sign In via Auth.js, with full login functionality planned for later.
Next Steps
The product in its current state is an LLM wrapper, but I am curious if it will nonetheless provide user value. I plan to give this MVP to select beta users and continue iterating. While the product direction will largely be informed by this feedback, I have a few interesting feature ideas in mind:
-
Specialized course generation agent that scrapes the web for curriculum insights
-
Knowledge graph tracking user's learned concepts to enable contextual connections
-
Quizzes, diagrams, and practice exercises
-
Social feed to see what friends are learning
After the core features are determined with a high degree of certainty, I will refactor the tech stack to Vite (React) with FastAPI (Python). While Next.js with server actions has enabled me to move quickly, I don't believe this architecture will scale well. Additionally, I anticipate implementing more robust AI/ML down the road, which Python is better suited for.