IKHSAN
ENID Baca dalam Bahasa Indonesia

snapme

Public
Branch
master
Latest commit
130fdb828 October 2026

PRD.md

Open raw
snapme: Product Requirements Document
Versi0.1 (draf untuk perencanaan)
Tanggal8 Oktober 2026
PemilikIkhsan Dyy
Dokumen terkaitDESIGN-SYSTEM.md, ARCHITECTURE.md, MILESTONES.md, halaman acuan UI di docs/ui-reference/

1. Ringkasan

snapme adalah photobooth di browser. Pengguna membuka kamera, berpose, menghias strip foto, lalu mengunduh atau mencetaknya, tanpa akun dan tanpa memasang aplikasi. Foto diproses sepenuhnya di perangkat pengguna.

Tiga hal yang membedakan snapme:

  1. Gesture Snap (fitur interaktif): angkat dua jari, tahan sebentar, hitung mundur berjalan sendiri.
  2. Strip Estafet (pembeda 1): satu orang mengisi setengah strip, mengirim link, dan temannya melengkapi dari perangkat lain kapan saja dalam 48 jam.
  3. Strip Hidup + QR (pembeda 2): tiap pose ikut terekam sebagai klip pendek. QR pada strip cetak membuka versi bergeraknya.

Status (18 Oktober 2026): snapme berjalan tanpa server. Seluruh alur booth — kamera, Gesture Snap, hias, Strip Hidup, ekspor, cetak, simpanan sesi — berjalan di perangkat. Fitur yang memerlukan penyimpanan (buat link strip, QR yang membukanya, Strip Estafet, dan perekaman analitik) menampilkan pesan "belum tersedia" karena rutenya menjawab 503; halaman /s/{id} dan /r/{id} selalu menjawab 404. Tidak ada unggahan ke mana pun dan tidak ada env yang dibutuhkan build.

2. Masalah dan peluang

Photobooth web yang ada umumnya berhenti di alur "ambil 3 sampai 4 foto, pilih frame, unduh PNG". Tiga gesekan yang masih tersisa:

  • Tombol jauh dari pose. Untuk foto beramai-ramai, satu orang harus menekan tombol lalu kembali ke posisi sebelum hitung mundur habis.
  • Foto bareng menuntut waktu yang sama. Booth bersama yang ada mengharuskan semua orang online bersamaan.
  • Strip cetak itu benda mati. Momen di antara pose (tertawa, salah gaya) hilang.

Pemindaian pembanding

Dipindai cepat pada 8 Oktober 2026 dari halaman publik masing-masing produk. Ini bukan audit menyeluruh: kolom "yang ditonjolkan" hanya memuat apa yang tertulis di sumber, dan produk lain di luar daftar ini belum diperiksa.

ProdukJenisYang ditonjolkan di sumbernyaRelevansi untuk snapme
LensBoothWebBooth solo dan Shared Booth: dua orang di lokasi berbeda memotret bersamaan dengan shutter tersinkron, lewat link undangan, tanpa daftarFoto bareng sudah ada, tetapi sinkron (harus online bersamaan). Strip Estafet mengisi sisi asinkron
Polaroid BoothWebStrip 3 foto dan 4-cut, filter, frame, stiker, PNG resolusi tinggiMewakili alur dasar yang harus disamai
BeautyPlus Photo BoothWebEmpat foto menjadi strip digital, gratisAlur dasar
Dreamina (CapCut)Web, AIMembuat strip bergaya dari foto unggahan atau promptArah berbeda (generatif), di luar lingkup snapme
M.BoothWeb, MVP peroranganDua orang memotret terpisah, orang kedua berpose dengan overlay foto pertama, untuk pasangan jarak jauhBukti bahwa mekanik asinkron dengan overlay layak. Masih MVP satu foto
Simple Booth HALOAplikasi iPad untuk acaraMode tanpa sentuh: angkat telapak untuk mulai, QR untuk mengambil fotoGesture sudah terbukti di kios dan aplikasi native
Auto Selfie Pro, Peace CamAplikasi iOSTanda dua jari memicu foto dengan hitung mundurSama, di native

Kesimpulan yang bisa dipertanggungjawabkan: pemicu gesture sudah ada di aplikasi native dan kios, dan estafet asinkron sudah ada sebagai MVP awal, tetapi keduanya tidak saya temukan di photobooth web arus utama yang dipindai. Klaim "satu-satunya" tidak boleh dipakai di materi pemasaran tanpa pemindaian ulang.

3. Pengguna sasaran

PersonaSituasiYang dicari
Geng nongkrong (pelajar dan mahasiswa, 2 sampai 5 orang, satu laptop atau HP disandarkan)Di kelas, kafe, kosFoto ramai-ramai tanpa ada yang lari ke tombol, hasil lucu yang langsung bisa dibagikan
Teman atau pasangan jarak jauhBeda kota, jadwal tidak selalu cocokStrip "bareng" tanpa harus online bersamaan
Panitia acara kecil (ulang tahun, kelulusan, bazar kampus)Satu laptop di meja, printer foto 4RBooth gratis, hasil siap cetak, tamu bisa mengambil lewat QR

Perangkat utama: HP Android kelas menengah dan laptop dengan webcam. Bahasa antarmuka: Indonesia santai (lihat §9).

4. Tujuan dan ukuran keberhasilan

Angka di bawah adalah target awal untuk divalidasi setelah ada data, bukan hasil pengukuran.

TujuanUkuranTarget awal
Alur dasar selesai tanpa bantuanSesi yang mencapai unduh dibagi sesi yang memberi izin kamera60% atau lebih
Gesture Snap benar-benar dipakaiFoto yang dipicu gesture dibagi semua foto, pada sesi dengan gesture menyala50% atau lebih
Estafet tuntasEstafet yang selesai dibagi estafet yang dibuat40% atau lebih
Strip Hidup menambah nilaiSesi yang mengaktifkan Strip Hidup dibagi sesi yang mencapai halaman Hias30% atau lebih
Cepat dipakaiWaktu dari Welcome sampai foto pertamadi bawah 30 detik (median)

Pengukuran memakai analitik tanpa cookie dan tanpa data pribadi (hanya hitungan peristiwa). Pilihan alatnya ditetapkan di M9. Selama backend dibongkar (18 Oktober 2026), rute peristiwanya menjawab 503 dan antrean klien membuang batchnya diam-diam, jadi belum ada angka yang terkumpul.

5. Lingkup

Masuk v1

  • Alur dasar: Welcome, pilih layout, ambil foto, hias, hasil.
  • Gesture Snap, Strip Estafet (2 orang), Strip Hidup + QR.
  • Ekspor siap cetak: strip 2 x 6 inci dan lembar 4R.
  • Link strip pribadi yang kedaluwarsa otomatis.

Tidak masuk v1

  • Akun, login, galeri pribadi.
  • Pembayaran dan pemesanan cetak. Layar "Order" dan "Payment" pada gambar referensi tidak dibuat.
  • Filter wajah atau beautify berbasis AI, dan pembuatan gambar AI di sisi pengguna.
  • Booth bersama real-time (panggilan video).
  • Estafet lebih dari 2 orang.
  • Aplikasi native dan mode kios terkunci.
  • CMS untuk template. Template disimpan sebagai berkas di repo.

6. Alur pengguna utama

Welcome ─► Pilih layout ─► Ambil foto ─► Hias strip ─► Hasil
                              │              │           ├─ Unduh PNG / Cetak 4R
                              │              │           └─ Buat link + QR (unggah, dengan izin)
                              │              └─ Strip Hidup nyala/mati
                              └─ Estafet ke Teman ─► link /r/{id} ─► teman mengisi sisa ─► Hias ─► Hasil

Kedua cabang bagikan di atas adalah rancangan v1. Sejak backend dibongkar 18 Oktober 2026, pembuatan link selalu berakhir di pesan "belum tersedia" (rute 503) dan halaman /r/{id} selalu 404; dialog persetujuan, kartu bagikan, dan sakelar QR tetap ada di UI. Cabang Unduh, Cetak, dan Strip Hidup berjalan penuh di perangkat.

Jalur alternatif "Pakai Foto Galeri": dari Welcome langsung ke Hias dengan foto yang dipilih dari perangkat (P1).

7. Kebutuhan fungsional

Prioritas: P0 wajib untuk rilis pertama, P1 segera setelahnya, P2 bila ada waktu.

7.1 Alur dasar

IDKebutuhanPrioritasKriteria terima
FR-01Halaman Welcome dengan satu aksi utama "Mulai Foto"P0Aksi utama terlihat tanpa menggulir pada 360 x 640 dan 1366 x 768. Halaman tidak memuat kode kamera, gesture, atau kanvas
FR-02Pilih layout: Strip 4 foto, Strip 3 fotoP0Layout terpilih menentukan jumlah foto dan rasio crop di layar kamera
FR-03Layout Grid 2 x 2 (4R)P1Ekspor 1200 x 1800 px
FR-04Izin kamera dengan penjelasan sebelum dialog browserP0Ada layar penjelas dan tombol "Izinkan Kamera". Bila ditolak: pesan cara mengaktifkan lagi dan tombol "Pakai Foto Galeri"
FR-05Pratinjau kamera dicerminkan, dengan panduan crop sesuai layoutP0Foto tersimpan sama seperti yang terlihat di pratinjau
FR-06Ambil foto dengan hitung mundur 3 detik lewat tombol atau tombol SpasiP0Hitung mundur diumumkan ke pembaca layar. Ada kilat layar tunggal, dimatikan saat prefers-reduced-motion
FR-07Baki foto: lihat hasil, ulang foto terakhir, ulang foto tertentuP0Mengulang satu foto tidak menghapus foto lain
FR-08Pilih kamera bila perangkat punya lebih dari satuP1Pilihan tersimpan selama sesi
FR-09Hias: pilih frame, efek foto, stiker (geser, putar, ubah ukuran, hapus)P0Minimal 6 frame, 6 efek, 12 stiker. Semua kontrol bisa dipakai dengan keyboard (lihat DESIGN-SYSTEM §11)
FR-10Hias: teks pendek (maks. 24 karakter) dan tanggalP1Teks memakai fon dari design system
FR-11Ekspor strip PNG 600 x 1800 px (2 x 6 inci, 300 dpi)P0Berkas di bawah 2 MB, tanpa metadata lokasi, nama snapme-YYYYMMDD-HHmm.png
FR-12Cetak 4R: dua strip berdampingan pada 1200 x 1800 px dengan garis potongP0Dialog cetak browser menampilkan satu halaman 4 x 6 inci tanpa margin tambahan
FR-13Pakai Foto Galeri: pilih foto dari perangkat sebagai pengganti kameraP1Menerima JPEG, PNG, WebP, HEIC bila browser mendukung. Foto di-crop sesuai slot
FR-14Sesi bertahan saat halaman dimuat ulangP1Foto dan pilihan hias pulih dari penyimpanan lokal. Ada tombol "Mulai dari awal" yang menghapusnya
FR-15Halaman PrivasiP0Menjelaskan apa yang diproses di perangkat, apa yang diunggah, masa simpan, dan cara menghapus

7.2 Fitur interaktif: Gesture Snap

Pengguna mengangkat tanda dua jari ke kamera. Indikator terisi selama gesture ditahan, lalu hitung mundur 3 detik berjalan dan foto diambil. Tidak ada yang perlu menyentuh perangkat.

IDKebutuhanPrioritasKriteria terima
GS-01Deteksi gesture berjalan seluruhnya di perangkatP0Selama langkah Ambil Foto tidak ada permintaan jaringan yang membawa gambar. Diuji otomatis
GS-02Dua jari (kategori Victory) ditahan memicu hitung mundurP0Nilai awal: skor 0,6 atau lebih selama 0,8 detik berturut-turut. Melepas gesture sebelum itu mengosongkan indikator
GS-03Umpan balik saat menahanP0Indikator terisi di atas pratinjau, disertai teks "Terdeteksi. Tahan..."
GS-04Jeda 1,5 detik setelah foto sebelum gesture dibaca lagiP0Satu pose tidak menghasilkan dua foto
GS-05Tombol kamera dan Spasi selalu tersediaP0Semua alur selesai tanpa gesture
GS-06Sakelar Gesture Snap, pilihan diingat di perangkatP0Mati berarti model tidak dijalankan
GS-07Model dimuat setelah izin kamera, tidak menghalangi pemotretanP0Selama memuat ada status "Menyiapkan gesture...". Bila gagal dimuat, sakelar disembunyikan dan muncul satu pemberitahuan
GS-08Telapak terbuka (Open_Palm) ditahan: ulang foto terakhirP1Sama: indikator, ambang, jeda
GS-09Jempol (Thumb_Up) ditahan setelah semua foto ada: lanjut ke HiasP1Hanya aktif saat semua slot terisi
GS-10Mengenali gesture dari siapa pun di dalam bingkaiP1Deteksi sampai 2 tangan

Ambang pada GS-02 dan GS-04 adalah nilai awal yang disetel lewat uji pakai di M3. Target kinerja: deteksi minimal 10 kali per detik pada HP Android kelas menengah tanpa membuat pratinjau tersendat.

7.3 Pembeda 1: Strip Estafet

Pembuat strip mengisi sebagian slot, lalu mengirim link. Teman membuka link di perangkatnya, melihat foto yang sudah ada, dan mengisi slot sisanya kapan saja sebelum link kedaluwarsa.

IDKebutuhanPrioritasKriteria terima
SE-01Tombol "Estafet ke Teman" muncul setelah minimal setengah slot terisiP0Bawaan Strip 4: pembuat mengisi slot 1 dan 3, teman mengisi 2 dan 4
SE-02Persetujuan unggah sebelum link dibuatP0Dialog menyebut apa yang diunggah, siapa yang bisa melihat, dan kapan terhapus
SE-03Link /r/{id} bisa dibagikan lewat lembar bagikan sistem atau disalinP0Memakai Web Share API bila ada, tombol salin bila tidak
SE-04Teman melihat foto yang sudah ada dan slot yang harus diisiP0Slot milik pembuat terkunci
SE-05Overlay bayangan foto pembuat di pratinjau kamera teman untuk menyamakan poseP0Opasitas 35%, bisa dimatikan
SE-06Hanya satu perangkat yang bisa mengambil giliranP0Pengunjung berikutnya melihat "Estafet ini sudah diambil"
SE-07Setelah lengkap, kedua pihak mendapat halaman strip /s/{id}P0Pembuat melihat status "Menunggu teman" lalu "Selesai" saat membuka link-nya lagi
SE-08Link estafet kedaluwarsa 48 jam, strip jadi kedaluwarsa 7 hariP0Setelah kedaluwarsa, halaman menampilkan pesan dan berkas sudah terhapus
SE-09Pembuat bisa membatalkan dan menghapusP0Berkas terhapus dalam satu permintaan
SE-10Teman yang menghias, pembuat bisa menghias ulang salinannyaP1Hiasan tidak menimpa versi pihak lain

7.4 Pembeda 2: Strip Hidup + QR

Selama hitung mundur, kamera juga merekam rangkaian bingkai pendek. Strip bisa diputar sebagai animasi, dan strip cetak membawa QR yang membuka versi bergeraknya.

IDKebutuhanPrioritasKriteria terima
SH-01Rekam 10 bingkai selebar 480 px selama 1,5 detik terakhir hitung mundur, untuk tiap fotoP0Tidak menunda pengambilan foto utama
SH-02Sakelar Strip Hidup di halaman Hias dengan pratinjau berulangP0Pratinjau menghormati prefers-reduced-motion: berhenti, dengan tombol Putar
SH-03Unduh versi bergerak sebagai video pendek (WebM atau MP4, mengikuti kemampuan browser)P1Durasi sekitar 3 detik, di bawah 5 MB. Bila browser tidak mendukung perekaman, tombol disembunyikan
SH-04"QR di strip": membuat link /s/{id} dan menempatkan QR di kaki stripP0Meminta persetujuan unggah. QR minimal 168 px pada ekspor (sekitar 14 mm saat dicetak 300 dpi) dan lolos uji pindai dari cetakan asli
SH-05Halaman /s/{id}: strip diam, versi hidup, tombol unduh, tanggal kedaluwarsaP0Tidak diindeks mesin pencari. Video berputar tanpa suara
SH-06Pemilik bisa menghapus strip dari halaman ituP0Butuh token hapus yang tersimpan di perangkat pembuat

8. Kebutuhan non-fungsional

AreaKebutuhan
KinerjaWelcome: LCP di bawah 2,5 detik pada jaringan 4G dan HP kelas menengah. Modul gesture dan kanvas dimuat hanya di langkah yang memakainya. Ekspor strip selesai di bawah 2 detik (target)
AksesibilitasWCAG 2.2 AA. Seluruh alur bisa diselesaikan dengan keyboard dan tanpa gesture. Detail di DESIGN-SYSTEM §11
PrivasiLokal dulu: tidak ada foto yang meninggalkan perangkat. Saat ini tidak ada unggahan sama sekali karena snapme tidak punya backend. Tidak ada pelacak pihak ketiga. Rincian di ARCHITECTURE §8
KeamananTidak ada data pengguna di server mana pun. Batas ukuran dan jenis berkas divalidasi di klien. Header keamanan tanpa host luar. Detail di ARCHITECTURE §8
BrowserDua versi mayor terakhir Chrome, Edge, Firefox, dan Safari (desktop dan mobile). Kamera membutuhkan HTTPS
Responsif360 px sampai 1440 px ke atas. Tata letak mengikuti DESIGN-SYSTEM §5
HukumFoto wajah adalah data pribadi. Persetujuan eksplisit sebelum unggah dan hak hapus mengikuti semangat UU No. 27 Tahun 2022 (PDP). Ini bukan nasihat hukum: periksa ulang bila snapme dipakai komersial

9. Konten dan bahasa

  • Bahasa antarmuka: Indonesia santai, kalimat pendek, kata kerja konkret. Tidak ada emoji di antarmuka.
  • Satu label untuk satu maksud di seluruh produk: "Mulai Foto", "Lanjut Hias", "Selesai & Unduh", "Estafet ke Teman". Daftar lengkap di DESIGN-SYSTEM §12.
  • Nama fitur ditulis tetap: Gesture Snap, Strip Estafet, Strip Hidup.
  • snapme adalah merek sendiri. Gambar referensi hanya arah gaya: nama, logo, dan aset Fujifilm tidak dipakai.

10. Rilis bertahap

TahapIsiMilestone (MILESTONES.md)
AlphaAlur dasar P0 tanpa backendM0 sampai M2, M4, M5
Beta 1Gesture SnapM3
Beta 2Link strip, QR, Strip HidupM6, M7
Rilis 1.0Strip Estafet, audit aksesibilitas dan keamananM8, M9

11. Risiko

RisikoDampakMitigasi
Deteksi gesture lambat atau meleset di HP lamaFitur utama terasa rusakTombol selalu ada (GS-05), ambang disetel dari uji pakai, deteksi diturunkan resolusinya
Pengguna menolak izin kameraAlur berhentiLayar penjelas sebelum dialog (FR-04) dan jalur Foto Galeri (FR-13)
Foto orang lain diunggah tanpa izin lewat estafetPrivasiPersetujuan di kedua sisi, link pribadi, masa simpan pendek, tombol hapus
Biaya penyimpanan membengkakOperasionalTidak relevan sementara snapme tanpa backend (tidak ada penyimpanan). Bila penyimpanan kembali: batas ukuran berkas, kedaluwarsa otomatis, pembatasan laju
QR kecil gagal dipindai dari cetakanStrip Hidup tidak sampai ke penggunaUkuran minimum di SH-04 dan uji cetak sebagai syarat rilis
Perbedaan perekaman video antar browserUnduh versi hidup tidak konsistenDeteksi kemampuan, sembunyikan tombol bila tidak didukung (SH-03)

12. Asumsi yang perlu dikonfirmasi

Saya mengambil keputusan berikut agar dokumen bisa dipakai. Ubah bila tidak sesuai:

  1. Antarmuka berbahasa Indonesia. Gambar referensi berbahasa Inggris.
  2. snapme gratis, tanpa akun, tanpa pembayaran.
  3. Masa simpan: strip 7 hari, link estafet 48 jam.
  4. Estafet dibatasi 2 orang pada v1.
  5. Tanpa backend: snapme berjalan sepenuhnya di klien dan tidak butuh hosting khusus (ARCHITECTURE §3). Bila fitur bagikan dihidupkan lagi, pilihan hosting dan penyimpanannya diputuskan ulang.
  6. Tema terang saja pada v1 (DESIGN-SYSTEM §0).

Sumber pemindaian pembanding

bytes
18,601
lines
237
Type
md
Latest commit
28 October 2026