The Problem
A 400-employee manufacturing company tracked training and compliance certification through paper records and a shared Excel workbook. When an auditor asked for evidence that all employees on the production floor had completed their mandatory safety certifications, the HR team spent two days manually compiling paper records. Recertification reminders were sent ad-hoc by email and frequently missed.
Beyond compliance, institutional knowledge lived in personal files, email threads, and the memories of senior engineers. When a key engineer retired, their knowledge retired with them.
What I Built
The system combines a Learning Management System (LMS) for structured training with a knowledge base for unstructured institutional knowledge.
Training paths are built by HR/managers and assigned to employee roles. Each path is a sequence of modules. video lessons, documents, SCORM packages, or custom quizzes. Progress is tracked per employee; completion unlocks the next module. Certification modules have expiry dates, and the system automatically enqueues recertification reminders 30 days before expiry.
Compliance dashboard gives HR and managers a real-time view of certification status across the workforce. who is compliant, who has lapsing certifications, and who has overdue mandatory training. The dashboard is filterable by department, role, and certification type. Audit-ready PDF reports are generated on demand.
Knowledge base is a structured wiki built with a rich text editor (Tiptap). Articles are categorised, version-controlled, and searchable via Elasticsearch. Search supports full-text with typo tolerance, category filters, and "people also asked" suggestions based on query co-occurrence patterns.
Video hosting: training videos are stored in S3, transcoded via a Lambda-based pipeline to multiple bitrates, and delivered through a custom HLS player with progress tracking and resume-from-last-position.
Technical Highlights
The backend is a Spring Boot application with PostgreSQL. Training completion events are stored in an event-sourced pattern. every progress event is appended to an events table, and the current state (progress percentage, completion status) is derived from the event stream. This provides a full audit trail without any mutable "progress" record.
Elasticsearch is synchronised from PostgreSQL via a Debezium CDC (Change Data Capture) pipeline. When a knowledge article is created or updated in Postgres, the Debezium connector streams the change to Elasticsearch within seconds.
Certificate PDF generation uses iText 7. each certificate is generated on demand with the employee name, certification name, completion date, and an expiry date.
Outcome
The system launched to all 400 employees across a phased 8-week rollout with department-by-department onboarding. All paper certification records were digitised and migrated. On the first post-launch compliance audit, the HR team produced the required evidence pack in 15 minutes vs 2 days previously.
Training completion rates for mandatory safety modules increased from an estimated 70% (based on paper records, which were incomplete) to a measured 94% within 6 months of launch.