Setiap baris di halaman ini punya project yang membuktikannya.
Ini bukan daftar kemampuan. Kolom kanan menyebut di mana teknologi itu berjalan sekarang, supaya bisa kamu buka dan periksa sendiri.
Bahasa & runtime
Sebagian besar ditulis dengan JavaScript dan TypeScript di Node.js. Sisanya mengikuti kebutuhan, bukan preferensi — Laravel dipakai ketika sistemnya butuh multi-tenant yang matang, Kotlin ketika harus menyentuh perangkat keras.
- JavaScript · Node.js
- Dipakai paling luas — bot Telegram, API, service latar. Contoh: sync Midtrans Kantinmu, backend Lab di situs ini
- TypeScript
- Untuk yang berumur panjang dan banyak model. Contoh: MUV, Imago, Review Tugas Akhir
- PHP · Laravel
- Ketika multi-tenant dan izin akses jadi inti masalahnya. Contoh: Aksara, 56 hub sekolah
- Python
- Pengolahan data, migrasi, dan skrip yang berjalan lama. Contoh: migrasi 44.909 eksemplar Aksara
- Dart · Flutter
- Aplikasi Android yang dipasang di perangkat. Contoh: QR Scanner, QR Generator
- Kotlin (plugin native)
- Ketika web tidak bisa menjangkau perangkat kerasnya. Contoh: dua plugin Sepiring POS — cetak ESC/POS lewat Bluetooth, dan SQLite native
Antarmuka
Dipilih dari beban yang harus ditanggung halamannya, bukan dari yang sedang populer. Banyak tool internal justru tidak butuh framework sama sekali, dan lebih cepat dibuka karenanya.
- Next.js (App Router)
- Aplikasi dengan autentikasi, banyak halaman, dan data server. Contoh: MUV, Office, Imago
- React · Vite
- Aplikasi satu halaman yang berat di sisi klien. Contoh: PrintMe, Meero, Sepiring POS
- HTML + JavaScript polos
- Tool internal yang harus terbuka instan dan hampir tidak pernah berubah. Situs ini termasuk
- PWA (manifest + service worker)
- Supaya bisa dipasang di layar utama dan tetap dibuka saat sinyal buruk
- Capacitor
- Membungkus antarmuka web jadi aplikasi Android yang bisa menyentuh perangkat keras
Database & penyimpanan
Ukuran masalah yang menentukan, bukan kebiasaan. Sebuah tool internal dengan satu penulis tidak butuh Postgres, dan sistem 56 cabang tidak boleh pakai SQLite.
- PostgreSQL
- Untuk yang berbagi banyak penulis dan relasi rumit. Contoh: Aksara (11.212 bibliografi, 44.909 eksemplar), MUV (skema 67 model), Sepiring POS
- SQLite · better-sqlite3
- Untuk yang genuinely satu penulis. Contoh: Dock, Uang Keluar, backend Lab situs ini
- Prisma
- Skema dan migrasi tercatat di atas PostgreSQL. Contoh: MUV, Review Tugas Akhir
- Drift
- Penyimpanan lokal di perangkat Android. Contoh: QR Scanner
- Google Sheets sebagai basis data operasional
- Ketika tim harus tetap bisa membuka dan mengedit datanya sendiri. Contoh: SMM Merchandise Sales (8.367 baris transaksi)
- IndexedDB
- Data yang sengaja tidak pernah meninggalkan browser. Contoh: Notepad, Kanva
Integrasi yang sudah pernah disambungkan
Semua ini sudah berjalan di produksi, bukan percobaan.
- Midtrans
- Payment link, tarik status transaksi, dan rekonsiliasi. Dipakai di Kantinmu dan SMM Merchandise Sales — satu audit menemukan Rp198.381.500 yang tidak pernah masuk laporan
- Google Sheets API
- Baca dan tulis dua arah lewat service account. Contoh: merchsales, ProdForm, Role Dashboard, ReportFinder
- Google Docs API
- Membuat dokumen dari template secara otomatis. Contoh: HR Job Profile Builder
- Telegram Bot API
- Empat bot berjalan — melaporkan, menjawab pertanyaan, dan satu yang bisa mengubah data
- Model AI
- Anthropic, DeepSeek, dan Ollama self-hosted — dipilih per kasus berdasarkan biaya, kualitas, dan di mana datanya boleh berada
- OCR (Tesseract)
- Membaca dokumen hasil pindaian. Contoh: layanan OCR internal
- Web Speech API
- Pengenalan dan sintesis suara di browser. Contoh: English Coach
- Bluetooth Classic · ESC/POS
- Cetak ke printer termal, diverifikasi di perangkat fisik. Contoh: Sepiring POS
- Cloudflare (DNS & Pages)
- Zona DNS dan hosting statis. Domain ini termasuk
Server & operasional
Semuanya berjalan di satu VPS yang saya kelola sendiri — bukan platform yang bisa tiba-tiba mengubah harga, dan bukan hosting yang saya tidak pegang root-nya.
- Reverse proxy & TLS
- Caddy, sertifikat otomatis, konfigurasi terpisah per project
- Proses aplikasi
- PM2 untuk service Node, Docker Compose untuk yang butuh isolasi penuh
- Cara service diekspos
- Bind ke 127.0.0.1; container dipetakan sebagai 127.0.0.1:PORT. Satu-satunya pintu publik adalah Caddy di 80 dan 443
- Rilis
- Build ulang image, bukan menyalin file ke container yang sedang jalan
- Perubahan skema
- File migrasi yang tercatat, bukan mendorong skema langsung
- Backup
- Dump harian ke penyimpanan di luar server, dengan rotasi
- Verifikasi backup
- Dump dipulihkan ke database sementara yang terpisah, lalu jumlah barisnya dibandingkan dengan production sampai cocok
- Monitoring
- Pengecekan otomatis memanggil setiap URL dan mencatat kode responsnya — halaman portofolio situs ini membaca hasil yang sama
Kode dan apa yang terjadi kalau saya hilang
Ini yang paling jarang ditanyakan di depan, padahal paling menentukan.
- Kepemilikan kode
- Disepakati tertulis di awal, bukan di akhir project
- Repository
- Bisa langsung di organisasi git milik kamu sejak commit pertama
- Dokumentasi
- README, catatan arsitektur, dan langkah deploy ditulis sebagai bagian dari pekerjaan
- Handover
- Sesi serah terima ke tim kamu, dengan dokumen yang cukup untuk melanjutkan tanpa saya
Kalau kerja sama ini berhenti, tim kamu harus bisa melanjutkan. Kalau tidak bisa, berarti pekerjaan saya belum selesai.
Di mana saya bukan pilihan yang tepat
Daftar ini ada supaya kamu tidak perlu menemukannya sendiri di tengah project.
- Dukungan operasional 24/7 dengan SLA berlapis — saya satu orang, dan itu tidak bisa dijanjikan.
- Sertifikasi kepatuhan formal, audit ISO, atau kebutuhan regulasi yang butuh proses lembaga.
- Integrasi dalam ke sistem enterprise besar yang butuh koordinasi berbulan-bulan lintas vendor.
- Tim besar yang mengerjakan banyak jalur paralel dengan tenggat yang sama.
- Pekerjaan yang butuh akses ke data pribadi sensitif dalam skala besar tanpa perjanjian pemrosesan data yang jelas.
Kalau kebutuhan kamu ada di daftar ini, saya akan bilang di percakapan pertama. Untuk sebagian, saya masih bisa membantu di bagian awalnya — merancang, membuat versi pertama, lalu menyerahkannya ke tim atau vendor yang lebih tepat.