On Air
Pengalaman bertema siaran dengan sistem peran dan antarmuka panel yang dirancang agar mudah dipahami pemain baru.
Mainkan di Roblox →
Awalnya saya hanya mencoba-coba membuka Roblox Studio tanpa tujuan jelas. Semakin lama saya di dalamnya, semakin saya tertarik, sampai akhirnya saya memutuskan untuk menyeriusinya, bukan lagi sekadar iseng.
Dari titik itu pengalaman datang satu per satu: mengerjakan event, membangun sistem, dan merapikan antarmuka untuk berbagai kebutuhan. Beberapa project di antaranya adalah kolaborasi dengan brand nasional seperti Kahf, OVO, Promag, dan Erafone, dan semuanya memberi respons positif terhadap hasil kerja saya.
Selain lewat AE Studio, saya juga aktif sebagai developer di Majelis Roblox Indonesia, komunitas pengajian Roblox terbesar di Indonesia. Mengembangkan sesuatu untuk komunitas sebesar itu mengajarkan hal yang tidak saya dapat dari project biasa: bagaimana membuat pengalaman yang tetap nyaman ketika dipakai banyak orang sekaligus.
Sekarang fokus saya ada di dua hal: membuat antarmuka yang terbaca dalam sekali lihat, dan menulis Luau yang masih masuk akal ketika dibaca ulang tiga bulan kemudian. Di luar Studio, dua medali Lomba Sains Nasional 2026 dari bidang yang berbeda jauh membuat cara saya memandang sebuah produk tidak berhenti di baris kode.
OOP module, event-driven system, arsitektur client-server.
Layout responsif lintas device, komponen reusable, animasi TweenService.
Progression, economy, shift system, minigame, dan quest flow.
DataStore dengan session lock, retry logic, validasi RemoteEvent.
Menerjemahkan brief brand menjadi pengalaman dalam game.
Bidang sosial-humaniora yang jauh dari layar Studio. Justru di situlah kemampuan berargumen serta membaca konteks terasah.
Logika algoritma dan problem solving yang setiap hari saya pakai untuk memecahkan bug yang tidak ada di dokumentasi.
Lima judul bersama AE Studio, dari konsep sampai rilis, termasuk kolaborasi bersama brand nasional.
Pengalaman bertema siaran dengan sistem peran dan antarmuka panel yang dirancang agar mudah dipahami pemain baru.
Mainkan di Roblox →
Roleplay rumah sakit dengan sistem shift, pembagian peran staf, dan alur penanganan pasien yang berjalan di server.
Mainkan di Roblox →
Desa Nusantara dengan permainan tradisional seperti petak umpet, gobak sodor, dan lomba lari. Kolaborasi bersama Kahf.
Mainkan di Roblox →
Permainan mengeja kata berbentuk balapan: pemain berlomba menyusun kata dengan benar sebelum waktunya habis.
Mainkan di Roblox →
Roleplay perhotelan dengan alur check-in, room service, dan panel staf. Sudah tidak beredar, ditampilkan sebagai bagian dari rekam jejak.
Tidak lagi tersediaKlik gambar untuk melihat versi penuhnya.
DataStore bawaan Roblox sebenarnya sudah cukup untuk menyimpan angka sederhana. Masalahnya muncul ketika pemain bertambah banyak: ada yang keluar-masuk server dengan cepat, ada server yang mati mendadak, dan ada yang sengaja mencari celah untuk menduplikasi item.
Menulis penanganan untuk semua kasus itu dari nol berarti mengulang pekerjaan yang sudah diselesaikan orang lain dengan lebih baik. Karena itu untuk setiap project saya memakai ProfileService, modul open source yang sudah teruji di game dengan jutaan sesi.
Bagi klien, keuntungannya satu dan paling penting: progres pemain tidak hilang. Kehilangan data adalah alasan paling cepat pemain berhenti bermain dan tidak kembali.
local ProfileService = require(ServerScriptService.ProfileService)local TEMPLATE = { Coins = 0, Level = 1, Inventory = {},}local Store = ProfileService.GetProfileStore("PlayerData", TEMPLATE)local Profiles = {}local function onAdded(player) local profile = Store:LoadProfileAsync("P_" .. player.UserId) if profile == nil then return player:Kick("Gagal memuat data") end profile:AddUserId(player.UserId) profile:Reconcile() profile:ListenToRelease(function() Profiles[player] = nil player:Kick() end) if player.Parent == Players then Profiles[player] = profile else profile:Release() endend
Satu profil hanya bisa dibuka oleh satu server. Pemain yang berpindah server cepat tidak akan menimpa datanya sendiri, dan celah duplikasi item lewat dua server sekaligus tertutup.
Batas request DataStore, percobaan ulang saat gagal, dan penyimpanan ketika server dimatikan sudah ditangani modul. Tidak ada lagi progres yang hilang karena server tiba-tiba mati.
Menambah fitur baru berarti menambah field baru ke data pemain. Reconcile mengisi field itu pada data lama tanpa menyentuh progres yang sudah ada: update tanpa reset.
Hadiah event, kompensasi, atau pembelian bisa dikirim ke pemain yang sedang offline, lalu diproses otomatis begitu mereka masuk kembali.
Keamanan bukan fitur yang ditambahkan di akhir. Ia menentukan bagaimana sistemnya disusun sejak baris pertama.
Semua nilai yang berarti, mulai dari koin, item, progres, sampai akses, dihitung dan disimpan di server. Client hanya boleh mengajukan permintaan. Selama aturan ini dipegang, mengubah data dari sisi pemain tidak akan berpengaruh apa pun.
Tidak ada RemoteEvent yang langsung dieksekusi. Tipe data, rentang nilai, kepemilikan objek, dan kelayakan aksi diperiksa lebih dulu. Ditambah pembatasan frekuensi per pemain, supaya satu orang tidak bisa membanjiri server dengan permintaan.
Identitas pemain cukup UserId. Tidak ada nama asli, alamat, kontak, atau apa pun yang tidak diperlukan permainan. Data yang tidak pernah dikumpulkan adalah data yang tidak bisa bocor.
Hak publish dan akses ke penyimpanan produksi hanya diberikan kepada yang benar-benar membutuhkannya. Pengujian selalu dilakukan di tempat terpisah, tidak pernah langsung di data pemain yang sedang berjalan.
Setiap pembaruan dicatat dan versinya disimpan. Kalau ada yang salah setelah rilis, saya bisa menunjukkan perubahan mana penyebabnya dan mengembalikan keadaan tanpa menebak-nebak.
Setiap game yang berjalan cukup lama akan menemukan bug. Yang membedakan project yang tertangani dan yang berantakan bukan jumlah bug-nya, tapi seberapa cepat ia ditemukan dan seberapa besar kerusakan yang sempat terjadi. Karena itu saya memisahkan bug kosmetik dari bug yang menyentuh data dan ekonomi. Yang pertama bisa menunggu, yang kedua ditangani lebih dulu.
Saya terbiasa bekerja dengan AI dan cukup mahir mengarahkannya. Untuk pekerjaan yang berulang dan berpola, ia memotong waktu secara signifikan tanpa menurunkan mutu hasil, selama saya tetap yang menentukan arah dan memverifikasi keluarannya.
Tapi ada satu bagian yang saya kerjakan sendiri dari nol: antarmuka. UI yang dihasilkan AI hampir selalu terasa ada yang kurang: proporsinya meleset, hierarkinya datar, dan karakternya tidak ada. Pemain mungkin tidak bisa menjelaskan apa yang salah, tapi mereka merasakannya. Karena itu setiap UI di project saya digambar dan disusun sendiri.
Brand nasional yang sudah pernah saya tangani.




Ceritakan dulu konsepnya. Saya membalas dalam 1×24 jam, dan jika ternyata bukan bidang saya, akan saya sampaikan sejak awal.