Blog

lernginx — Open-Source LMS for middle/high school that I just released

lernginx — Open-Source LMS for middle/high school that I just released

After several weeks of refactoring and cleaning up the code, today I finally released lernginx as an open-source project on GitHub. This is a Learning Management System (LMS) for middle school/high school level that I originally created for a client's private project.

Initially this project was internally called SCCR NextGen — a fairly complex online learning system: there was content management, student module registration, teacher assignments, uploading profile photos, resetting passwords via WhatsApp, and various other features that are usually found in commercial LMS.

The problem is, the codebase is still mixed with the client's identity: company name, telephone number, employee photos, Indonesian language in the UI — basically it can't be published directly. Instead of asking for permission one by one, I decided to completely refactor: strip all identities, change to generic, UI full English, dynamic routing from database.

What is lernginx?

lernginx is a web-based LMS built with vanilla PHP 8.4, MySQL/MariaDB, and Nginx. No framework, no Composer, no Node.js build steps. All pure procedural PHP + vanilla JavaScript. This is on purpose — so that it is light, easy to understand, and can run on minimal servers.

Lernginx main page
Lernginx homepage display with hero section and program navigation.

Tech Stack

ComponentsTechnology
BackendPHP 8.4 (procedural, PDO)
DatabaseMySQL/MariaDB (InnoDB, utf8mb4)
FrontendVanilla PHP, Vanilla JS, CSS
EditorQuill rich text editor
ServerNginx with rewrite rules for clean URLs
TestingPlaywright with Chromium headless (36 E2E tests)

Highlighted Features

Role-Based Access

Three roles with their respective dashboards: Admin (full control), Teacher (manage content + assign students), and Student (register modules + view content). Each role has different access and pages.

Admin dashboard lernginx
Admin dashboard after login.

Program & Category Management

The learning program (mathematics, science, language, arts) is not hardcoded — but is generated automatically from the categories table in the database. The admin just needs to add the main category, and it will immediately appear as a new program page. No need to create a new PHP file every time you want to add a program.

lernginx program page
Program page that displays the main categories of the database.

Content Management System

Complete CRUD for posts, pages, categories and tags. The editor uses Quill — a rich text editor that is powerful enough for writing learning material. Plus there is an automatic slug generator feature, excerpt, featured image, thumbnail, and YouTube embed.

Content management in lernginx
Content management — list of posts with filters and status.

Student Module Registration

Students can register for available programs, teachers can assign modules manually. There is a flexible approval system — it can be automatic or require review from a teacher. Suitable for school scenarios that require enrollment control.

Profile & Photo Upload

The student/teacher profile can be filled in completely: photo (auto-convert to WebP), telephone number (to reset password via WhatsApp), address, date of birth, school of origin, major, NISN. Photos are uploaded directly via drag & drop or file picker — with a preview before upload.

Clean URL Routing

There are no bad query strings. URLs use Nginx rewrite rules which produce paths such as /mathematics/, /dashboard/post/mathematics/intro-algebra/. Admin also has a clean URL via /dashboard/topic/{slug}/ and /dashboard/programs/.

Post details on lernginx
Display post details — category, author, and learning content.

Why Open Source?

Honestly, this project would be too much of a shame if it just sat on the hard disk. The code structure is quite neat (after refactoring), the documentation is quite complete, and there are 36 E2E tests that all run. Maybe someone needs a simple LMS without the hassle of installing Moodle or buying Google Classroom.

Apart from that, with open source, who knows, maybe someone will contribute — adding features, fixing bugs, or porting it to another framework. At a minimum, this repository can be a reference for those learning native PHP + Nginx routing + LMS architecture.

Try Directly

Clone repository, import SQL, and run:

git clone https://github.com/adammuizweb/lernginx.git
mysql -u root -e "CREATE DATABASE lernginx"
mysql -u root lernginx < database/schema.sql
mysql -u root lernginx < database/seed.sql
cp app/.env.example app/.env
# Edit DB credentials di app/.env
# Arahkan root Nginx ke public/

Demo account available in seed data:

Closing

This isn't a perfect project — there are still some parts that need polish, more complete installation documentation, and perhaps a database schema that could be improved. But for a side project that you can do while drinking coffee, it's not bad.

If anyone tries it or finds a bug, feel free to open an issue on GitHub or pull request directly. The repo is at github.com/adammuizweb/lernginx.

Oh yes, the first release already includes 9 screenshots which can be seen directly on the release page.