Back to Projects & Case StudiesEnterprise Learning Platform & AI Knowledge Management
National-Scale LMS & AI-Powered Knowledge Management System

Enterprise Learning Center (LMS)

National-scale enterprise LMS with AI-driven knowledge management, adaptive learning paths, automated certification, and RAG-powered intelligent search across 20+ microservices.

My RoleSenior Full Stack Engineer & AI/ML Integration Lead
Duration18+ Months (continuous feature development across 20+ services)
Deployment TierOn-Prem Air-Gapped
Confidential Enterprise System Notice

“LMS adalah platform pembelajaran nasional milik organisasi enterprise yang menangani data pegawai, hasil ujian, dan sertifikasi kompetensi. Seluruh layanan berjalan di infrastruktur privat dengan autentikasi terpusat — tidak ada akses publik ke source code maupun live system.”

1. Context & Scope

Project Context

OrganizationEnterprise Training Organization
User ScaleThousands of Enterprise Employees, 20+ Microservices, National-Scale Deployment
Team Composition8-12 Engineers (cross-functional: backend, frontend, AI, mobile, QA)

Contributed as senior full-stack engineer across the LMS ecosystem — a national-scale LMS platform serving thousands of employees with AI-powered knowledge management, automated proctoring, adaptive certification workflows, and intelligent report generation spanning 20+ interconnected microservices.

2. Technical Constraints

Engineering Constraints

Operating under strict government air-gapped guidelines meant zero access to public cloud services (AWS/GCP/Azure), no third-party SaaS APIs, and strict validation against local SPBE cybersecurity standards.

  • Zero External Telemetry / 100% On-Premise Execution
  • Strict Data Sovereignty & Audit Traceability
  • Heterogeneous Legacy Database Interoperability
3. The Problem

The Challenge Before Intervention

Organisasi enterprise membutuhkan platform pembelajaran terpadu yang mampu melayani ribuan pegawai di skala nasional — dari pelatihan mandiri, ujian bersertifikasi, hingga manajemen pengetahuan berbasis AI. Sistem legacy sebelumnya terfragmentasi: LMS, pelaporan, manajemen ruangan, dan knowledge base berjalan di silo terpisah tanpa interoperabilitas.

Fragmentasi sistem: LMS, knowledge base, pelaporan, proctoring, dan manajemen ruangan berjalan di platform terpisah — tidak ada single source of truth untuk data pembelajaran.
Pencarian konten pembelajaran mengandalkan keyword search sederhana — pengguna kesulitan menemukan materi relevan di antara ribuan dokumen dan modul.
Pelaporan hasil pembelajaran dan sertifikasi masih semi-manual — memperlambat proses akreditasi dan evaluasi kompetensi pegawai.
4. Architectural Decisions

Technical Choices & Rationale

Technologies & Infrastructure
Spring Boot + Quarkus (backend)Next.js 16 (frontend)LangChain + RAG Pipeline (AI)PostgreSQL + ElasticsearchRabbitMQ + RedisDocker + Harbor RegistryFlutter (mobile)

01. Microservices Architecture: 20+ Specialized Services

LMS dipecah menjadi 20+ microservices: lms-api (LMS core), lms-manager (course management), lms-rooms (room booking), lms-proctoring (ujian), sertifikasi-api, lms-report, lms-reportgen (automated reporting), lms-jfkn (competency), kms-api (knowledge management), lms-ai (AI/RAG), lms-ml (machine learning), lms-mobile (Flutter), lms-dash (dashboard), lms-cop (community of practice), dan user-api. Setiap service dapat di-deploy, diskalakan, dan dikembangkan secara independen.

02. AI-Driven Knowledge Management dengan RAG Pipeline

Service lms-ai dan kms-api mengimplementasikan Retrieval-Augmented Generation (RAG) via LangChain untuk pencarian semantik di knowledge base LMS. Dokumen pembelajaran, modul, dan peraturan di-indeks ke Elasticsearch dengan embedding vector — memungkinkan pencarian berbasis makna, bukan sekadar keyword matching. Service RAG terpisah menyediakan inferensi LLM on-premise.

03. Automated Report Generation Engine

Service lms-reportgen mengotomatisasi pembuatan laporan hasil pembelajaran, statistik kelulusan, dan rekomendasi learning path dalam format PDF/Excel. Menggantikan proses manual yang sebelumnya memakan waktu berhari-hari menjadi hitungan menit.

04. Harbor Registry untuk Air-Gapped Container Management

Seluruh Docker image disimpan dan didistribusikan melalui Harbor private registry on-premise — memungkinkan deployment air-gapped yang aman tanpa ketergantungan pada Docker Hub atau registry publik.

// High-Level Architecture Topography

+------------------------------------------------------------------------------+
|              LMS — ENTERPRISE LEARNING CENTER (20+ MICROSERVICES)            |
|                                                                              |
|   +---------------------+          +--------------------------------------+  |
|   |  Browser / Mobile   | -------> | API Gateway / Reverse Proxy          |  |
|   |  (Next.js / Flutter)|         +---------------------------------------+  |
|   +---------------------+                         |                          |
|                                                   v                          |
|   +-------------------------------------------------------------------+      |
|   |                        MICROSERVICES MESH                         |      |
|   |                                                                   |      |
|   |  +-----------+ +-----------+ +------------+ +-----------------+   |      |
|   |  | lms-api   | |lms-manager| |lms-rooms   | |lms-proctoring   |   |      |
|   |  | (LMS Core)| |(Courses)  | |(Booking)   | |(Exam/Cheating)  |   |      |
|   |  +-----------+ +-----------+ +------------+ +-----------------+   |      |
|   |                                                                   |      |
|   |  +-----------+ +-----------+ +------------+ +-----------------+   |      |
|   |  |kms-api    | |lms-ai     | |lms-ml      | |lms-reportgen    |   |      |
|   |  |(Knowledge)| |(RAG/Lang  | |(ML Models) | |(Auto Reports)   |   |      |
|   |  | Base API) | | Chain)    | |            | |                 |   |      |
|   |  +-----------+ +-----------+ +------------+ +-----------------+   |      |
|   |                                                                   |      |
|   |  +-----------+ +-----------+ +------------+ +-----------------+   |      |
|   |  |sertifikasi| |lms-jfkn   | |lms-report  | |lms-dash         |   |      |
|   |  | -api      | |(Competency| |(Reporting) | |(Dashboard)      |   |      |
|   |  +-----------+ +-----------+ +------------+ +-----------------+   |      |
|   |                                                                   |      |
|   |  +-----------+ +-----------+ +------------+ +-----------------+   |      |
|   |  |lms-mobile | |lms-cop    | |user-api    | |lms-exoffice     |   |      |
|   |  |(Flutter)  | |(Community)| |(Users)     | |(External)       |   |      |
|   |  +-----------+ +-----------+ +------------+ +-----------------+   |      |
|   +-------------------------------------------------------------------+      |
|                                    |                                         |
|               +--------------------+--------------------+                    |
|               v                    v                    v                    |
|   +-----------------+ +---------------------+ +-----------------+            |
|   | PostgreSQL      | | Elasticsearch       | | RabbitMQ        |            |
|   | (Multi-DB)      | | (Search + Vector)   | | (Event Bus)     |            |
|   +-----------------+ +---------------------+ +-----------------+            |
|                                                                              |
|   +------------------------------------------------------------------+       |
|   | Harbor Registry (Air-Gapped) | Redis Cache | Docker Swarm/K8s    |       |
|   +------------------------------------------------------------------+       |
+------------------------------------------------------------------------------+
      
5. Results & Impact

Measurable Outcomes

LMS kini menjadi platform pembelajaran terpadu nasional — menangani pelatihan, ujian, sertifikasi, dan knowledge management dalam satu ekosistem terintegrasi. AI-powered search dan automated reporting secara signifikan meningkatkan efisiensi operasional.

20+ microservices terintegrasi dalam satu ekosistem — dari LMS core, AI knowledge management, proctoring, hingga automated report generation.

RAG-powered semantic search memungkinkan pengguna menemukan materi pembelajaran relevan dalam hitungan detik — lompatan besar dari keyword search sederhana.

Automated report generation (lms-reportgen) memotong waktu pembuatan laporan dari hari ke menit — mempercepat siklus evaluasi kompetensi pegawai.

Arsitektur microservices memungkinkan scaling independen — service ujian bisa diskalakan saat peak season tanpa mempengaruhi service lainnya.

6. Visual Evidence & Sanitized Code

System Artifacts & Proof of Concept

LMS Microservices Ecosystem Topology

Sanitized Artifact

Diagram arsitektur 20+ microservices LMS, menunjukkan relasi antara LMS core, AI services, knowledge management, dan supporting services.

Redacted Admin Dashboard — Learning Analytics

Sanitized Artifact

Dashboard admin LMS menampilkan statistik pembelajaran, progres peserta, utilisasi ruangan, dan metrik kelulusan — menjembatani gap antara operasional training dan pengambilan keputusan.

[REDACTED INSTANCE DASHBOARD]STATUS: AIR-GAPPED ONLINE
Active Threads
2,048 rq/s
P99 Latency
18.4 ms
SPBE Audit Log
100% Immutable

Sanitized Code: RAG Pipeline for Knowledge Search

Sanitized Artifact

Potongan kode sanitized dari RAG pipeline service (lms-ai) — embedding dokumen → indexing Elasticsearch → retrieval → LLM generation.

# Sanitized: RAG Pipeline for KMS Knowledge Search
# lms-ai / kms-api integration

from langchain.embeddings import HuggingFaceEmbeddings
from langchain.vectorstores import ElasticsearchStore
from langchain.llms import Ollama  # on-premise LLM
from langchain.chains import RetrievalQA

class KMSRAGPipeline:
    def __init__(self, es_url: str, index_name: str):
        self.embeddings = HuggingFaceEmbeddings(
            model_name="intfloat/multilingual-e5-large"
        )
        self.vector_store = ElasticsearchStore(
            es_url=es_url,
            index_name=index_name,
            embedding=self.embeddings,
        )
        self.llm = Ollama(
            model="mistral:7b",
            base_url=env("OLLAMA_BASE_URL"),
        )

    def index_document(
        self,
        doc_id: str,
        content: str,
        metadata: dict,
    ) -> None:
        self.vector_store.add_texts(
            texts=[content],
            metadatas=[{**metadata, "doc_id": doc_id}],
        )

    def semantic_search(
        self,
        query: str,
        top_k: int = 5,
        score_threshold: float = 0.6,
    ) -> list[dict]:
        results = self.vector_store.similarity_search_with_score(
            query,
            k=top_k,
        )

        return [
            {
                "content": doc.page_content,
                "metadata": doc.metadata,
                "score": score,
            }
            for doc, score in results
            if score >= score_threshold
        ]

    def answer_with_context(
        self,
        question: str,
        top_k: int = 3,
    ) -> dict:
        qa_chain = RetrievalQA.from_chain_type(
            llm=self.llm,
            chain_type="stuff",
            retriever=self.vector_store.as_retriever(
                search_kwargs={"k": top_k}
            ),
            return_source_documents=True,
        )

        result = qa_chain({"query": question})

        return {
            "answer": result["result"],
            "sources": [
                {
                    "content": doc.page_content[:300],
                    "metadata": doc.metadata,
                }
                for doc in result["source_documents"]
            ],
        }