Offline-first · self-hosted
Sinyal boleh hilang.
Data pendataan tidak.
Titen adalah aplikasi survei lapangan yang menjadikan penyimpanan di HP sebagai sumber kebenaran. Enumerator mengisi form, mengambil foto, dan menandai koordinat tanpa koneksi sama sekali — sinkronisasi berjalan sendiri begitu sinyal kembali.
Warung Bu Tuti
Kios Sayur Pak Endang
Toko Bahan Kue Melati
Bengkel Motor Jaya
Coba matikan dan hidupkan mode pesawat — antrian terkirim sendiri.
0%
data hilang pada 200 submission uji
100%
form dapat diisi tanpa koneksi
< 2 s
dari buka aplikasi sampai form siap diisi
≥ 95%
sync otomatis berhasil tanpa campur tangan
Masalahnya bukan sinyal
Aplikasi pendataan biasanya menganggap jaringan selalu ada
Begitu koneksi gagal, kegagalan jaringan berubah menjadi kegagalan penyimpanan. Petugas kembali ke kertas, lalu ada satu tahap entry ulang yang rawan salah.
Yang biasa terjadi
- Form gagal tersimpan karena menunggu respons server
- Sesi login habis di lapangan, aplikasi logout, data lokal ikut terhapus
- Enumerator tidak tahu data mana yang sudah sampai
- Survei baru berarti menunggu rilis aplikasi berikutnya
Dengan Titen
- Setiap submission ditulis ke database lokal sebelum menyentuh jaringan
- Token kedaluwarsa menandai “perlu login ulang”, tidak pernah menghapus apa pun
- Status setiap submission terlihat di satu daftar, tanpa dicari
- Survei baru cukup diubah di panel admin — tanpa rilis aplikasi
Fitur
Dibangun dari satu asumsi: koneksi itu bonus
Pengisian offline penuh
Semua interaksi dilayani dari SQLite di perangkat. Tidak ada satu pun tombol yang menunggu jaringan, dan tidak ada banner “tidak ada koneksi” — offline adalah kondisi normal.
Form dinamis, tanpa rilis
Field, validasi, logika kondisional, dan pembagian halaman datang dari JSON. Menambah survei 12 pertanyaan adalah pekerjaan konfigurasi, bukan pekerjaan rilis.
Sync engine berbasis outbox
Antrian mutasi dengan status per item, retry dengan exponential backoff, dan kunci single-flight. Endpoint submission idempotent berdasarkan UUID klien — kiriman ganda tidak menghasilkan data ganda.
Antrian foto terpisah
Foto dikompresi ke 200–500 KB sebelum masuk antrian dan diunggah di jalur sendiri, jadi submission tidak tersandera satu berkas besar. Berkas lokal dihapus setelah unggahan terkonfirmasi.
Foto & koordinat terverifikasi
Setiap titik disimpan bersama nilai akurasi dan waktu ambil, sehingga supervisor bisa menilai apakah petugas benar berada di lokasi. Akurasi buruk memberi peringatan, bukan memblokir penyimpanan.
Status yang tidak perlu dicari
Satu submission selalu punya satu status, dengan kalimat yang bisa dipahami petugas. Ringkasan jumlah ada di header daftar, dan yang butuh tindakan membawa tombolnya sendiri.
Cara kerja
Empat langkah, satu di antaranya berjalan tanpa Anda
- 1
Admin menyusun survei
Pertanyaan, validasi, dan pembagian halaman disusun sebagai form di panel admin. Tidak perlu developer.
- 2
Enumerator mengunduh sekali
Satu kali terhubung di kantor sudah cukup: form dan data wilayah tersimpan di perangkat, sesi bertahan 90 hari.
- 3
Mendata di lapangan
Isi form, ambil foto, tandai koordinat — semuanya tanpa koneksi. Draf tersimpan otomatis setiap perubahan, tahan terhadap aplikasi yang mati mendadak.
- 4
Sinkron sendiri saat sinyal kembali
Begitu konektivitas kembali, antrian jalan sendiri: form terbaru ditarik, submission dikirim satu per satu, lalu foto menyusul di jalur terpisah.
Panel admin
Sisi web tempat supervisor bekerja
Submission yang masuk, foto yang masih diunggah, perangkat yang terdaftar, dan form survei: semuanya dikelola dari satu panel di server Anda sendiri.
- Pencarian berpola
field:value, filter tersimpan, dan ekspor CSV. - Peran, izin, daftar perangkat, dan log operasi untuk audit internal.


Untuk siapa
Tiga peran, tiga kebutuhan yang berbeda
Enumerator
“Yang sudah saya isi jangan hilang”
Target 15–30 responden sehari, baterai harus tahan 8 jam, penyimpanan HP hampir penuh. Yang dibutuhkan: kepastian visual bahwa data tersimpan, dan alur pengisian yang minim ketukan.
Supervisor
“Siapa sudah setor berapa?”
Memantau 5–15 petugas dari panel internal: submission yang masuk, mana yang gagal sync, dan koordinat untuk memverifikasi petugas benar di lokasi.
Admin sistem
“Survei baru, hari ini”
Mendefinisikan form dan mendistribusikannya tanpa menunggu developer. Form yang tidak valid ditolak panel dengan pesan yang jelas, bukan dengan crash di lapangan.
Arsitektur
Data Anda tetap di infrastruktur Anda
Seluruh sistem berjalan sebagai container Docker di server sendiri. Panel admin dan API mobile adalah dua binary terpisah: panel boleh tinggal di jaringan internal, dan bug di panel tidak menjatuhkan jalur masuk data.
- api: publik, hanya lima endpoint, melayani terus meski panel mati
- admin: panel supervisor di balik VPN atau IP allowlist
- migrate: job sekali jalan, jadi tidak ada dua layanan bermigrasi bersamaan
- PostgreSQL untuk data, MinIO untuk foto, keduanya milik Anda
Pengguna
Enumerator
Android & iOS, offline
Supervisor
Panel admin web
sync · HTTPS
Server · Docker
api
publik, 5 endpoint
admin
VPN / allowlist
migrate
job sekali jalan
PostgreSQL
submission & form
MinIO
penyimpanan foto
Yang belum ada, dan itu disengaja
Belum ada multi-tenant, dashboard analitik, peta offline, barcode, atau tanda tangan digital. Kedalaman di dua hal yang menentukan, sync engine dan konsistensi data, dipilih lebih dulu daripada keluasan fitur.
Coba sendiri di mode pesawat
Pasang versi uji di Android atau iOS, matikan koneksi, lalu isi beberapa submission. Kalau cocok untuk instansi atau klien Anda, seluruh sistemnya bisa diserahkan lengkap dengan pipeline dan dokumentasinya.
APK lewat Google Drive, iOS lewat TestFlight.