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

Aksara

Perpustakaan pengetahuan Otorita IKN yang bisa dicari, dengan server memeriksa akses setiap pembaca di tiga tingkat

Tangkapan layar
unit organisasi tempat dokumen dikelompokkan
43
domain pengetahuan yang menyusun seluruh arsip
10
subkategori topik di bawah sepuluh domain itu
92
tingkat akses diperiksa di server
3
Di halaman ini

Masalahnya

Otorita IKN menghasilkan banyak pengetahuan institusional di sepuluh unit Eselon-1: regulasi, laporan teknis, kajian akademik, dan catatan lapangan. Sistem lama menyimpan semuanya, tapi sulit dipakai. Tidak ada pencarian, jadi staf meminta file ke rekan lewat chat. Mengunggah berarti mengisi formulir dua langkah yang panjang tanpa fitur draf, sehingga sebagian besar pengetahuan tidak pernah diunggah, dan pimpinan tidak bisa melihat apa saja yang ada atau unit mana yang aktif berkontribusi.

Ada tiga kelompok pengguna Aksara: publik, yang menjelajahi pengetahuan terbit tanpa login; staf, yang mengunggah dan membaca materi internal; serta verifikator, kurator, dan administrator, yang menyetujui dan menata semuanya. Sebagian besar materi tidak bersifat publik, dan sebagian lagi hanya boleh dilihat direktorat pemiliknya.

Yang saya bangun

Setiap dokumen punya kode publik yang permanen

Setiap dokumen punya ID internal sejak masih draf. Saat pertama kali terbit, dokumen itu juga mendapat kode publik, dan kode itulah alamat publiknya. Saya memilih cara ini karena tautan publik harus permanen dan bisa dikutip, dan tautan yang dibentuk dari judul akan rusak begitu ada yang membetulkan salah ketik. Kode tidak pernah dipakai ulang, dan dokumen yang ditarik lalu diterbitkan lagi mendapat kode lamanya kembali.

Satu fungsi yang menentukan siapa boleh membuka dokumen tertutup

Ada tiga tingkat akses: publik, internal OIKN, dan terbatas, diperiksa di server untuk setiap permintaan berdasarkan unit kerja, eselon, peran, dan akses sementara yang pernah diberikan. Satu fungsi tunggal menentukan siapa yang boleh membuka dokumen terbatas tanpa mengajukan akses, dipanggil dari setiap tempat dokumen disajikan, supaya aturannya tidak melenceng antara daftar, pencarian, dan unduhan file. Awalnya saya memberikan wewenang itu ke peran admin yang lebih luas, lalu saya persempit ke satu peran superadmin saja setelah menyadari betapa sensitifnya hal ini.

Pemeriksaan mengikuti tahap tetap dengan riwayat lengkap

Dokumen bergerak dari draf ke verifikasi, lalu kurasi, lalu terbit, atau dikembalikan, atau ditolak. Hanya sistem yang boleh mengubah status itu, tidak lewat edit manual. Verifikator dan kurator bekerja di antrean layar terbelah dengan tiga pilihan: setujui, kembalikan dengan catatan wajib, atau tolak. Setiap langkah tercatat di linimasa yang tidak bisa diubah siapa pun, dan dokumen yang sudah terbit dan direvisi tetap tampil sampai revisinya lolos pemeriksaan lagi.

Pencarian yang memaafkan salah ketik dan menyimpan tautannya

Saya memakai pencarian teks penuh di database, lengkap dengan toleransi salah ketik dan saran "mungkin maksud Anda", di balik satu antarmuka sehingga nanti bisa diganti mesin pencari yang lebih besar tanpa mengubah halamannya. Semua filter, urutan, dan nomor halaman tersimpan di alamat halaman, jadi hasil yang sudah difilter bisa di-bookmark, dibagikan, atau dimuat ulang.

Dokumen hukum nasional difederasikan, tidak disalin

Dokumen hukum nasional ada di sistem lain milik OIKN, namanya JDIH, jadi Aksara tidak pernah menyalin dokumennya. Saya hanya menyimpan metadata ringan, menyegarkannya lewat task harian, dan mengambil isi aslinya dari API JDIH saat seseorang membuka dokumennya, dengan cache singkat di server. Menyalin data JDIH justru akan membuat duplikat regulasi yang lama-lama tidak sinkron. Integrasi ini akhirnya jauh lebih besar dari rencana awal: kini ada pengklasifikasi otomatis dan pencarian teks penuhnya sendiri, di atas sinkronisasi metadata yang diminta spesifikasi awal.

Hasilnya

Saya membangun Aksara sendirian, mulai Juli 2026, dan sekarang sudah live di aksara.ikn.go.id. Portal publiknya terbuka untuk siapa saja, dan setiap dokumen diperiksa di server terhadap tiga tingkat akses. Dokumen dikelompokkan menurut 43 unit organisasi, 10 domain pengetahuan, dan 92 subkategori topik yang lebih rinci. Di luar rencana awal, integrasi JDIH berkembang dengan pengklasifikasi otomatis dan indeks pencariannya sendiri, dan saya menambahkan gazetteer serta modul pencapaian. Sebuah aplikasi mobile kini memakai backend yang sama.

Di balik layarDetail teknis untuk engineer
  • Kode publik berbentuk AKS-2026-0042-K7mP dan muncul di URL seperti /pengetahuan/AKS-2026-0042-K7mP. Bagian nomor urutnya dialokasikan dengan row lock agar dua publikasi bersamaan tidak bertabrakan.
  • Tingkat akses Publik / Internal OIKN / Terbatas diselesaikan di queryset. Enum database tetap memakai nilai asli PRD (Publik / Terbatas / Tertutup); hanya label UI yang berubah lewat satu peta di lapisan presentasi, karena "Terbatas" dan "Tertutup" nyaris bersinonim.
  • Lampiran dipindahkan dari path /media/ mentah ke endpoint unduhan yang memeriksa akses. Task Celery mencabut izin akses yang kedaluwarsa dan mengirim notifikasi.
  • Status alur: Draft → Menunggu Verifikasi → Menunggu Kurasi → Terpublikasi, ditambah Dikembalikan dan Ditolak, hanya diubah lewat transition service. Linimasa per dokumen bernama "Riwayat Alur", didukung audit log global yang mencatat setiap create, update, delete, persetujuan, penolakan, login, dan logout.
  • Pencarian memakai full-text search Postgres (indeks GIN, ranking, highlight) di balik abstraksi SearchBackend agar Elasticsearch bisa dipasang kelak. Fallback trigram pg_trgm menghasilkan saran "mungkin maksud Anda" dari kueri yang pernah berhasil.
  • Daftar dan hitungan facet digabung menjadi satu request (with_facets=1). Pergantian filter memakai keepPreviousData agar panel filter tidak bergeser.
  • Integrasi JDIH tumbuh jadi sekitar 22 file kode dan 6.200 baris, termasuk task sinkronisasi harian, live API client, pengklasifikasi otomatis, dan indeks pencarian sendiri, di atas tabel metadata jdih_index yang diminta spesifikasi awal.
  • Sub-sistem place/gazetteer untuk penjelajahan geografis, dan modul pencapaian untuk kontributor, sama-sama ditambahkan setelah rencana pembangunan 12-milestone awal.
  • Diagram relasi entitas dibuat saat diminta, langsung dari model Django, sehingga menghasilkan halaman dokumentasi sekaligus halaman "Skema Basis Data" di backoffice dan tidak pernah basi.
  • Portal: Kontributor, Verifikator, Kurator, dan Administrator, dengan active_role disimpan di server.
  • Keycloak SSO dan JDIH awalnya dibangun terhadap antarmuka tiruan, lalu diganti implementasi sungguhan. Endpoint token-exchange melayani aplikasi mobile.
  • Kontribusi berupa wizard empat langkah dengan draf, hingga 10 lampiran, dan impor massal CSV hingga 200 baris; baris yang tidak valid masuk sebagai draf bertanda.
  • Backend Django + DRF khusus API dan SPA React, feature-sliced, dengan TanStack Query dan 52 route file terbagi antara portal publik dan backoffice. Frontend tanpa library komponen, formulir, atau state. Tidak ada ML di V1.
  • 16 aplikasi Django, 45 model konkret, 14 viewset DRF terdaftar, 206 baris masterdata yang di-seed, 53.323 baris Python dan 30.022 baris TypeScript, 1.595 fungsi tes backend di 65 file, 429 commit antara 6 Juli dan 25 September 2026.

Tangkapan layar

Beranda
Sorotan Pengetahuan
Jelajahi Pengetahuan
Jelajahi Pengetahuan by Unit
Detail Pengetahuan
Koleksi

Sedang merekrut, atau membangun hal serupa?

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