Elo Learn is an adaptive learning prototype built with FastAPI and Streamlit. The code is meant to show how student mastery, concept reasoning, recommendation logic and review scheduling can work together in one package.
I built this project to explore a practical student modeling workflow: track performance, surface the right next topics, explain recommendations, and schedule review tasks in a compact dashboard.
- Tracks student progress across topics using a Bayesian Knowledge Tracing implementation.
- Builds student and concept embeddings to compare mastery patterns and peer behavior.
- Uses a concept graph to identify prerequisites, readiness and remediation steps.
- Produces explainable recommendations with topic evidence and confidence signals.
- Schedules review sessions using an SM2-inspired spaced repetition routine.
- Shows cohort metrics and identifies students who need instructor attention.
This project is not just a demo. It is a working research prototype for adaptive learning that combines multiple educational signals in one place. It is designed to be easy to run locally and to demonstrate how analytics can support both individual learners and instructors.
backend/: FastAPI application, endpoints for recommendations, mastery, coach analytics, and review scheduling.frontend/: Streamlit dashboard with student and instructor views.recommendation_engine/: baseline and explainable recommendation models.knowledge_graph/: concept dependency reasoning and readiness calculations.ml_models/: embedding generation and feature engineering for students and topics.datasets/: static artifacts and example student interactions.tests/: automated checks for algorithms and backend endpoints.
Requirements: Python 3.10+.
Windows:
python -m venv venv
& .\\venv\\Scripts\\Activate.ps1
python -m pip install -r requirements.txtmacOS / Linux:
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txtStart the backend:
uvicorn backend.main:app --reload --port 8000Start the frontend:
python -m streamlit run frontend/dashboard.py --server.port 8500Open http://localhost:8500 in your browser to use the dashboard.
GET /students/{student_id}/mastery: student mastery mapGET /recommendations/{student_id}?model=hybrid&top_k=5: explainable recommendationsPOST /recommend/explain_v2: recommendation explanationsGET /kg/path?topic={topic}: concept prerequisite pathGET /instructor/cohort_overview?weak_threshold=0.65: cohort analytics summaryGET /instructor/at_risk?mastery_threshold=0.6&max_results=50: at-risk student listGET /reviews/due/{student_id}: review topics due nowGET /recommend/benchmark?top_k=5&evaluation=full: recommendation benchmark comparison
Run the full suite with:
pytest -q