Skip to content
AFM Studio
  • Pages

    AFM Studio
  • Work
  • Lab
  • About
  • CV
  • Contact
  • Projects

    AksaraA searchable library for Otorita IKN's knowledge, where the server checks every reader's access across three levels
  • Daily TaqwaTamper-resistant prayer attendance system for ~2,000 OIKN government employees at Masjid Negara IKN
  • Lantara v2A permit engine for Otorita IKN where administrators add new permit types from a screen, without a developer
  • eKiosk IKNTwo control rooms for Nusantara: kiosk content management and live bus tracking with arrival times that grade themselves
  • E-Monev IKNA monitoring platform for Nusantara's 23-year build, tracking every unit's quarterly progress against 24 national KPIs
  • JDIH OIKNOIKN's public legal document portal, with a controlled publishing workflow and AI summaries that never leave the server
  • Jejak PenanamanA check-in app for IKN tree-planting events that proves each participant was on site with a geofenced selfie
  • Dashboard SAKTIA nightly pipeline and dashboard that replaces OIKN's manual budget downloads for all six of its budget units
  • DoseRxA bedside dose calculator for 127 drugs that rounds each dose to tablets and syrups Indonesian pharmacies sell
  • CubiqA speedcubing trainer with competition-grade timing and a solver I wrote for each of the 8 major puzzles
  • ScimotionAn interactive science library of 86 articles, each explained next to animations the reader can control
  • WA Daily Scrum BotA WhatsApp bot that chases missing standup reports for a 14-person team and flags tasks stuck for days

↑ ↓ to move · Enter to open · Esc to close

Lantara v2

A permit engine for Otorita IKN where administrators add new permit types from a screen, without a developer

Screenshots
regulated permit sectors
31
KBLI business codes modelled
~2,200
form field types, no frontend code per permit
12
modules: online permits and walk-in queue
2
On this page

The problem

Otorita IKN issues permits across 31 regulated sectors, from health and education to the environment. In most government systems, every permit type is hardcoded: its workflow, its form and its document list are written by a developer. When a regulation changes, someone has to change the code and ship a new release. In a city that is still being built, regulations change all the time.

Three groups use the system. Citizens and businesses apply, government staff review, and agency administrators set the rules. Those rules come from laws and ministerial decrees, not from engineers. So the core requirement was simple to state: an administrator with no technical background must be able to create a permit type, with its workflow, form and document checklist, from a screen.

What I built

Every permit type is data

I modelled permits as configuration: sectors, permit types, workflow stages, form fields and document requirements. Adding a permit type is data entry. An administrator can set up a six-stage health permit with twelve required documents and a custom form, and nobody touches the code.

When someone applies, the system stores a copy of the form as it was at that moment. If an administrator edits the form later, applications already under review keep the questions they were asked. Reviews stay fair and audits stay exact.

Permissions follow the workflow

Staff permissions are generated from the workflow itself, one per stage and permit type. The code never checks for a fixed role like "verifier". When an administrator adds a permit type, the reviewer slots for it exist straight away.

Deadlines staff can see

Each stage has a deadline in hours, and each permit type has a total in working days. A background job recalculates them against the government holiday calendar and sends alerts when a file is at risk. In the reviewer queue, cards turn from amber to red as the deadline gets close. Keyboard shortcuts let staff approve, return or reject a file without the mouse.

Reviews that hold up in a busy office

A reviewer can claim a file so two people never work on it at once. Idle claims release on their own, and every decision records who made it. Revision requests are per field, so the applicant sees exactly what to fix next to what they wrote before. Some permits need sign-off from two technical departments. I scoped reviewers per stage, so one person can't approve both halves of the same review.

A walk-in queue for the public service mall

Once the permit engine worked, a gap was obvious. It handled online applications that take days, but not a citizen who walks into the Public Service Mall and takes a ticket. I scoped and built MPP Antrean, a separate queue module with its own data and permissions. It covers kiosk tickets, QR check-in, counter triage, and calling, recalling and serving, all updated live. A citizen who booked online but arrives late joins the walk-in line by arrival time instead of losing the ticket.

Result

All four planned build phases shipped in about three weeks, followed by a security pass, an accessibility pass and the queue module. The system models about 2,200 KBLI business codes and starts from one command with demo data loaded. Anyone can scan the QR code on an issued permit to confirm it is authentic, without logging in. A public staging site is live, and production will run on Otorita IKN's own servers.

Under the hoodTechnical detail for engineers
  • Five core models hold every permit's configuration: Sektor, PermitType, WorkflowStage, FormField and DocumentRequirement.
  • Form answers are a JSON field validated at runtime against the live schema. The schema version is snapshot-copied onto each submission.
  • Permissions are generated strings such as verifikasi_teknis:izin_posyandu. A DRF permission class checks them against the submission's current stage. There is no role enum.
  • SLA: sla_hours per stage, sla_days per permit type, swept by a Celery Beat task on a working-days calendar. Queue shortcuts are j/k to move and a/r/d to approve, revise or reject.
  • <DynamicForm> fetches FormField[] and builds a zod schema at runtime for twelve field types, including NIK, NPWP, phone, geolocation and file upload.
  • Public pages use an immersive royal-blue theme; the signed-in workspaces are calm and dense for staff who process fifty files a day.
  • MPP Antrean is its own Django app with no foreign keys into the permit domain. Live state goes over the existing Django Channels WebSocket layer. The online and walk-in quota split is enforced at reservation time.
  • docker compose up runs migrations, loads ~2,200 KBLI records, seeds 46 sample permits across three sectors plus demo queue counters, and creates a superadmin.
  • 13 Django apps, 43 models, about 30,000 lines of Python and TypeScript, 241 commits in roughly three weeks.

Screenshots

Beranda
Beranda(2)
Katalog Izin
Katalog Detail
Validasi Dokumen
Portal Pemohon

Hiring, or building something similar?

I'm open to full-time roles and select freelance work.