Tholib Usman HanafiFullstack Engineer

Yogyakarta, Indonesia / terbuka untuk Singapura

Saya bangun produk dari nol, dan migrasi teknologinya juga saya yang pimpin sendiri.

React Native / Next.js / NestJS / Laravel / IoT

Sekarang saya menjalankan sistem pembayaran yang memproses sekitar 2.000 transaksi setiap hari di lebih dari 80 cabang laundry self-service, meski internet di cabang seadanya dan tidak ada teknisi yang berjaga di lokasi.

2.000+
transaksi per hari
80+
cabang aktif
250+
karyawan terlayani
2020
menulis kode sejak
Kenapa saya

Bukan sekadar baris di CV.

Sudah ngoding sebelum ada AI

Kode produksi pertama saya ditulis tahun 2020, empat tahun sebelum saya lulus. Semua sistem di halaman ini saya rancang, perbaiki, dan jaga tetap hidup dengan tangan sendiri.

Saya yang pimpin migrasinya, bukan cuma ngerjain tiketnya

Saya yang memindahkan stack kami dari Laravel ke React Native dan NestJS, lalu naik dari Fullstack Developer jadi Project Manager di tengah jalan, sambil tetap menulis kode.

Pernah bekerja lintas negara

Backend developer di perusahaan Singapura, menggarap platform yang benar-benar dipakai klien mereka di Eropa, bersama tim yang bekerja lintas dua negara.Zettabyte Pte Ltd / Singapura

01 / SKALA DAN KEANDALAN

KRISPAY

Pembayaran nontunai untuk mesin laundry self-service, berjalan di lebih dari 80 cabang dengan internet yang sering putus.

Fullstack Engineer2022 sampai sekarangLaravelIoTMySQL
~2.000
transaksi / hari
80+
cabang
3 tahun
di produksi
Keputusannya

Kadang pembayaran sudah sukses di sisi penyedia, tapi konfirmasinya belum sampai ke server gara-gara koneksi cabang bermasalah. Tiap transaksi jadinya saya kasih kode unik yang tetap dikenali server meski dikirim berulang, dan server akan tanya langsung ke penyedia kalau konfirmasi belum juga datang. Transaksi yang belum tuntas memang tersimpan lebih lama sebelum dicocokkan, tapi itu lebih aman daripada menagih pelanggan padahal mesinnya belum nyala. Yang rusak bukan cuma uang, kepercayaan juga ikut kena.

Baca case study lengkap
smartkris.app/branches/jogja-04
Machine statuslive / 12 units
W-01
running
W-02
idle
W-03
running
W-04
error
D-01
running
D-02
idle
D-03
idle
D-04
running
TRANSACTIONS TODAY1,984
CustomerPembayaran QRISOur serviceidempotency keyretry queuereconcile jobPayment providerQRISDevice firmwareours, no vendorMachines80+ locationsconfirm, or ask directlyunlock commandmachine status: idle / running / error
Smartkris, the NestJS rebuild. Our own firmware, no outside IoT vendor in the path.

02 / DATA YANG BISA DIPERCAYA

Presein

HR dan presensi untuk lebih dari 250 karyawan lintas cabang, dengan absen yang sulit diakali dan bisa ditanyakan langsung dengan bahasa sehari-hari.

Fullstack Engineer2023 sampai sekarangReact Native ExpoLaravelOpenAI
250+
karyawan tiap hari
3 sampai 5 hari
pekerjaan manual hilang / bulan
Keputusannya

Kalau absen cuma modal tombol, siapa saja bisa menekannya dari mana saja tanpa benar-benar hadir. Jadi aplikasinya mengecek lokasi karyawan terhadap cabangnya, minta foto, dan mendeteksi aplikasi pemalsu GPS maupun jam ponsel yang diakalin, bukan sekadar percaya apa kata perangkat. Ada karyawan yang sempat kesulitan absen kalau sinyalnya lemah, tapi data kehadiran yang tidak bisa dipercaya bikin semua keputusan gaji yang dibangun di atasnya jadi percuma.

Baca case study lengkap

Presein / clock in

Cabang Jogja 04

inside branch radius, 18 m
device clock matches server
no mock location detected
photo proof required
CLOCK IN at 07:58

03 / DARI NOL, LANGSUNG KE PELANGGAN

Londrin

Jemput antar laundry sesuai permintaan, dengan satu status pesanan yang tetap sinkron antara pelanggan, kurir, dan cabang.

Frontend Engineer + PM2026 sampai sekarangReact Native ExpoNext.jsREST API
3
pihak, satu status
2
aplikasi + dashboard merchant
Keputusannya

Aplikasi ini baru saja rilis, jadi yang bisa dibanggakan sekarang bukan seberapa besar skalanya, tapi seberapa lengkap alurnya sudah jalan. Tiap pihak bisa macet karena alasan yang beda-beda: kurir datang sebelum pelanggan siap, cabang mendapati cucian lebih berat dari perkiraan sehingga harga berubah, atau cucian sudah selesai tapi belum ada kurir yang bisa mengantar. Status pesanannya dirancang supaya tetap konsisten menghadapi ketiga situasi itu.

Baca case study lengkap
londrin.app/orders/4821
Order #4821in wash
picked upweighedwashingdeliverprice updated, 4.2 kg
COURIER: BUDI S.ETA 18 min
Selain itu

Dua proyek lain, saya ceritain singkat saja.

Smartkris, versi bangun ulang

Pengganti KRISPAY di NestJS dengan firmware perangkat sendiri, supaya server dan mesinnya tidak lagi bergantung pada rencana perusahaan lain.Masih digarap / NestJS / PostgreSQL / firmware

Zettabyte Pte Ltd, Singapura

Backend developer di perusahaan Singapura, menggarap platform untuk klien mereka di Eropa. Detail pekerjaan kliennya tidak bisa saya ceritakan di sini.2024 / backend / tim lintas negara

Linimasa

Enam tahun kode produksi, empat di antaranya sebelum lulus kuliah.

2020Kode produksi pertama di Laravel, PHP
2021Bergabung di PT Istana Mesin Laundry sebagai Fullstack Developer
2022KRISPAY jalan, pembayaran IoT di cabang pertamaLaravel
2023Presein, 250+ karyawan di React Native Expoke React Native
2024Backend Developer, Zettabyte Pte Ltd (Singapura)
2025Stack pindah ke NestJS, naik jadi Project Managerke NestJS / promosi
2026Londrin rilis, lulus dengan IPK 3.81
Photo
170 x 170

Lagi cari engineer yang terbiasa jaga sistem tetap hidup?

Saya terbuka untuk kesempatan baru dan siap pindah ke Singapura.