← All work
Full Stack Developer2024 — 2025ZAWTech.ai

AI-Powered Adaptive Learning & Gamified Assessment Engine

Next.jsPythonOpenAI APIRBAC Architecture

At ZAWTech.ai I worked on an LMS where quizzes can come from a static bank or OpenAI, and a rocket UI advances when students answer correctly. Teachers can generate questions from course material, and Super Admin / Admin / Teacher / Student roles keep org, content, and learner views separate.

Selection Control
LMS configuration portal with roles and taxonomy controls

Role and taxonomy settings for multi-tenant orgs.

Architecture breakdown

01

RBAC System

Super Admin, Admin, Teacher, and Student roles — from org billing and LLM budgets down to courses and learner progress.

02

Dual-Engine Assessment

Switch between database quiz banks and OpenAI generation through a Python service that returns structured JSON.

03

Rocket Progress

Framer Motion rocket tied to answer correctness — correct answers move it forward; wrong answers keep it in place.

04

Multi-Format Support

MCQ, fill-in-the-blank, and passage comprehension for recall and reading checks.

The core challenge

Traditional LMS platforms rely on static, repetitive question banks. Students memorize fixed patterns (academic dishonesty risk), and form-based quizzes lack real-time visual feedback — causing drop-offs on longer assessments.

  • Four-tier RBAC: Super Admin, Admin, Teacher, Student
  • Dual-engine quizzes: database static banks + OpenAI dynamic generation
  • MCQ, FIB, and Passage-based comprehension formats
  • Gamified rocket progress with real-time correctness sync
  • Streaming + structured prompts so AI quiz generation feels responsive

Technical solution

Next.js App Router for the product shell and gamified assessment UI; NestJS/Node for core business logic & RBAC; Python (FastAPI/Flask) microservice for LLM orchestration; PostgreSQL for users, roles, and static quiz repositories; Redis for session and LLM response caching.

Next.js and Framer Motion handled the assessment UI. A Python service ran LLM prompts, retries, and JSON parsing away from the main API. PostgreSQL stored tenancy and roles; Redis cached sessions and repeat LLM responses.

Engineering challenges

Static banks vs. generated questions

Fixed question banks were easy to memorize. We added an OpenAI path that uses course material and teacher prompts, and streams questions so the UI stays responsive.

Keeping students in longer quizzes

Replaced a plain progress bar with a rocket that moves on correct answers — simple feedback tied to correctness.

Keeping roles clean

Separate flows for Super Admin (org, billing, LLM budgets), Admin (onboarding & audits), Teacher (content & prompts), and Student (learn & assess).

Impact

2 modes

Database banks + OpenAI-generated quizzes

4 roles

Super Admin, Admin, Teacher, Student

3 formats

MCQ, fill-in-the-blank, and passage