| No | Kriteria | Detail | |----|----------|--------| | 1 | | Ketika pengguna menekan tombol “Genjot” (ikon hati, tepuk tangan, atau “Cheer”) pada profil/aktivitas kakak, sistem mengirim event genjot_kakak . | | 2 | Animasi Bahagia | Avatar/karakter kakak menampilkan animasi “bahagia” (senyum lebar, efek confetti, atau balon hati) dalam ≤ 1,5 detik setelah trigger. | | 3 | Feedback Audio (opsional) | Jika pengaturan suara aktif, diputar efek suara “yay!” atau tawa ringan selama animasi. | | 4 | Poin/Reward | Setiap genjotan memberi +1 poin kebahagiaan ke profil kakak; total poin ditampilkan di UI “Kebahagiaan”. | | 5 | Limitasi | Maksimum 5 genjotan per jam per pengguna untuk menghindari spam. | | 6 | Responsibilitas Backend | Endpoint POST /api/v1/kakak/:id/genjot mengembalikan: json "status":"ok", "new_happiness_score": 42, "animation":"happy", "reward_points": 1 | | 7 | Fallback | Jika animasi gagal (mis. koneksi lambat), UI menampilkan toast “Kakak tersenyum! 🎉”. | | 8 | Aksesibilitas | Tambahkan aria-label="Kakak bahagia karena Anda memberi genjotan" serta teks alternatif pada animasi untuk pembaca layar. | | 9 | Pengujian | Unit test untuk endpoint, UI test untuk animasi (Cypress/Playwright), dan tes aksesibilitas (axe). | |10| Analytics | Kirim event genjot_success ke sistem pelaporan (Mixpanel/GA) dengan properti: user_id , kakak_id , timestamp . |
By being mindful of the potential impact of social media on our lives, we can work towards creating a more balanced and healthy online environment that promotes genuine happiness and well-being.
// 1️⃣ limit check const recent = await GenjotLog.count( where: userId, kakakId, createdAt: $gt: Date.now() - 60*60*1000 , ); if (recent >= 5) return res.status(429).json( error: 'Rate limit exceeded' ); | No | Kriteria | Detail | |----|----------|--------|
| | | Badge kecil di sudut kanan atas avatar: +1 . | | Responsif | Pastikan animasi tetap halus pada layar < 480 px (mobile) dan desktop. | | Dark Mode | Pastikan kontras tetap baik; confetti berwarna putih‑keemasan untuk dark background. |
| Risiko | Dampak | Mitigasi | |--------|--------|----------| | | Mengurangi nilai emosional | Rate limit (5/h) + captcha bila terdeteksi pola otomatis. | | Animasi berat pada device low‑end | Lag, UI freeze | Pilih Lottie file < 30 KB, fallback ke GIF/static image bila window.devicePixelRatio rendah. | | Keterbatasan bahasa | Tidak semua user mengerti “genjotan” | Tambahkan tooltip dengan penjelasan singkat dalam Bahasa Indonesia. | | Kegagalan audio | Pengalaman terputus | Audio optional, silenced bila browser blok autoplay. | | | 4 | Poin/Reward | Setiap genjotan
// components/GenjotButton.tsx import useState from 'react'; import Lottie from 'react-lottie'; import happyAnim from '../assets/anim/happy.json'; import postGenjot from '../api/kakak';
return ( <> <button aria-label="Berikan genjotan untuk membuat kakak bahagia" disabled=loading onClick=handleGenjot className="genjot-btn" > loading ? '⏳' : '❤️ Genjot' </button> koneksi lambat), UI menampilkan toast “Kakak tersenyum
To promote a positive and healthy online experience: