Inspiration

Most learning platforms are built for a single institution. Smaller colleges can't afford separate installs, and personalization usually means paying per call to an external AI API, with decisions nobody can explain. Exam proctoring is yet another separate tool. I wanted one platform that solves all three together.

What it does

  • Multi-tenant: one app serves many institutions. Each institution's data is isolated inside the database by Postgres row-level security.
  • Adaptive learning: every answer updates a per-topic cognitive profile (accuracy, speed and a trust score). The next question comes from the learner's weakest topic at a matching difficulty, with a plain-English "why this question" explanation.
  • Human-reviewed proctoring: during timed quizzes, [tab-switching, focus loss and webcam face/gaze signals] create confidence-scored flags. An instructor reviews each one. Nothing is ever auto-failed.
  • Role-based dashboards for super-admin, tenant-admin, instructor and student.

How I built it

Next.js and Tailwind on the front end; Supabase (PostgreSQL, Auth, row-level security) on the back end; deployed on Vercel. There is no paid AI API. The logic is explainable and runs inside the database.

Each answer updates a trust score per learner and topic with an exponential moving average:

$$T_{new} = T_{old} + \alpha\,(\text{outcome} - T_{old})$$

Harder correct answers raise trust more, and wrong answers on easy questions lower it more. TF-IDF and cosine similarity rank practice content for the weakest topic:

$$\cos(\theta)=\frac{A\cdot B}{|A|\,|B|}$$

Security is layered: every table carries a tenant_id, composite foreign keys make cross-tenant links impossible, answer keys live in a table students can't read, and students submit answers through a server-side function that checks them. 41 automated tests run against a real Postgres to verify isolation and scoring.

Challenges I ran into

  • Getting RLS policies right without blocking legitimate queries
  • Stopping students from reading answers while still giving instant feedback
  • Browser camera and focus events behaving differently across browsers

Accomplishments that I'm proud of

Tenant isolation enforced at the database level and verified by automated tests, plus personalization where every decision can be explained.

What I learned

Multi-tenant design, row-level security, designing proctoring with a human in the loop.

What's next

Pilot with a real class, validate the scoring constants on real learners, auto-calibrate question difficulty from results, and expand proctoring beyond browser signals.

Built With

Share this project:

Updates

Submission history