PerkoP App

Cafe & Warkop TRACKER

Tentang Cara Kerja Dokumentasi Perjalanan Kopi
Masuk

← Cara Kerja

📖 Dokumentasi PerkoP

Penjelasan teknis lengkap: arsitektur pencarian, sistem ranking, alur klaim dan verifikasi, paket langganan, dan proses review admin.

Sumber Data Peta

PerkoP App menggabungkan dua sumber data untuk menampilkan hasil pencarian yang lengkap dan aktual.

OSM

OpenStreetMap

Database peta terbuka yang dikontribusikan komunitas global. PerkoP mengambil data cafe, warkop, dan coffee shop dari OSM via Overpass API berdasarkan radius dari koordinat pengguna. Data ini mencakup nama, koordinat, dan atribut dasar.

DB Internal

Database PerkoP

Data yang dikelola langsung oleh pemilik cafe melalui dashboard. Mencakup foto galeri, menu beserta harga, jam buka per hari, fasilitas (WiFi / AC / Parkir / dll.), nomor WhatsApp, deskripsi, dan status verifikasi. Data ini tampil di halaman detail cafe.

💡 Hasil pencarian menggabungkan kedua sumber. Cafe yang sudah diklaim di PerkoP mendapat data enrichment penuh (foto, jam, fasilitas) dan ditampilkan dengan badge. Cafe yang hanya ada di OSM tetap tampil dengan data dasar.

Cara Kerja Pencarian

Alur teknis dari klik tombol "Cari" hingga kartu cafe tampil di layar.

1

Izin Geolokasi Browser

Browser meminta izin akses GPS. Koordinat yang diberikan (latitude, longitude) hanya dipakai di sisi klien untuk menghitung radius pencarian — tidak dikirim ke server. Jika GPS tidak tersedia, pencarian teks tetap bisa digunakan.

2

Query Overpass API (OSM)

Permintaan dikirim ke Overpass API dengan parameter bounding box berbasis radius yang dipilih (1–3 km). Query mencari node dan way bertag amenity=cafe, amenity=coffee_shop, atau nama mengandung kata kunci seperti "warkop", "kopi", "warung kopi". Hasil dikembalikan dalam format JSON.

3

Query Database Internal

Secara paralel, API PerkoP (GET /api/cafes/nearby) juga dipanggil dengan parameter lat/lon dan radius. Server melakukan query PostGIS untuk mencari cafe terverifikasi dalam radius tersebut. Merek besar (Starbucks, Kopi Kenangan, dll.) dikeluarkan secara otomatis dari hasil.

4

Merge & Deduplikasi

Hasil OSM dan DB internal digabungkan. Data PerkoP ditampilkan terpisah di bagian atas sebagai "Terdaftar di PerkoP", sementara data OSM yang belum diklaim tampil di bagian bawah sebagai "Dari Peta OpenStreetMap". Duplikat berdasarkan koordinat dihapus.

5

Render Peta + Kartu

Peta dirender menggunakan Leaflet.js dengan tile dari OpenStreetMap. Marker ditampilkan per cafe. Kartu di bawah peta diurutkan berdasarkan sistem ranking dan menyertakan info harga, fasilitas, dan status buka/tutup real-time.

Sistem Ranking Hasil Pencarian

Urutan tampil cafe di hasil pencarian ditentukan oleh tiga tingkatan prioritas, dari atas ke bawah.

1

Featured (Berbayar)

Cafe dengan paket PRO atau PREMIUM mendapat slot di bagian paling atas hasil pencarian, sebelum hasil organik. Ditandai label "Featured". PRO = 1 slot, PREMIUM = 3 slot.

2

Terverifikasi (Organik)

Cafe dengan paket BASIC ke atas yang sudah direview dan disetujui admin. Badge ✓ Terverifikasi ditampilkan di kartu. Diurutkan berdasarkan jarak dari posisi pengguna.

3

Data OSM (Umum)

Cafe dari OpenStreetMap yang belum diklaim atau hanya di tier FREE. Tampil di bagian bawah, diurutkan berdasarkan jarak. Bisa langsung diklaim dengan tombol "Klaim gratis →" di kartu.

Catatan: Jarak dihitung dari koordinat GPS pengguna ke koordinat cafe menggunakan formula Haversine. Semua ranking di dalam tier yang sama diurutkan dari terdekat ke terjauh.

Alur Klaim Cafe

Cara mendaftarkan kepemilikan cafe yang sudah ada di peta OSM, langkah per langkah.

1

Temukan cafe di hasil pencarian

Cari cafemu menggunakan GPS atau kolom teks di halaman utama. Klik kartu cafe, lalu klik tombol "Klaim gratis →" yang muncul di bagian bawah halaman detail.

2

Login atau daftar akun pemilik

Jika belum punya akun, sistem mengarahkan ke halaman registrasi. Daftar dengan Google (satu klik) atau email. Akun pemilik gratis dan bisa mengelola banyak cafe.

3

Isi formulir klaim

Masukkan nama pemilik/pengelola, jabatan, dan nomor WhatsApp aktif. Data ini digunakan untuk verifikasi OTP dan kontak admin.

4

Verifikasi GPS

Klik "Deteksi Lokasi Saya". Browser meminta izin GPS dan menghitung jarak ke cafe. Dalam 200 m: status langsung hijau ✓. Lebih jauh: masih bisa lanjut — admin akan mempertimbangkan.

5

Verifikasi OTP WhatsApp

Klik "Kirim OTP". Kode 6 digit dikirim via WhatsApp ke nomor yang didaftarkan. Berlaku 10 menit dan hanya bisa dipakai sekali. Masukkan kode, klik Verifikasi.

6

Upload foto selfie

Foto dirimu di depan cafe dengan wajah dan nama/papan cafe terlihat jelas. Format JPG/PNG, maks. 5 MB. Foto ini menjadi bukti utama kehadiran fisik yang diperiksa admin saat review.

7

Submit — tunggu review

Klik "Ajukan Klaim". Permintaan masuk ke antrian review admin. Status klaim bisa dipantau di Dashboard → Klaim Saya. Notifikasi WhatsApp dikirim saat keputusan sudah ada.

Detail Teknis 3 Lapis Verifikasi

Setiap lapisan bekerja secara independen dan semua harus terpenuhi sebelum klaim bisa diajukan.

📡 GPS — Verifikasi Kehadiran Fisik

  • Menggunakan navigator.geolocation.getCurrentPosition()
  • Koordinat dibandingkan dengan data OSM cafe
  • Jarak dihitung dengan formula Haversine
  • < 200 m → hijau ✓ (rekomendasi)
  • 200–500 m → kuning ⚠ (bisa submit, admin pertimbangkan)
  • > 500 m → merah ✗ (bisa tetap submit, tapi perlu penjelasan)
  • Koordinat tidak disimpan ke database

📱 OTP WhatsApp — Verifikasi Nomor

  • Kode 6 digit numerik acak
  • Dikirim via WhatsApp API
  • Berlaku 10 menit sejak pengiriman
  • Single-use — hangus setelah dipakai
  • Maks. 3 percobaan sebelum cooldown
  • Rate-limit: 1 OTP per nomor per 5 menit
  • Nomor WA disimpan sebagai kontak pemilik

🤳 Selfie — Bukti Visual

  • Format: JPG atau PNG, maks. 5 MB
  • Disimpan di Cloudinary (private folder)
  • URL hanya bisa diakses oleh admin
  • Dihapus otomatis jika klaim ditolak final
  • Wajah dan nama cafe harus terlihat jelas
  • Admin bisa minta foto ulang jika kurang jelas

Proses Review Admin

Setelah klaim diajukan, admin melakukan review manual. Tidak ada persetujuan otomatis.

1

Admin menerima notifikasi klaim baru

Klaim masuk ke antrian di panel admin. Antrian diurutkan: PREMIUM terlebih dahulu, kemudian berdasarkan waktu pengajuan (FIFO). Rata-rata waktu tunggu 1–2 hari kerja.

2

Pemeriksaan dokumen verifikasi

Admin memeriksa: foto selfie (wajah + nama cafe cocok), status OTP (terverifikasi), jarak GPS saat klaim diajukan, dan konsistensi nama cafe dengan data OSM. Semua data ditampilkan dalam satu tampilan di panel admin.

3

Pemeriksaan kualitas konten

Admin juga memeriksa foto-foto cafe yang sudah diupload: apakah jelas, relevan, dan tidak mengandung konten yang tidak sesuai. Teks deskripsi diperiksa dari spam atau konten promosi yang tidak wajar.

4

Keputusan & notifikasi

Disetujui → status klaim berubah jadi "Terverifikasi", cafe tampil dengan badge, notifikasi WA dikirim ke pemilik.
Info tambahan diminta → admin tulis catatan spesifik, pemilik bisa update data dan resubmit tanpa mengulang OTP.
Ditolak → alasan dicatat, pemilik bisa mengajukan banding dalam 7 hari kalender dengan bukti tambahan.

Audit Log

Setiap perubahan data cafe dicatat secara otomatis untuk keperluan transparansi dan keamanan.

Event yang dicatat:

✓ Pengajuan klaim baru
✓ Perubahan status klaim
✓ Update data cafe oleh pemilik
✓ Upload / hapus foto
✓ Aktivasi / perubahan paket
✓ Login akun pemilik
✓ Aksi admin (review, approve, tolak)
✓ Hapus atau nonaktifkan cafe
Log disimpan di tabel audit_logs dengan kolom: actor_id, actor_type (owner/admin/system), entity_type (cafe/claim/subscription), entity_id, action, diff (JSON perubahan), dan created_at. Log tidak bisa dihapus oleh pemilik cafe; hanya admin yang bisa mengakses log lengkap.

Perbandingan Paket Lengkap

Semua fitur masing-masing tier dalam satu tabel.

Fitur FREE BASIC PRO PREMIUM
Harga/bulan Gratis Rp 149.000 Rp 449.000 Rp 749.000
Tampil di hasil pencarian ✓✓✓✓
Maksimum foto 21030Tak terbatas
Maksimum menu 51530Tak terbatas
Deskripsi cafe ✓✓✓✓
Badge ✓ Terverifikasi —✓✓✓
Jam buka tampil di kartu —✓✓✓
Fasilitas tampil di kartu —✓✓✓
Tombol WhatsApp aktif —✓✓✓
Tombol Bagikan —✓✓✓
Analytics dasar —✓✓✓
Slot Featured di pencarian ——1 slot3 slot
Laporan email bulanan ——✓✓
Prioritas antrian klaim ———✓
Ekspor analytics (CSV) ———✓

Cara Upgrade Paket

Proses upgrade dilakukan manual melalui konfirmasi pembayaran admin.

1

Pilih paket di dashboard

Login ke dashboard pemilik → menu Langganan → pilih paket yang diinginkan. Halaman menampilkan nominal transfer dan nomor rekening tujuan.

2

Transfer pembayaran

Transfer sesuai nominal ke rekening yang tertera. Sertakan nama cafe atau ID akun sebagai keterangan transfer agar mudah diverifikasi.

3

Upload bukti transfer

Kembali ke menu Langganan di dashboard → unggah screenshot atau foto bukti transfer. Format JPG/PNG/PDF, maks. 3 MB.

4

Admin mengaktifkan paket

Admin memverifikasi pembayaran dan mengaktifkan paket. Notifikasi WhatsApp dikirim saat aktif. Target konfirmasi: 1 hari kerja setelah bukti diterima.

Masa berlaku dihitung sejak tanggal aktivasi, bukan tanggal pembayaran. Perpanjangan perlu dilakukan sebelum jatuh tempo — akun tidak auto-downgrade tiba-tiba, ada grace period 7 hari setelah jatuh tempo sebelum fitur berbayar dinonaktifkan.

Siap mendaftarkan atau upgrade cafe kamu?

Daftar / Login Dashboard →
🏪 Daftarkan Cafe