Edutara
Platform pembelajaran OIKN dan institusi mitra yang dibangun ulang, dengan kuis bersegmen dan sertifikat terverifikasi QR
- pengguna di platform yang digantikan
- 266+
- tipe materi dalam satu course player
- 9
- panel untuk peserta, institusi, dan admin
- 3
- dari awal pengerjaan sampai siap deploy
- 7 hari
Di halaman ini
Masalahnya
Otorita IKN sudah punya platform pelatihan untuk pegawainya dan institusi mitra, di antaranya Monash University, UGM, dan Learning Center Kementerian Keuangan. Penggunanya lebih dari 266 orang, dan platform ini dipakai untuk pelatihan wajib. Masalahnya, platform itu rapuh. Tidak ada tes otomatis, konvensinya tidak konsisten, dan lisensi aset tampilannya tidak terdokumentasi, yang merupakan risiko hukum bagi platform pemerintah. Setiap perubahan bisa merusak sesuatu yang diandalkan orang, dan hanya sedikit developer yang bisa mengubahnya dengan aman.
Permintaannya adalah membangun ulang secara penuh dengan semua fitur lama tetap ada. Penggunanya beragam: ASN, pegawai swasta, dan mahasiswa dengan tingkat kenyamanan teknologi yang sangat berbeda. Admin institusi menjalankan program mereka sendiri di sana, dan pimpinan OIKN butuh laporan jam pelatihan untuk BKN.
Yang saya bangun
Server memeriksa setiap hak akses
Saya memisahkan sistemnya menjadi API backend dan frontend web yang hanya berbicara lewat API itu. Tidak ada aturan bisnis di browser. Setiap endpoint memeriksa hak aksesnya sendiri, jadi peserta yang mengutak-atik halaman tetap tidak bisa menjalankan aksi admin. API yang sama nantinya bisa melayani aplikasi mobile atau sistem mitra tanpa ditulis ulang.
Semua institusi berbagi satu database, dipisah per baris
Setiap data punya ID publik acak di tautannya, jadi tidak ada yang bisa menelusuri data orang lain dengan menebak nomor urut. Semua institusi berbagi satu database. Setiap baris milik satu institusi, dan setiap request dibatasi ke institusi yang sedang diwakili pengguna. Saya memilih cara ini karena lebih murah dijalankan dan lebih mudah dipahami daripada satu database per institusi, dan data setiap institusi tetap terpisah.
Percobaan kuis menyimpan soal saat dimulai
Saat peserta memulai kuis, sistem menyalin soal-soalnya ke percobaan itu. Kalau admin mengubah bank soal kemudian, nilai yang sudah keluar tidak ikut berubah. Kuis dibagi menjadi beberapa segmen, dan setiap segmen punya batas lulusnya sendiri. Peserta harus lulus di semua segmen, jadi segmen yang kuat tidak bisa menutupi segmen yang lemah.
Penilaian tidak pernah menghambat peserta
Tugas yang sudah dikumpulkan langsung dihitung selesai untuk progres kelas. Pengajar menilainya belakangan, dan bisa menahan nilai sampai institusi siap merilisnya. Tugas yang terlambat ditandai, tapi tetap diterima. Ini sesuai dengan cara persetujuan yang sudah berjalan di OIKN. Sertifikat dibuat di latar begitu peserta mencapai 100%. Setiap sertifikat punya kode QR yang membuka halaman publik untuk memeriksa keasliannya tanpa login.
Laporan yang disiapkan untuk sumber data yang belum ada
Pimpinan butuh jam pelatihan per pegawai, bisa difilter per institusi, kedeputian, direktorat, dan jabatan. Saat ini Edutara satu-satunya sumber datanya. OIKN berencana menarik data dari platform mitra kelak, jadi saya membangun laporan ini dengan struktur yang menandai sumber setiap catatan. Menambah mitra nanti cukup dengan menambah konektor.
Hasilnya
Edutara adalah build yang teruji, dengan pemeriksaan otomatis di setiap perubahan: unit test di backend dan frontend, ambang coverage, dan rangkaian tes end-to-end yang menyalakan seluruh sistem dengan data contoh. Setup produksinya siap untuk server OIKN sendiri. Peralihan dari platform lama belum terjadi. Saya membangunnya antara akhir Juni dan awal Juli 2026, sebagian besar dalam dua hari pertama. Selama pengerjaan, saya merancang ulang perannya: satu peran Teacher menggantikan dua peran, ada tingkat operator platform di bawah Superadmin, dan pengguna bisa mengajukan diri untuk bergabung ke institusi. Saya juga menambahkan testimoni peserta, yang tidak diminta di spesifikasi.
Di balik layarDetail teknis untuk engineer
- Backend Django REST Framework dan frontend Next.js App Router lewat typed API client. Setiap endpoint punya permission class DRF sendiri.
- Setiap model memakai UUID di URL dan respons; primary key integer tidak pernah keluar dari server.
- Multi-tenancy di tingkat baris: foreign key
institution_idditambah middleware yang membatasi kueri ke institusi aktif pengguna. - Mesin kuis adalah state machine percobaan dengan 10 model. Soal di-snapshot per percobaan; penilaian per segmen dengan ambang masing-masing. Tipe soal pilihan ganda dan pilihan ganda multi-poin, dengan batas waktu dan tinjauan pembahasan.
- Sembilan tipe materi tampil di satu course player dua panel: PDF, video, embed video, teks, gambar, tautan eksternal, unduhan file, kuis, dan tugas.
- Sertifikat dirender dengan WeasyPrint dan
qrcodedi job Celery. File disajikan lewat pre-signed URL berbatas waktu dari storage kompatibel S3. - Laporan jam pelatihan (FR-28) berbasis NIP pegawai dengan field
sourcedan abstraksi konektor, mode kumulatif dan rentang tanggal, serta ekspor Excel. - SSO Keycloak OIDC diadaptasi dari panduan React, Vite, dan localStorage ke App Router dengan sesi cookie httpOnly.
- CI menjalankan lint, typecheck, pytest, Vitest dengan Testing Library, ambang coverage, dan tes end-to-end Playwright di atas stack Docker lengkap. Image rilis di-build ke GHCR untuk deploy pull-and-run di VM.
- 12 Django app, 43 model, 23 ViewSet, sekitar 8.600 baris Python dan 10.900 baris TypeScript, 25 file tes backend dan 32 frontend, 124 commit antara 29 Juni dan 5 Juli 2026, 109 di antaranya dalam dua hari pertama.
Sedang merekrut, atau membangun hal serupa?
Saya terbuka untuk posisi full-time dan proyek freelance tertentu.