All projects

2025 — Backend development and data modelling

Adaptive assessment LMS

Learning platform with adaptive paths, a question bank and personalised assessment.

  • Flask
  • PostgreSQL
  • TypeScript
  • Docker
Role
Backend development and data modelling
Duration
5 months
Year
2025

Architecture

  1. Interface

    • Learner path
    • Instructor dashboard
  2. API

    • Flask and answer validation
    • Question selection engine
  3. Data

    • PostgreSQL (questions, attempts)
    • Mastery history per skill
  4. Operations

    • Versioned migrations
    • Backups and monitoring

Context

[TO COMPLETE: the project setting, the target audience and the initial learning problem.]

The problem

[TO COMPLETE: one path for everyone, barely actionable results, time-consuming grading.]

The solution

Each question is linked to a skill and a difficulty level. After every attempt, the engine updates a mastery estimate, then picks the next question within a window that stays challenging without discouraging the learner.

The data model separates the question bank, attempts and aggregated results. That separation makes it possible to recompute a path without losing history, and to give instructors a per-skill view instead of a single average.

My role

[TO COMPLETE: what you designed and built — schema, API, algorithm, tests.]

What I take away

[TO COMPLETE: two or three sentences about the project trade-offs.]

Challenges

  1. Avoiding questions that are too easy or too hard: per-skill level estimation and selection within a difficulty window.

  2. Ensuring fairness between learners: reproducible draw, skill weighting and attempt logging.

  3. Keeping response times short despite the history: aggregate queries and cached computed paths.

Results

skills tracked per learner
6 skills tracked per learner
manual grading time [TO COMPLETE]
-40% manual grading time [TO COMPLETE]
learners in the test phase [TO COMPLETE]
120 learners in the test phase [TO COMPLETE]

Screenshots

[TO COMPLETE: add 2 to 4 screenshots with alt text.]