All projects

LMS Web App for Mr. Essam Mathematics

An online teaching platform for a maths teacher: video lectures only the right students can watch, access codes, quizzes with mixed automatic and manual grading, and assistants who handle admin without touching content. Built solo with a Go API and a Next.js frontend.

Role
Sole developer: design, frontend, backend, database and deployment-ready setup
Timeline
February – September 2026 (first release late June 2026, then regular releases)
Client
Mr. Essam Mathematics
~8 mo From first commit to ongoing maintenance
12 Release pull requests reviewed and merged by the client
~85 Commits
3 User roles: teacher, assistant, student

Overview

A maths teacher needs one place to publish video lectures, control which students can watch them, test students with quizzes and delegate routine admin work to assistants. I built that platform alone, from design through frontend, backend and database. Work started in February 2026, the client reviewed and released each batch through pull requests into main, and the first production release went out in late June 2026. After that I kept it maintained with regular releases through September.

The business idea

A teacher who sells or delivers maths courses online needs control over who watches what. Generic platforms are either expensive per student, give the teacher little control over access, or don't fit their workflow. This platform is built around the teacher's own workflow instead.

Goals

  • Publish video lectures that only the right students can watch
  • Let the teacher control which students get access, using access codes
  • Test students with quizzes and grade them, with instant feedback where possible
  • Let assistants handle routine admin without giving up control of the content

Tech stack

Next.js (App Router)TypeScriptTailwind CSSshadcn/uiLucide iconsGoGinGORMPostgreSQL 15+HLS video streaming (hls.js)AWS S3 and CloudFrontResend (transactional email)Docker Compose (Postgres and pgAdmin)

Key features

  • Teacher dashboard with stats, plus lecture management: create, edit and publish lectures with video upload, thumbnails and downloadable materials
  • Access codes: generate single or bulk codes per lecture and revoke them
  • Quiz builder with multiple-choice, true/false and short-answer questions, each with optional images, and a results view per quiz
  • Student management, and assistant management: invite by email, resend invites, remove
  • New teachers must be approved by an existing approved teacher
  • Assistants get a dedicated access-codes page and a read-only lecture view, and cannot create or edit lectures or quizzes
  • Students sign up, verify their email, unlock lectures with access codes, watch them through secure video streaming and take quizzes
  • Student dashboard, lecture library, unlock page, quiz list, results page with scores and question images, profile and help pages
  • Email verification, invites and password reset through Resend
  • Cloud file storage with a CDN, and a responsive UI that includes mobile video playback

Challenges & solutions

Problem

Teachers, approved teachers, assistants and students each need different routes and screens, and assistants must be able to do some teacher work without getting all of it.

Solution

I split the API into role-based route groups and gave assistants a shared, limited group, so they reach access codes and read-only lectures and nothing else.

Problem

Quizzes mix questions a computer can mark with ones a teacher must read. A single attempt needs an immediate score and a later correction.

Solution

Multiple-choice and true/false answers are graded on submit. Short answers are saved with a pending status, and the student sees a partial result that explains what is waiting. When the teacher grades them, the final score updates.

Problem

Mobile browsers could not play lectures at first.

Solution

I fixed it in a dedicated release, restoring video playback on mobile browsers, so the player works on phones as well as desktops.

Problem

After verifying their email or being approved as a teacher, users had to log out and back in before the app reflected the change.

Solution

I changed both so the change applies immediately, with no re-login.

Problem

Lecture videos are large, and passing them through the app server is slow and wasteful.

Solution

Large videos upload directly to cloud storage and are delivered through a CDN, so the app server doesn't carry the files.

Problem

Editing a quiz question had gaps: changing its type didn't persist, and images worked only for some question types.

Solution

I fixed type changes so they save, and extended images to every question type and to the results view.

Lessons learned

  • Keep scope tight. I removed an announcements feature nobody needed, which kept the product focused on lectures, access and quizzes.
  • Design for mixed grading from the start. Giving each answer its own grading status made the pending state simple to show and to update.
  • A staging branch plus numbered release pull requests gave the client a clear way to review and release work, and gave me a steady rhythm.

Known limitations & next steps

  • There is no automated test suite yet. Adding one is my first next step.
  • Next step: move to a shared, multi-instance-ready infrastructure layer.
  • Next step: add analytics for lecture and quiz engagement. There are no measured usage statistics yet.

Screenshots

LMS Web App for Mr. Essam Mathematics screenshotLMS Web App for Mr. Essam Mathematics screenshotLMS Web App for Mr. Essam Mathematics screenshotLMS Web App for Mr. Essam Mathematics screenshotLMS Web App for Mr. Essam Mathematics screenshotLMS Web App for Mr. Essam Mathematics screenshot

Want something like this built?

Tell me about your project and I'll get back to you.

Get in touch
Next project Fleet Compliance & Billing Platform