Praktis
- Role —
- Scrum Master & Full-Stack Engineer
- Date —
- September 30, 2025
- Stack —
- React, Express, MySQL, MongoDB, Docker
Praktis is a full-stack Learning Management System (LMS) engineered specifically for university computer science courses. Built to support multi-role academic workflows (Admins, Teaching Assistants / Asdos, and Students / Mahasiswa), the platform simplifies session scheduling, assignment collection, and course administration.
As Scrum Master, I facilitated team execution while actively contributing across backend architecture, security middleware, and environment containerization.
Architectural Highlight: Dual-Database Persistence
To balance relational integrity with document flexibility, Praktis uses a hybrid database strategy:
- Relational Core (MySQL / Sequelize): Manages relational domain data requiring strict transactional consistency—such as user accounts, role enrollments (
PraktikumUserRole), class definitions, and scheduled sessions (Pertemuan). - Document Store (MongoDB / Mongoose): Manages unstructured, schema-flexible resources—such as learning modules (Materi), assignments (Tugas), student submissions, active user session tokens, and APM observability logs.
Key Features & Technical Accomplishments
1. 5-Layer File Upload Anti-Abuse System
To prevent server storage exhaustion and malicious uploads on local disk storage:
- Per-User Quota Guard: Enforces a strict 100 MB total active storage allocation per student.
- Upload Rate Limiting: Restricts upload requests to 10 attempts per 15 minutes per IP.
- Double MIME & Extension Verification: Validates file extensions (
.pdf,.docx,.zip, etc.) alongside browser MIME types. - Storage Protection & Error Handling: Enforces a 5 GB global system-wide cap and intercepts OS
ENOSPCdisk errors with HTTP 507 responses to prevent Node.js crashes. - Filename Obfuscation: Strips internal timestamp prefixes (
userId-timestamp-) fromContent-Dispositionheaders so users download clean, human-readable file names.
2. Real-Time Schedule & Room Conflict Detector
Engineered a conflict detector for the Admin Dashboard calendar that flags overlapping room assignments and time slots, providing 1-click deep-linking into session resolution modals.
3. Full-Stack Docker Containerization
Dockerized the entire development stack (React Vite SPA, Express API, MySQL, and MongoDB) using docker-compose. This eliminated “works on my machine” issues across the team, automated volume persistence, and simplified database seeding scripts.
Ongoing Refactoring & Technical Lessons
Beyond initial delivery, I led efforts to refactor legacy controller patterns, upgrade query handling to modern Mongoose document models (returnDocument: 'after'), and optimize Docker build contexts for local development live-reloading.