Most online courses keep going whether you've understood the last lesson or not. Finishing a video isn't the same as understanding it, and when you're stuck you usually get the same explanation again.
So our team, Under Ctrl, built Cognify: an adaptive learning platform that turns a learning goal into a personal course and changes the course based on how you actually answer.
How it works
π― Describe what you want to learn, e.g. "Python for data analysis"
π§ A short diagnostic finds what you already know
πΈοΈ Cognify builds a skill graph, a map of concepts and the prerequisites between them
π Each lesson is generated from at least 3 cited sources
π§βπ« A built-in tutor answers your questions, gives hints before full solutions and accepts voice input
πΈ For written questions you can upload a photo of your handwritten working, like a maths derivation, and get it graded
π If two of your answers point to the same misunderstanding, Cognify gives you a quick check first. Only if you get the check wrong does it add a review lesson, and it shows you why
What makes it different
The skill graph isn't just a visual roadmap. It keeps the evidence from your answers: what you got wrong, what changed in your path and the reason for each change. A single wrong answer never reshapes your course. The model suggests changes; our own rules decide whether they happen.
How we built it
βοΈ Next.js 16, React 19, TypeScript and Tailwind CSS
π€ Gemma 4 (Google's open model) through the Gemini API: it plans the graph, writes lessons and questions, grades short answers and tutors
ποΈ Supabase Auth and Postgres, with row-level security so learners can't edit their own grades
π Tavily web search for sources, with a curated fallback catalog
β
Zod checks every piece of model output against a schema before anything is saved
π§ͺ Automated tests cover the full learner journey without network calls
What we learned
- Model output is a proposal, not a decision. Checking it and keeping the decisions in our own code made the system predictable and testable.
- LLMs and JSON have funny edge cases. LaTeX like \frac is a valid JSON escape, so maths was silently turning into control characters until we caught it.
- Finishing a lesson and mastering a skill are different things. Keeping them separate made our dashboard honest.
π Try it: https://cognify-under-ctrl.vercel.app
π» Code: https://github.com/p-art-dheev/Under-Ctrl
π₯ Demo: https://youtu.be/c5Z_SZ1gWnY
Huge thanks to my teammates [@Dalli Krishan Preetham Reddy], [@Irala Charuhas Reddy], [@Vatturu Pardeev] and [@A Prithvi], and to INIT CLUB, iDEA CLUB and Major League Hacking for organising.
Top comments (0)