Langsung ke konten
AFM Studio
  • Halaman

    AFM Studio
  • Karya
  • Lab
  • Tentang
  • CV
  • Kontak
  • Proyek

    AksaraPerpustakaan pengetahuan Otorita IKN yang bisa dicari, dengan server memeriksa akses setiap pembaca di tiga tingkat
  • Daily TaqwaSistem presensi salat anti-manipulasi untuk ~2.000 pegawai OIKN di Masjid Negara IKN
  • Lantara v2Mesin perizinan Otorita IKN tempat administrator menambah jenis izin baru dari layar, tanpa developer
  • eKiosk IKNDua ruang kendali untuk Nusantara: konten kios dan pelacakan bus live dengan estimasi kedatangan yang menilai dirinya sendiri
  • E-Monev IKNPlatform pemantauan pembangunan Nusantara selama 23 tahun, melacak progres triwulan setiap unit terhadap 24 KPI
  • JDIH OIKNPortal dokumen hukum publik OIKN, dengan alur penerbitan terkendali dan ringkasan AI yang tidak pernah keluar dari server
  • Jejak PenanamanAplikasi absen acara penanaman pohon IKN yang membuktikan peserta hadir di lokasi lewat selfie ber-geofence
  • Dashboard SAKTIPipeline malam dan dashboard yang menggantikan unduhan anggaran manual di keenam satker OIKN
  • DoseRxKalkulator dosis untuk 127 obat yang membulatkan dosis ke tablet dan sirup yang dijual apotek Indonesia
  • CubiqPelatih speedcubing dengan timer setara kompetisi dan solver buatan sendiri untuk 8 puzzle utama
  • ScimotionPerpustakaan sains interaktif berisi 86 artikel, masing-masing dijelaskan bersama animasi yang bisa dikendalikan pembaca
  • WA Daily Scrum BotBot WhatsApp yang menagih laporan standup tim 14 orang dan menandai tugas yang macet berhari-hari

↑ ↓ untuk berpindah · Enter untuk membuka · Esc untuk menutup

Montara

Pemantauan konstruksi IKN tempat setiap perubahan proyek disetujui pejabat yang berwenang dan tercatat

Tangkapan layar
dashboard per peran dengan ekspor CSV dan PDF
8
peran dengan hak masing-masing
5
jenis perubahan yang perlu disetujui
4
Di halaman ini

Masalahnya

Nusantara, ibu kota baru Indonesia, sedang dibangun oleh banyak kontraktor sekaligus. Orang-orang yang memantau pekerjaan itu butuh hal yang berbeda, dan diberi kepercayaan yang berbeda pula. Kontraktor melaporkan progres fisik dan keuangan di proyek mereka sendiri. Pejabat Pembuat Komitmen (PPK) menyetujui atau menolak laporan itu, tapi hanya untuk proyek dalam lingkupnya. PPK butuh jejak audit, karena ini komitmen pemerintah. Tim kepatuhan dan pimpinan butuh dashboard yang bisa dipercaya tanpa harus membaca data mentah setiap proyek.

Sebelum ada Montara, semua ini berjalan lewat spreadsheet dan email. Tidak ada yang mengatur siapa boleh mengubah apa, dan tidak ada catatan siapa yang menyetujuinya.

Yang saya bangun

Frontend saya bangun duluan dan jadi acuan utama

Saya membangun prototipe lengkap di browser sebelum ada server sama sekali. Setiap peran, aturan hak akses, dan alur kerja berjalan dari awal sampai akhir, dengan data tersimpan di browser. Prototipe itu lalu melewati review kode formal, dan saya menyelesaikan temuan-temuannya. Baru setelah itu saya membangun backend, sebagai salinan di sisi server dari aturan yang sudah terbukti jalan. Spesifikasi lama hanya punya empat peran dan tidak memasukkan kontraktor. Prototipenya punya lima, dan kontraktor ikut jadi pengguna. Untuk setiap perbedaan, saya tuliskan aturannya: prototipe yang dipakai.

Setiap perubahan adalah permintaan yang harus disetujui

Proyek tidak punya satu status yang tinggal diganti dari draf ke disetujui. Setiap perubahan diajukan sebagai permintaan persetujuan tersendiri, entah itu membuat proyek, mengubahnya, melaporkan progres, atau menghapusnya. Status proyek diambil dari permintaan terakhirnya. Hasilnya, ada catatan lengkap siapa yang mengusulkan setiap perubahan dan siapa yang memutuskannya. PPK dan super-admin bisa mengubah langsung, dan perubahan itu dicatat terpisah supaya tetap terlihat.

Persetujuan yang sudah basi ditolak

Setiap proyek menyimpan nomor revisi. Saat permintaan diajukan, nomor itu ikut dicatat. Saat persetujuan, server mengeceknya lagi. Kalau proyek sudah berubah di antaranya, persetujuan ditolak dan data yang lebih baru tetap aman. Semua ini berjalan tanpa mengunci tabel.

Hapus proyek masih bisa dibatalkan sampai langkah terakhir

Mengarsipkan proyek akan menutup semua isu terbukanya dan mengingat status isu itu sebelumnya, jadi pemulihan bisa mengembalikannya. Hapus permanen lebih dulu menampilkan berapa banyak data dari tiap jenis yang akan ikut terhapus. Untuk arsip pemerintah, orang yang menghapus perlu melihat itu sebelum datanya hilang.

Backend memperbaiki prototipe di dua bagian

Di prototipe, notifikasi dihitung ulang setiap kali layar digambar. Di server, saya menyimpan setiap notifikasi saat kejadian pemicunya terjadi. Proses latar mengecek proyek yang terlambat dan menyiapkan ringkasan terjadwal. Spesifikasi juga membiarkan penampil model bangunan 3D sebagai pertanyaan terbuka. Saya menjawabnya dengan menghubungkan penampil itu ke Autodesk Platform Services. Penampil simulasi, yang diberi label jelas, tetap ada untuk proyek tanpa model.

Hasilnya

Montara adalah sistem privat yang sudah melewati tahap integrasi dan belum diluncurkan ke produksi. Ada delapan dashboard yang dibatasi per peran: ringkasan, peta, anggaran, progres, risiko, kepatuhan, portofolio, dan kinerja kontraktor, lengkap dengan ekspor CSV dan PDF. Lima peran ditegakkan di browser dan sekali lagi di server. Alur persetujuan mengikuti permintaan yang ditolak sampai diajukan ulang. Tes otomatis di frontend memeriksa, antara lain, bahwa satu peran tidak bisa melihat data peran lain. Saya membangun prototipenya selama sekitar enam minggu sejak akhir Mei 2026, lalu backend-nya pada 5 Juli. Kini frontend terhubung ke server lewat sebuah sakelar, jadi masih bisa kembali ke mode prototipe selama masa peralihan.

Di balik layarDetail teknis untuk engineer
  • Frontend: Next.js App Router, React 18, TypeScript, shadcn/Radix UI, Tailwind CSS v4, react-hook-form, Leaflet, dan Recharts. Prototipenya berjalan sepenuhnya di localStorage.
  • types.ts dan businessRules.ts dari prototipe menjadi kontrak untuk model Django dan kelas permission DRF, jadi kedua sisi tidak bisa berjalan sendiri-sendiri.
  • Peran: contractor, ppk, mki, executive, dan super_admin. Hak persetujuan PPK dibatasi ke lingkup per proyek yang eksplisit. Pengecekan di klien hanya untuk tampilan; batas keamanannya ada di server.
  • Jenis ApprovalRequest: CREATE, UPDATE, PROGRESS_UPDATE, dan DELETE. Project.approvalStatus diturunkan dari permintaan terakhir. Penolakan wajib disertai komentar.
  • Konkurensi optimistis memakai integer revision di Project, dicatat saat permintaan diajukan dan divalidasi ulang saat persetujuan.
  • Progres dipantau terhadap kurva S rencana, dengan jendela pelaporan, pengecekan agar progres tidak mundur, deteksi pengajuan ganda, dan frekuensi pelaporan yang bisa diatur di singleton SystemSettings.
  • Isu punya transisi status dan prioritas, tindak lanjut, lampiran berkas, dan eskalasi dari tim kepatuhan ke pimpinan.
  • Setiap penghapusan menulis catatan ProjectDeletionLog.
  • Notifikasi berupa baris yang ditulis dalam transaksi yang sama dengan kejadian pemicunya. Celery dan Redis menjalankan deteksi keterlambatan dan agregasi terjadwal.
  • Review frontend mencatat perbaikan seperti pemecahan komponen, memoization, logika otorisasi yang dipusatkan, autosave dengan debounce, dan sinkronisasi antartab.
  • Backend: Django 5.1, DRF dengan API camelCase, django-filter, drf-spectacular untuk dokumentasi OpenAPI, dan PostgreSQL. 11 domain app dan 37 model.
  • 18 halaman. Sedikitnya 111 tes otomatis frontend di sekitar 10 berkas tes, dengan Vitest dan Testing Library.
  • Frontend: 53 commit dari 25 Mei sampai 5 Juli 2026, sekitar 27.300 baris TypeScript. Backend: 20 commit pada 5 Juli 2026, sekitar 4.150 baris Python.

Sedang merekrut, atau membangun hal serupa?

Saya terbuka untuk posisi full-time dan proyek freelance tertentu.