DMS Platform
Situs publik, CMS, dan platform pembelajaran untuk bisnis pelatihan.
- Tahun
- 2026
- Peran
- Desain dan pembangunan
- Jenis
- Platform · Situs publik, CMS, LMS
- Stack
- Next.js 16 · .NET 10 · PostgreSQL 17 · MinIO · TipTap

Masalah
Sebuah bisnis pelatihan menjalankan situs publik, katalog kursus, dan data peserta di tempat terpisah. Platform ini menyatukannya: satu situs publik, satu CMS untuk editor, dan dashboard pembelajaran untuk peserta.
Batasan
- Tiga peran dengan visibilitas berbeda: editor, reviewer, dan administrator.
- Rich text disimpan sebagai TipTap JSON dan disanitasi saat disimpan maupun saat dirender.
- Konten Indonesia dan Inggris dari record yang sama.
- Pembayaran di luar cakupan rilis pertama; model data harus menyisakan ruang untuk itu.
Sistem
- API
- .NET 10 modular monolith dengan modul Identity, Content, Catalog, dan Learning. ASP.NET Identity dengan JWT berumur pendek dan refresh token berotasi; FluentValidation pada setiap input.
- Konten
- PostgreSQL 17 untuk konten terstruktur, MinIO untuk media dengan presigned URL. Section landing, banner, artikel, dan record kursus berbagi satu audit trail.
- Klien
- Next.js 16 untuk situs publik, CMS admin, dan dashboard peserta. Primitif shadcn/ui dengan struktur komponen atomik; security header diatur di konfigurasi Next.
Keputusan
1.
Modular monolith, bukan microservice
Satu deployable dengan batas modul yang eksplisit. Content dan Learning bisa diekstrak nanti tanpa mengubah kontrak API.
Tradeoff Disiplin modul ditegakkan lewat review, bukan lewat jaringan.
2.
Sanitasi dua kali
TipTap JSON disanitasi saat disimpan dan lagi saat dirender. Konten tersimpan tidak pernah dipercaya.
Tradeoff Render lebih mahal; record yang tercemar tidak bisa mencapai pembaca.
3.
Admin hanya desktop
CMS mengasumsikan ruang kerja 1440px dan meruntuhkan rail menjadi ikon. Situs publik dan dashboard peserta responsif.
Tradeoff Editor tidak bisa menerbitkan dari ponsel; permukaan editing tetap terbaca.
4.
Hanya DTO
Tidak ada entity yang melewati batas HTTP. Overposting mustahil secara konstruksi.
Tradeoff Lebih banyak kode mapping per fitur.
Layar



Status
MVP dalam pengerjaan, berjalan di deployment dev. Repositori privat.
Bukti
- Deployment dev: dev-dms.byros.dev
- Repositori privat