Blog lernginx — Open-Source LMS for middle/high school that I just released Written by Adam Muiz 29 Jun 2026 Updated: 06 Aug 2026 4 min read 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 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 FeaturesRole-Based AccessThree 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 after login.Program & Category ManagementThe 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.Program page that displays the main categories of the database.Content Management SystemComplete 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 — list of posts with filters and status.Student Module RegistrationStudents 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 UploadThe 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 RoutingThere 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/.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 DirectlyClone 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: Admin: [email protected] / passwordTeacher: [email protected] / passwordStudent: [email protected] / password ClosingThis 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.