An internal management system built with Laravel 12 to digitize and streamline the Vocational High School OJT (On-the-Job Training) administration workflow.

During the first month of my 4-month OJT program (December 2025 - March 2026), I was tasked with developing an internal administration platform for the school's OJT division. The existing management process was heavily reliant on physical paperwork, manual data entry, and physically signed letters, which created significant bottlenecks for the teaching staff. This project was developed not as a simulated exercise, but as a real-world solution to modernize the school's internal infrastructure, streamline student data tracking, and automate official document generation.
Developed using Laravel 12 and PHP 8.2 with a robust MVC architecture, backed by PostgreSQL and containerized using Docker. The platform serves as a central hub for OJT data management. It features a secure three-tier role system enforced by route middleware, automated PDF document generation using a headless LibreOffice container via symfony/process, and a responsive, modern frontend powered by Tailwind CSS v4. The system was engineered to handle concurrent data entries safely and provide accurate real-time capacity calculations for industry partners.
A secure three-tier hierarchy — super_admin (system-wide access), admin_jurusan (department-scoped operations), and siswa (self-registration) — each with strict middleware enforcement and tailored dashboards.
Flexible login system supporting both usernames and Student ID numbers (NIS), featuring role-aware credential resolution and secure session state management.
Full CRUD operations and relational tracking for student records, department details, supervisor assignments, and transportation logistics.
Advanced monitoring system for industry partners, tracking addresses, leadership details, and automatically calculating available placement slots based on real-time assignment data.
Engineered a reliable pipeline to generate formal inquiry letters by populating DOCX templates via PhpWord and converting them to pixel-perfect PDFs through a headless LibreOffice Docker container.
Implemented session-based temporary file tracking with event listeners that automatically purge generated documents upon user logout, ensuring optimal server storage health.
Generating professional-quality PDFs from DOCX templates required strict formatting consistency across different server environments, which native PHP PDF libraries failed to deliver reliably.
Integrated a headless LibreOffice instance running in an isolated Docker container. PhpWord handles the data population, while symfony/process orchestrates the conversion, ensuring pixel-perfect output every time.
Each user role required distinct dashboard interfaces, customized route visibility, and strict data isolation — managing this securely without creating spaghetti code was an architectural challenge.
Designed a layered middleware stack with a shared authentication gate followed by a dynamic role-resolver. This cleanly maps users to specific guards and redirect targets, keeping access logic isolated and maintainable.
Industry partners have strict capacity limits. Displaying accurate remaining slots required real-time calculation to prevent over-assignment during concurrent student registrations.
Implemented computed attributes on the model layer that query live student counts against quotas, reinforced by database-level constraints to guarantee data integrity even under race conditions.




