Inspiration

Meet Daniel. He sits in the third row, always on time, always taking notes. In week two the class moves from fractions to algebra, and something doesn't click. How can a letter be a number? He looks around and everyone else seems fine. His teacher has 34 students and 40 minutes. Asking would mean admitting he's lost, so he stays quiet and tells himself he'll catch up at home.

At home there's nobody to ask. He re-reads the notes and they make less sense. By week four, he's building new topics on a foundation that was never there.

Then comes the test. He fails. His teacher writes "see me" on the paper. His parents say "you need to try harder," and he is already trying harder than anyone in that room. Slowly he starts to believe the worst thing a student can believe: I'm just not smart enough.

Daniel wasn't dumb. He had one missing piece in week two, and for five weeks nobody could see it: not his teacher, not his parents, not even Daniel. The test didn't reveal a lack of ability. It revealed a gap that was weeks old.

Millions of students are Daniel. We built DROP to catch him in week two.

What it does

DROP is an AI teaching platform that finds learning gaps early and helps students fix them. It works for teachers, for students, and for students with no class at all.

For students

AI-written lessons with objectives, worked examples, common mistakes and a mini-quiz Instant grading that explains why an answer was wrong, and what kind of mistake it was (a calculation slip vs a misunderstood concept) An AI tutor that knows which lesson the student is on and answers at any hour, in different styles (simpler, step by step, more examples) A revision hub that points to their own weak topics and upcoming tests A calendar and smart reminders, plus XP, levels, streaks and achievements Study Alone mode: upload a PDF or type a topic, and DROP builds a mini-course, a study schedule and a final exam

For teachers

Create a classroom and the AI writes the course: weekly lessons, assignments, weekly tests, a midterm and a final A heatmap of which topics each student got wrong, the hardest topics for the class, and a risk level (low, medium, high) for every student, so teachers can step in before the exam Lists of inactive and at-risk students, AI-written class reports, and Excel/CSV exports

Secure exams: a server-side timer that refreshing can't reset, shuffled questions per student, and strikes for leaving fullscreen or switching tabs. Too many strikes auto-submits the exam, and every other page is locked during the test.

How we built it

Frontend: plain HTML, CSS and JavaScript, with no front-end framework. Jinja templates render the pages. The look is a custom CSS design system with glassmorphism (frosted, blurred glass panels using backdrop-filter, with a solid fallback for older browsers) and light and dark themes. Chart.js draws the analytics charts and MathJax renders the maths in lessons. A JavaScript exam guard handles fullscreen, tab-switch detection, autosave and the countdown. Backend: Python and Flask, with SQLAlchemy (SQLite locally, PostgreSQL on Render), Flask-Login and bcrypt for accounts, and gunicorn for serving. AI engine: Groq (openai/gpt-oss-120b) as the main model, with OpenRouter as an automatic backup. Each task (planning, lessons, tests, grading, tutor, insights) is routed and tuned separately. Analytics: study time, topic accuracy, score trends, correlation and regression are plain Python and SQL with no AI. The AI only writes the explanations on top of the numbers, so dashboards work even if the AI is down. Exam integrity: the deadline is stored on the server when a student presses Start, and the browser only displays the clock. Violations are logged with timestamps, grouped if they happen within 2 seconds, and capped per attempt. Built with AI coding assistance: we used [Claude Code] to help build the glassmorphism design system, to write parts of the backend, and to find and fix bugs during development. We reviewed and tested what it produced, and we can explain how each part works. Deployment: hosted on Render with a PostgreSQL database.

Challenges we ran into

AI output is messy. Models returned broken JSON, bad escape characters, and maths formulas that corrupted when parsed. We built repair logic and normalised multiple-choice questions so they can be auto-graded safely. Our first approach asked the AI for too much at once. Requests that generated a whole course in one go failed or came back cut off. We had to rebuild the generation flow around small pieces. Free-tier rate limits. We built a queue that paces tokens per minute, reads "try again in…" messages and retries, and switches provider when one is blocked. Exams are hard to protect in a browser. A student could refresh to pause the clock or open the tutor in another tab. Moving the clock to the server and locking all other pages fixed both. Making the app useful when AI fails. We added demo-content fallback, and made the analytics independent of AI. Deployment. Render built our app on a newer Python version than our database driver supports, which crashed it on start. Pinning the Python version and dependencies fixed it.

Accomplishments that we're proud of

A complete loop: a student gets a question wrong, the weak topic is detected, the tutor helps, and the teacher sees it on the heatmap. An analytics engine that works without AI, so the numbers are explainable and not guesswork. Secure exam mode, including server-side timing and cross-tab lockdown. Study Alone mode, so a student with no class and no money for tutoring still gets a structured course. A system that never dead-ends: if one AI fails, another takes over, and if both fail, the product still works.

What we learned

Don't ask AI to do everything at once. Ask it to do one thing at a time.

At first we asked the AI to generate a whole course in one request: every week, every lesson, every test. It broke down. Responses got cut off, JSON came back malformed, formulas were corrupted, and we hit rate limits. Everything failed together.

The fix changed how we think about AI. We now generate one piece at a time. The outline comes first. Each week's lessons are generated only when needed, and each lesson is written in three smaller requests. Tests are built from what was actually taught that week. Requests go through a queue, one at a time. The AI became far more reliable, because each task was small enough to do well, and when one piece fails, we retry only that piece.

We also learned that AI needs guardrails (validate its output, expect failures, have a fallback), and that showing a student why they were wrong matters more than the score.

What's next for DROP

Better explanations from a stronger AI model. We plan to upgrade the lesson-writing model so notes are far more explanatory, with step-by-step reasoning, analogies and worked examples for different learning levels. Animated lesson videos built with HTML, CSS and JavaScript. Our goal is for students to remember a lesson like a film scene, not a page of text. Each lesson would turn into a short animated explainer with diagrams, motion and narration. Since our front end is already HTML, CSS and JavaScript, we can generate animations directly in the browser. Optional camera check during exams. A student could allow periodic snapshots (for example every five minutes) checked by an AI vision model to flag signs of cheating, such as another person in frame or the student looking away. Because our users are minors, we'd make it opt-in with teacher and parent consent, show clearly what is captured, flag cases for teacher review rather than punishing automatically, and delete images quickly. Working password reset with email Moving course generation to background workers so teachers don't wait A teacher review step for AI-written lessons and questions, especially maths Spaced repetition, to remind students to revisit topics just before they forget them Alerts for teachers and parents when a student's risk level rises

Daniel's story doesn't have to end with "I'm just not smart enough." With DROP, it ends in week two, with a tutor explaining algebra one more time.

Built With

Share this project:

Updates

Submission history