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.

  • Android 8+ & iOS
  • Bahasa Indonesia
  • Data di server Anda sendiri
Mode pesawatAktif — semua tersimpan lokal
16:20Tanpa sinyal

Data saya

2 submission belum terkirim

1

Terkirim

2

Menunggu

1

Tindakan

  • Warung Bu Tuti

  • Kios Sayur Pak Endang

  • Toko Bahan Kue Melati

  • Bengkel Motor Jaya

Form
Data saya
Pengaturan

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. 1

    Admin menyusun survei

    Pertanyaan, validasi, dan pembagian halaman disusun sebagai form di panel admin. Tidak perlu developer.

  2. 2

    Enumerator mengunduh sekali

    Satu kali terhubung di kantor sudah cukup: form dan data wilayah tersimpan di perangkat, sesi bertahan 90 hari.

  3. 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. 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.
Halaman Submission pada panel admin Titen
Submission. Setiap kiriman lengkap dengan waktu isi, enumerator, form, dan versi form yang dipakai.
Halaman Form pada panel admin Titen
Form. Survei baru disusun dan diterbitkan di sini, tanpa menunggu rilis aplikasi berikutnya.

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.