Text

Membangun Gachasik

Written by Gustama Dimas

Penjual gacha menjalankan jualannya pakai spreadsheet. Satu kolom item, satu kolom peluang, dan harapan supaya ora ada yang bertanya bagaimana angkanya dipilih.

Itulah alasan Gachasik ada. Bukan untuk membuat gacha — orang sudah melakukannya — tapi supaya pemilihan acaknya bisa ditunjukkan.

Satu hal yang harus benar

Sisanya cuma fitur. Ini produknya:

  • Pemilihan acak berjalan di server, dari sumber kriptografis — bukan di ponsel pembeli.
  • Peluang ditampilkan di halaman, sebelum pull.
  • Setiap pull menghasilkan tepat satu item dan tanda terima publik.
  • Kode pemilihannya open source, ditautkan dari situs.

Poin terakhir itu yang paling lama diputuskan. Menulis "adil" di footer itu gampang. Menerbitkan fungsi yang benar-benar melakukan pemilihan, supaya orang asing bisa membacanya dan mengecek — itu lebih sulit. Saya memilih yang lebih sulit, karena klaim keadilan yang ora bisa diverifikasi cuma marketing.

Aturan yang tidak boleh dilanggar produk

Dua batasan membentuk hampir semua layar.

Platform melayani penjual, bukan pembeli. Pembeli dan penjual menyelesaikan pembayaran di luar platform. Platform yang memiliki pemilihan acaknya; ia ora pernah duduk di tengah pembayaran. Produknya lebih kecil dan lebih aman, dan itu yang jujur.

Ini bukan alat pembayaran. Kredit disebut kredit. Ora ada pencairan dan ora ada transfer. Antarmuka punya daftar kata yang keras, dan ada tes otomatis yang memindai setiap layar supaya framing-nya ora pernah tergelincir ke bahasa taruhan. Bahkan teks penyangkalannya tidak boleh memakai kata itu. Kalau kamu harus menjelaskan kenapa sesuatu bukan taruhan, kamu sudah kalah di framing-nya.

Satu hari, lalu seminggu

Commit pertama mendarat 04:47 tanggal 30 September — scaffold dan rencana build yang dibekukan. Pukul 12:58 hari yang sama, semuanya sudah berdiri: pool dan peluang, mesin pemilihan, ledger kredit QRIS, referral, storefront publik, kalkulator margin, dan bundel deploy. Tiga puluh enam commit dalam sehari.

Terus lanjut. Animasi reveal. Nested pool — satu item bisa lanjut ke pool lain milik penjual, sampai tiga tahap dengan satu biaya. Demo tanpa login di landing yang menjalankan kode pemilihan asli dengan item contoh, jadi kamu bisa pull sebelum percaya. Mode kiosk untuk layar booth.

Hitungan akhir: 114 commit, 75 file tes, 12.367 baris tes melawan 10.989 baris Python aplikasi. Skema dari v1 ke v16 — semua migrasi additive kecuali satu, yang butuh rebuild tabel sungguhan untuk menghapus template yang sudah tidak diizinkan CHECK constraint.

Yang rusak

Dua hal hampir terkirim dalam keadaan rusak, dan keduanya layak disebut.

Image deploy kehilangan dua file. draw.js dan share.js ora masuk ke wheel hasil build — animasinya bakal mati begitu saja di produksi, tanpa error dan tanpa baris log. Sekarang ada tes yang menjaga seluruh direktori app/static, jadi image ora bisa diam-diam menghapus aset lagi.

"Force SSL" di Nginx Proxy Manager hampir mematikan situs. Tunnel menyerahkan HTTP polos ke NPM, jadi Force SSL mengalihkan HTTP itu ke URL HTTPS yang sama — loop. Perbaikannya: pakai "Always Use HTTPS" dari Cloudflare dan biarkan Force SSL mati. Setelan yang kelihatan benar, tapi justru salah.

Ada juga masa di mana tiga subagent gagal beruntun untuk fitur nested pool — satu crash-loop, satu cuma melakukan recon. Sesi utama akhirnya membangunnya langsung. Delegasi ora otomatis lebih cepat daripada mengerjakan sendiri.

Yang masih terbuka

Saya lebih suka menuliskannya daripada pura-pura tidak ada:

  • Halaman legalnya sudah berisi copy sungguhan tapi belum final — di halamannya sendiri tertulis masih menunggu tinjauan penasihat hukum.
  • Repo lokal ahead satu commit dari origin.
  • Belum ada harga untuk B2B atau acara — cuma halaman kontak.

Kenapa ini picker, bukan game

Nama di kotaknya: "pemilih acak yang tercatat dan bisa disesuaikan — bukan taruhan." Itu bukan eufemisme. Itu spesifikasinya.

Picker itu alat. Ia melakukan apa yang diperintahkan, menunjukkan kerjanya, dan menyimpan catatan. Semua di build ini mengikuti dari situ: pemilihan di server, peluang yang ditampilkan, tanda terima, algoritma yang diterbitkan.

Kalau pemilihan acaknya adil dan kamu bisa mengeceknya, kamu ora perlu mempercayai penjualnya. Itu seluruh produknya.