Progress you can see · Skills you can prove

Learn in motion,
certify the proof.

A learning space that tracks every lesson, scores every quiz, and turns consistency into a streak — then hands you a certificate when you finish.

0Live courses
0Your enrollments
0Lessons completed
The catalog

Find your next course

Filter by topic, difficulty, or price. Every card shows real progress if you've enrolled.

🔍
Welcome back

Alex, ready to keep the streak alive?

You're making real progress. Pick up where you left off.

0Lessons this week
0Quizzes passed
0Day streak
0
Enrolled
0
Completed
0
Certificates
0%
Avg quiz score

Continue where you left off

Your courses

Enrolled & in progress

Achievements

Certificates

Earn one by finishing every lesson and passing every quiz (70%+).

``` **File 2 — `gpt-5.1_instructor_analytics.html`** ```html Lumen Academy — Instructor Analytics
LumenInstructor Analytics Instructor · Dr. Priya Nair
Live data PN
Teaching intelligence

Your courses, decoded.

Enrollment trends, completion, quiz difficulty, engagement, and revenue — all generated from simulated SQL over the platform's in-browser data model.

Total students

Active learners
0
across all courses
0vs prev period

Enrollments

90d
0
total sign-ups
0growth

Completion rate

avg
0
finish a course
0improving

Avg quiz score

passing
0
across all quizzes
0steady

Revenue

90d
0
paid courses
0growth

Enrollment trend

New enrollments per month
Area
Enrollments

Top courses

By enrollments
Rank

💡 What's working

✓
JavaScript Fundamentals leads completion at 71% — its short, quiz-anchored modules keep learners moving.

⚠ What needs attention

!
Module 2 of "SQL & Data Analysis" shows a 41% pass rate — the JOIN questions are the main drop-off point.

📈 Opportunity

$
Intro to Machine Learning has the highest revenue but a 58% completion — a "finish the course" nudge could lift certificates and referrals.

1 · Enrollment trends over time

Monthly new enrollments, stacked by course
Stacked bar

By course

Total + free/paid split
Breakdown
▸ Show SQL query
-- New enrollments per month, per course SELECT date_trunc('month', e.enrolled_at) AS month, c.title, COUNT(e.id) AS enrollments FROM enrollments e JOIN courses c ON c.id = e.course_id WHERE e.enrolled_at >= now() - interval '90 days' GROUP BY 1, 2 ORDER BY 1, enrollments DESC;

2 · Average completion rate by course

% of enrolled students who finished
Bar
▸ Show SQL query
-- Completion rate per course SELECT c.title, ROUND(100.0 * COUNT(DISTINCT CASE WHEN p.completed = 1 THEN e.student_id END) / COUNT(DISTINCT e.student_id), 1) AS completion_pct FROM enrollments e JOIN courses c ON c.id = e.course_id LEFT JOIN progress p ON p.enrollment_id = e.id GROUP BY c.id ORDER BY completion_pct DESC;

Completion funnel

Where students drop off
Funnel
!
Largest drop: between "started" and "module 1 complete" — 38% of students never finish the first module. A quick win: shorten the intro lesson.

3 · Quiz difficulty analysis

Pass rate per question — lowest first
Sorted

Question pass-rate heatmap

Quiz × question
Heat
▸ Show SQL query
-- Which questions have the lowest pass rates SELECT q.course_id, q.quiz_id, q.question_no, q.text, ROUND(100.0 * COUNT(DISTINCT CASE WHEN a.correct = 1 THEN a.student_id END) / COUNT(DISTINCT a.student_id), 1) AS pass_rate FROM quiz_answers a JOIN quiz_questions q ON q.id = a.question_id GROUP BY q.id HAVING COUNT(DISTINCT a.student_id) >= 30 ORDER BY pass_rate ASC LIMIT 10;
!
3 questions sit below 50% pass rate. The "LEFT JOIN" and "p-value interpretation" items are the weakest — consider a worked example before each, or reword the distractors.

4 · Weekly activity heatmap

Lessons completed per day
Heatmap

Time & throughput

Per active learner / week
Metrics
0
Avg time / week
0
Lessons / week
0
Median streak
0
Return within 7d
▸ Show SQL query
-- Engagement: lessons completed per student per week SELECT date_trunc('week', p.completed_at) AS week, COUNT(DISTINCT p.student_id) AS active_students, ROUND(COUNT(p.id) * 1.0 / COUNT(DISTINCT p.student_id), 1) AS avg_lessons, ROUND(AVG(p.time_spent_min) / 60.0, 1) AS avg_hours FROM progress p GROUP BY 1 ORDER BY 1;

5 · Revenue breakdown

Monthly gross revenue from paid courses
Bar
▸ Show SQL query
-- Monthly revenue from paid courses SELECT date_trunc('month', o.created_at) AS month, SUM(o.amount) AS revenue, COUNT(o.id) AS orders, ROUND(SUM(o.amount) / COUNT(o.id), 2) AS avg_order FROM orders o JOIN courses c ON c.id = o.course_id WHERE c.price > 0 GROUP BY 1 ORDER BY 1;

Revenue by course

Price × paid enrollments
Ranked
$
Avg order value is $74. Machine Learning and Leadership drive ~46% of revenue. A bundle of the two could lift order value further.
Phase 2 · Database design

Progress-tracking schema

Normalized tables with explicit foreign keys so completion, quiz scores, and certificates can be joined and aggregated cleanly. This is the model the simulated SQL above queries.

▤courses
  • id PK · uuid
  • title · text
  • topic · enum
  • level · enum
  • price · numeric
  • instructor_id · FK
▤modules
  • id PK · uuid
  • course_id FK → courses
  • title · text
  • position · int
▤lessons
  • id PK · uuid
  • module_id FK → modules
  • title · text
  • type · enum(video,quiz)
  • duration_min · int
▤students
  • id PK · uuid
  • name · text
  • email · text
  • created_at · timestamptz
▤enrollments
  • id PK · uuid
  • student_id FK → students
  • course_id FK → courses
  • enrolled_at · timestamptz
  • unique(student, course)
▤progress
  • id PK · uuid
  • enrollment_id FK → enrollments
  • lesson_id FK → lessons
  • completed · bool
  • time_spent_min · int
  • completed_at · timestamptz
▤quiz_questions
  • id PK · uuid
  • course_id FK → courses
  • quiz_id · int
  • question_no · int
  • text · text
▤quiz_answers
  • id PK · uuid
  • student_id FK → students
  • question_id FK → quiz_questions
  • selected · int
  • correct · bool
  • answered_at · timestamptz
▤forum_posts
  • id PK · uuid
  • course_id FK → courses
  • student_id FK → students
  • body · text
  • likes · int
▤certificates
  • id PK · uuid
  • student_id FK → students
  • course_id FK → courses
  • issued_at · timestamptz
  • code · text (unique)
▤orders
  • id PK · uuid
  • student_id FK → students
  • course_id FK → courses
  • amount · numeric
  • created_at · timestamptz

Relationship map

courses 1—N modules 1—N lessons students 1—N enrollments N—1 courses [enrollment = student × course] enrollments 1—N progress N—1 lessons [one row per lesson, tracks completion + time] quiz_questions 1—N quiz_answers N—1 students [per-question pass rate = difficulty] courses 1—N forum_posts 1—N orders 1—N certificates -- completion rate, quiz difficulty, engagement & revenue all derive from these joins