# Skill Layer — Mobile App

File ini berisi konteks dan asumsi default untuk project bertipe **mobile app** — aplikasi native atau cross-platform untuk iOS dan/atau Android.

---

## Kapan Pakai Skill Ini

Gunakan jika project Anda adalah:
- Aplikasi mobile yang didownload dari App Store / Play Store
- Mobile app yang jadi channel utama (bukan sekedar versi mobile dari web)
- Consumer app, field worker app, atau B2B mobile tool

---

## Asumsi Default yang Langsung Diterapkan

### Framework
- **React Native** (default untuk cross-platform, lebih mudah sharing logic dengan web)
- **Flutter** (jika performa UI menjadi prioritas utama atau tim sudah familiar)
- Native iOS/Android hanya jika ada kebutuhan hardware/OS level yang sangat spesifik

### Backend
- REST API (sama seperti web — satu backend untuk web dan mobile)
- API versioning dari awal (mobile app tidak bisa force-update semua user)

### Auth
- Email + password minimum
- Biometric (Face ID / fingerprint) untuk re-auth setelah session aktif
- Social login (Google minimum, Apple jika ada di iOS)
- Token storage di secure keychain (bukan AsyncStorage plain untuk sensitive data)
- Auto-logout setelah idle period yang bisa dikonfigurasi

### Offline & Network
- Tentukan dari brief: apakah butuh offline capability atau tidak
- Jika field worker app: offline-first dengan sync ketika online
- Jika consumer app: graceful degradation saat offline (bukan error crash)
- Loading skeleton untuk semua async content
- Retry logic untuk network failure

### Push Notification
- Firebase Cloud Messaging (FCM) untuk Android dan iOS
- Notification permission request hanya setelah ada value (tidak di awal onboarding)
- Deep link dari notification ke screen yang relevan

### Performance
- Target: cold start < 2 detik
- Image lazy loading dan compression
- List virtualization untuk long list
- Memory management — hindari retain cycle di subscription/listener

### App Store
- iOS: Apple Developer Program, TestFlight untuk beta
- Android: Google Play Console, internal testing track
- App store screenshots dan description butuh dipersiapkan
- Privacy policy wajib (terutama iOS)

### Update Strategy
- Force update harus bisa dilakukan dari backend (version check di app launch)
- OTA update (CodePush/Expo Updates) untuk hotfix minor tanpa submit ke store

---

## Pertanyaan Tambahan untuk Brief Mobile App

- Target platform: iOS saja, Android saja, atau keduanya?
- Perlu versi web juga? (jika ya, pertimbangkan shared backend)
- Apakah ada fitur yang butuh hardware device? (kamera, GPS, Bluetooth, NFC)
- Butuh offline mode?
- Apakah ada target minimum OS version?
- Model distribusi: App Store publik atau enterprise distribution?

---

## Guardrails Tambahan untuk Mobile App

- Jangan simpan token atau data sensitif di plain AsyncStorage/SharedPreferences
- Semua network call harus handle error state — jangan asumsi selalu sukses
- Jangan hard-code URL, API key, atau credential di kode
- Jangan buat UI yang hanya bisa dipakai di layar besar — selalu test di device kecil
- API yang dikonsumsi mobile harus backward compatible — mobile user tidak bisa selalu update
- Pastikan deep link dan universal link dikonfigurasi dengan benar sebelum submission
