← Back to projects
Academia Kalbe
Enterprise learning platform for Kalbe with RBAC, course CMS, payments, and OpenAI + Pinecone semantic search across training content.
Next.jsExpressPrismaPostgreSQLRBACOpenAIPinecone
Problem
Kalbe needed a learning platform that employees and external learners could actually use at scale: courses and academies, payments, role-based access across divisions, and a way to find the right training without guessing keywords in a giant catalog.
Role
Full-stack software engineer on an impact-dense engagement (Oct 2025 – Jan 2026). Owned architecture and delivery across admin surfaces, auth, data model, search, and release quality.
What I built
- Admin and learner product surfaces — courses, academies, CMS, and payments on a Next.js front end with Express APIs.
- Data layer — Prisma and Knex.js on PostgreSQL for structured content and operational workflows.
- Auth and RBAC — NextAuth with role-based access so thousands of employees across divisions only see what they should.
- Semantic search — OpenAI embeddings + Pinecone so discovery is context-based, not only exact title match.
- Quality bar — Playwright end-to-end coverage on critical flows before and after MVP.
Architecture (high level)
Learner / Admin UI (Next.js)
│
▼
API layer (Express)
│
┌────┴────┐
▼ ▼
PostgreSQL Pinecone
(Prisma) (embeddings)
Outcomes
- MVP in 2 months — ahead of a 3-month plan.
- RBAC for thousands of employees across divisions.
- Fewer production bugs after Playwright coverage on critical paths.
- Semantic search for context-based training discovery instead of brittle keyword-only lookup.
Tradeoffs
- Shipped a coherent MVP under calendar pressure rather than boiling the ocean on every LMS feature.
- Used Prisma for app models and Knex where operational queries needed more control.
- Semantic search added cost and ops surface; worth it for catalog discovery at enterprise scale.
What I’d do next
Deeper evaluation loops for retrieval quality, clearer cost dashboards for embeddings, and tighter observability on auth and payment edge cases.