Afteroffice Studio

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.

01

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
02

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
03

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
04

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
05

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
06

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.

07

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.