MASA by LabMu · Project Maverick · 06-Handoff

Analytics Event Spec

7 Firebase events yang sudah berjalan + 21 event baru yang perlu diimplementasikan. Setiap event memiliki nama, properties, trigger, dan wave target. Digunakan oleh tim Flutter + Backend untuk tracking aktivitas user secara presisi.

Platform Firebase Analytics (GA4)
Existing events 7
New events 21
Total 28
Funnels 5
Dashboard 4 KPI utama

§1Kenapa analytics ini penting

MASA saat ini punya Firebase Analytics tapi hanya 7 event yang di-track. Ini berarti tim tidak bisa menjawab pertanyaan kritis seperti: "Berapa persen user yang masuk Qur'an langsung ke Sedekah via Bridge B?" atau "Berapa persen iuran gagal karena VA error?"

Prinsip spec ini:
(1) Track behavior yang bisa mengubah keputusan produk — bukan sekedar page views.
(2) Setiap event punya action yang jelas jika metrik di luar target.
(3) Event name mengikuti Firebase GA4 convention: snake_case, ≤40 char, descriptive verb_object.
7
Existing Events (retain)
21
New Events (implement)
5
Conversion Funnels
4
KPI Dashboard Items

§2KPI Dashboard — 4 metrik utama

Empat angka yang harus dilihat setiap hari oleh PM, CX lead, dan dev lead. Kalau salah satu di luar target, ada event yang menjelaskan mengapa.

W1 Retention
27%
Target: ≥35%
↓ 8pp from target
Activation Rate
58%
Target: ≥70%
↓ 12pp from target
Habit Loop Rate
New: track setelah Wave 2
Target: ≥25%
Payment Success
New: track setelah Wave 0
Target: ≥95%
Cara baca dashboard: W1 Retention 27% (target ≥35%) → lihat event onboarding_segment_selected untuk tahu segmen mana yang churn. Activation 58% (target ≥70%) → lihat permission_notification_granted untuk tahu apakah izin notif menjadi bottleneck.

§3Existing Events — 7 event yang sudah berjalan

Pertahankan 7 event ini. Tidak perlu diubah kecuali ada penambahan property baru yang ditandai dengan [+].

Event NameDeskripsiPropertiesTriggerWave
screen_view
existing
Setiap perpindahan halaman. Auto-tracked Firebase.
firebase_screen_name
firebase_screen_class
[+] user_segment (kader/muslim/habit)
[+] session_count
Auto-tracked oleh Firebase SDK
Wave 0
feature_selected
existing
User mengetuk fitur dari beranda atau menu.
feature_name (quran/salat/zakat/dll)
source (home/menu/search)
[+] user_segment
Tap puck grid atau bottom nav item
Wave 0
quran_started
existing
User mulai membaca Qur'an (buka reader).
surah_id, ayah_start
is_resume (true/false)
[+] entry_source (home/bridge_a/direct)
Buka reader ayat pertama kali dalam sesi
Wave 0
prayer_time_viewed
existing
User melihat jadwal salat.
city, prayer_name (subuh/dll)
minutes_until_prayer
[+] notification_on (true/false)
Screen Jadwal Salat dibuka
Wave 0
donation_initiated
existing
User mulai proses donasi (tap button donasi).
campaign_id, campaign_type (donasi/zakat/qurban/sedekah_subuh)
amount_selected
[+] payment_method (qris/va/saldo)
Tap CTA "Sedekah/Donasi/Bayar"
Wave 0
donation_completed
existing
Donasi berhasil diproses.
campaign_id, amount
payment_method
is_recurring (true/false)
[+] days_since_first_donation
Konfirmasi sukses dari payment gateway
Wave 0
ktam_iuran_attempted
existing
User mencoba membayar iuran.
month, amount
payment_method
[+] va_error (true/false)
[+] fallback_used (none/qris/transfer)
Tap button bayar iuran
Wave 0

§4New Events — 21 event yang harus diimplementasi

Dikelompokkan berdasarkan wave implementasi. Semua event baru menggunakan naming convention Firebase GA4.

Wave 0 — Bug & Trust (5 events)

Event NameDeskripsiPropertiesTriggerWave
iuran_va_error
new
VA gagal dibuat — event P0 utama untuk monitor bug.
error_code
payment_provider
retry_count
fallback_shown (true/false)
Saat API VA return error atau timeout >3s
Wave 0
iuran_payment_success
new
Iuran berhasil dibayar. Pair dengan iuran_va_error untuk hitung success rate.
month, amount
payment_method (qris/va/transfer)
is_on_time (true/false)
Payment gateway confirm sukses
Wave 0
notification_permission_result
new
Hasil dialog izin notifikasi OS. Kritis untuk audit grant rate.
result (granted/denied/dismissed)
trigger_screen (onboarding/settings)
is_primer_shown (true/false)
Callback dari OS permission dialog
Wave 0
notification_setting_changed
new
User mengubah setting notifikasi per kategori. Monitor apakah user mematikan notif setelah menerima.
category (adzan/sedekah/iuran/event)
new_state (on/off)
days_since_install
Toggle diubah di Settings > Notifikasi
Wave 0
nbm_sync_result
new
Hasil sinkronisasi NBM dengan database PP Muhammadiyah.
result (success/not_found/timeout/error)
sync_duration_ms
Proses sinkronisasi NBM selesai
Wave 0

Wave 1 — Activation (5 events)

Event NameDeskripsiPropertiesTriggerWave
onboarding_segment_selected
new
User memilih salah satu dari 3 segmen di onboarding. Ini menentukan seluruh experience.
segment (kader/muslim/habit)
time_to_select_sec
is_first_install (true/false)
Tap pilihan segmen di P-03
Wave 1
onboarding_completed
new
User selesai onboarding (mencapai homepage untuk pertama kali).
segment, duration_sec
notification_granted (true/false)
location_granted (true/false)
steps_completed (1-4)
Homepage pertama kali ditampilkan post-install
Wave 1
onboarding_skipped
new
User menekan "Lewati" di salah satu step onboarding.
skipped_step (thesis/segment/permission)
reason_if_known
Tap "Lewati" di onboarding screens
Wave 1
first_habit_action
new
"Aha moment" — aksi habit pertama dalam sesi pertama. Indikator aktivasi terkuat.
action_type (quran_read/prayer_viewed/doa_viewed/sedekah)
session_number
minutes_since_install
Aksi habit pertama dalam 24 jam pertama install
Wave 1
home_banner_tapped
new
User mengetuk banner promo/campaign di homepage. Monitor CTR campaign.
campaign_id, campaign_type (qurban/sedekah/event)
position (top/middle/bottom)
user_segment
Tap banner di zone CAMPAIGN homepage
Wave 1

Wave 2 — Engagement / Habit (6 events)

Event NameDeskripsiPropertiesTriggerWave
bridge_a_triggered
new
Bridge A ditampilkan — "Lanjut baca Qur'an?" setelah lihat jadwal salat Subuh.
prayer (subuh/dll), minutes_until
quran_resume_available (true/false)
Card Bridge A muncul di halaman Jadwal Salat
Wave 2
bridge_a_accepted
new
User mengetuk Bridge A → pindah ke Qur'an reader.
prayer, surah_resume
time_to_tap_sec
Tap "Lanjut baca Qur'an" di Bridge A card
Wave 2
quran_session_completed
new
User menyelesaikan sesi baca ≥10 ayat (threshold Bridge B).
surah_id, ayat_read_count
duration_sec, has_resume_point (true/false)
tafsir_viewed_count
entry_source (bridge_a/direct/home)
User membaca ≥10 ayat dan mengakhiri sesi
Wave 2
bridge_b_shown
new
Bridge B outro ditampilkan setelah ≥10 ayat.
ayat_read, surah_id
sedekah_subuh_active (true/false)
Outro screen muncul setelah sesi Qur'an ≥10 ayat
Wave 2
bridge_b_converted
new
User dari Bridge B lanjut ke Sedekah Subuh. Conversion rate Bridge B adalah metric kunci.
ayat_read, amount_selected
time_to_convert_sec
Tap "Sedekah" di Bridge B outro screen
Wave 2
habit_streak_recorded
new
Streak hari bertambah. Untuk monitor engagement habit.
habit_type (quran/sedekah/salat)
streak_days, is_new_record (true/false)
Setiap hari user melakukan aksi habit setelah hari sebelumnya
Wave 2

Wave 3 — Trust + Retention (3 events)

Event NameDeskripsiPropertiesTriggerWave
sedekah_subuh_setup
new
User mengkonfigurasi Sedekah Subuh recurring. Indikator long-term commitment.
amount, program_type (anak_yatim/santri/dll)
payment_method
is_recurring (true/false)
source (bridge_b/fab/settings)
User menyimpan konfigurasi Sedekah Subuh
Wave 3
donation_impact_viewed
new
User melihat impact card / laporan setelah donasi. Indikator trust terbentuk.
campaign_id, impact_type (photo/text/stats)
time_spent_sec
Impact card / section laporan ditampilkan dan user scroll/tap
Wave 3
zakat_calculated
new
User menyelesaikan kalkulator zakat (dengan atau tanpa lanjut bayar).
zakat_type (fitrah/maal/penghasilan)
amount_calculated, converted_to_payment (true/false)
payment_amount
Hasil kalkulator ditampilkan
Wave 3

Wave 4–5 — Expand + Polish (2 events)

Event NameDeskripsiPropertiesTriggerWave
event_registered
new
User mendaftar event organisasi.
event_id, organizer_pcm
days_until_event
registration_method (app/form)
Tap "Daftar hadir" + konfirmasi sukses
Wave 4
chathpt_query_sent
new
User mengirim pertanyaan ke ChatHPT.
query_category (zakat/ibadah/muamalah/dll)
query_length_chars
response_source (tarjih/hadits)
converted_to_action (true/false)
Query terkirim dan response diterima
Wave 5

§5Conversion Funnels — 5 funnel yang harus dibuat

Funnel 1: Onboarding → First Habit Action

Step
Event
Expected
Action if low
Install
app_install (auto)
100%
Segment Selected
onboarding_segment_selected
≥85%
Simplify P-03
Notif Granted
notification_permission_result(granted)
≥60%
Improve primer copy
Onboarding Complete
onboarding_completed
≥80%
Check skipped_step distribution
First Habit Action
first_habit_action
≥50%
Strengthen beranda segment targeting

Funnel 2: Jadwal Salat → Qur'an (Bridge A)

Step
Event
Expected
Action if low
Salat Screen Open
prayer_time_viewed
100% baseline
Bridge A Shown
bridge_a_triggered
≥70%
Check Subuh timing logic
Bridge A Accepted
bridge_a_accepted
≥20%
Test copy variation A/B
Qur'an Session ≥10 ayat
quran_session_completed
≥40%
Check resume functionality

Funnel 3: Qur'an → Sedekah (Bridge B)

Step
Event
Expected
Action if low
Qur'an Session ≥10 ayat
quran_session_completed
100% baseline
Bridge B Shown
bridge_b_shown
≥95%
Check timing logic
Bridge B Converted
bridge_b_converted
≥15%
Test amount defaults A/B
Donation Completed
donation_completed
≥80%
Check payment flow friction

Funnel 4: Iuran Payment (Bug Monitor)

Step
Event
Expected
Action if low
Iuran Attempted
ktam_iuran_attempted
100% baseline
VA Error
iuran_va_error
≤5% target
P0 bug → escalate to dev immediately
Fallback Used
iuran_va_error(fallback_used=qris)
≥70% of errors
Improve recovery UX if low
Payment Success
iuran_payment_success
≥95%
P0 if below — stop release

Funnel 5: Donation Completion

Step
Event
Expected
Action if low
Donation Initiated
donation_initiated
100% baseline
Amount Selected
donation_initiated(amount≠null)
≥85%
Add more amount options or lower default
Payment Confirmed
donation_completed
≥75%
Simplify payment step
Impact Viewed
donation_impact_viewed
≥50%
Add impact card post-payment

§6Implementasi — Flutter + Backend

Flutter — cara log event

// lib/analytics/masa_analytics.dart import 'package:firebase_analytics/firebase_analytics.dart'; class MasaAnalytics { static final _analytics = FirebaseAnalytics.instance; // §3 Existing — extend dengan property baru static logFeatureSelected({ required String featureName, required String source, String? userSegment, }) => _analytics.logEvent(name: 'feature_selected', parameters: { 'feature_name': featureName, 'source': source, if (userSegment != null) 'user_segment': userSegment, }); // §4 Wave 0 — Bug monitor static logIuranVAError({ required String errorCode, required String paymentProvider, required int retryCount, required bool fallbackShown, }) => _analytics.logEvent(name: 'iuran_va_error', parameters: { 'error_code': errorCode, 'payment_provider': paymentProvider, 'retry_count': retryCount, 'fallback_shown': fallbackShown, }); // §4 Wave 2 — Habit loop static logBridgeBConverted({ required int ayatRead, required int amountSelected, required int timeToConvertSec, }) => _analytics.logEvent(name: 'bridge_b_converted', parameters: { 'ayat_read': ayatRead, 'amount_selected': amountSelected, 'time_to_convert_sec': timeToConvertSec, }); }

Firebase Console — setup funnels

Setup di Firebase Console → Analytics → Funnels:
1. Buat funnel "Onboarding → Habit" dengan 5 steps dari §5 Funnel 1
2. Buat funnel "Bridge B Conversion" untuk monitor Qur'an → Sedekah rate
3. Set Alert: iuran_va_error rate > 5% → Slack notification otomatis
4. Custom Dashboard: tambah 4 cards dari §2 KPI Dashboard ke Firebase Dashboard

Backend (Laravel) — server-side events

// app/Services/AnalyticsService.php class AnalyticsService { public function trackPaymentResult( string $userId, string $paymentType, bool $success, string $errorCode = null ): void { // Server-side event untuk verifikasi payment // Lebih akurat dari client — tidak bisa di-block FirebaseAnalytics::logServerEvent( userId: $userId, eventName: $success ? 'iuran_payment_success' : 'iuran_va_error', params: [ 'payment_type' => $paymentType, 'error_code' => $errorCode, 'server_verified' => true, ] ); } }

Akhir dokumen · Analytics Event Spec · MASA by LabMu · 12 Juni 2026

Index Acceptance Criteria →