143 lines
6.4 KiB
Markdown
143 lines
6.4 KiB
Markdown
# Jamshalat Diary — Handoff Document
|
||
|
||
> Last updated: 2026-03-15
|
||
|
||
---
|
||
|
||
## Current State
|
||
|
||
The app is a Flutter-based Islamic daily companion with two operating modes:
|
||
|
||
- **Mode Lengkap** — Full features with 5 tabs: Beranda, Jadwal, Ibadah, Laporan, Alat
|
||
- **Mode Simple** — Streamlined with 5 tabs: Beranda, Jadwal, Tilawah, Murattal, Zikir
|
||
|
||
### Routing Architecture
|
||
|
||
Routes are defined in [router.dart](file:///Users/dwindown/CascadeProjects/jamshalat-diary/lib/app/router.dart). Key design:
|
||
|
||
- **Dual route paths** — Quran, Murattal, and Dzikir each exist as:
|
||
- Top-level routes (`/quran`, `/dzikir`) for Simple Mode bottom bar tabs
|
||
- Nested routes (`/tools/quran`, `/tools/dzikir`) for Full Mode Alat sub-screens
|
||
- **`parentNavigatorKey: _rootNavigatorKey`** — Used on routes that should **hide** the bottom nav bar (settings, qibla, murattal playback, all `/tools/*` sub-screens)
|
||
- **`isSimpleModeTab` flag** — Passed to screen widgets to control back button visibility
|
||
- **`ValueListenableBuilder`** — Wraps [_ScaffoldWithNav](file:///Users/dwindown/CascadeProjects/jamshalat-diary/lib/app/router.dart#174-259) and [AppBottomNavBar](file:///Users/dwindown/CascadeProjects/jamshalat-diary/lib/core/widgets/bottom_nav_bar.dart#10-108) to reactively update tabs when mode is toggled
|
||
|
||
### ⚠️ Critical: Hive Key Convention
|
||
|
||
Settings are stored under the Hive key **`'default'`**, NOT `HiveBoxes.settings`. This was a bug that was fixed across 7 files. Always use:
|
||
|
||
```dart
|
||
box.get('default')?.simpleMode ?? false;
|
||
```
|
||
|
||
### Completed Features (Steps 1–13)
|
||
|
||
| Step | Feature |
|
||
|---|---|
|
||
| 1 | myQuran Sholat API integration + Hive caching |
|
||
| 2 | EQuran.id API for Quran list, reading, audio, Ayat Hari Ini |
|
||
| 3 | Full Bahasa Indonesia localization |
|
||
| 4 | Ibadah Harian revamp (ShalatLog, TilawahLog, DzikirLog, PuasaLog) |
|
||
| 5 | UX/UI polish (Rawatib info, Kiblat compass, AppBar consistency) |
|
||
| 6 | Gamification point system |
|
||
| 7 | Tilawah active session tracker with cross-surah diff |
|
||
| 8 | Quran bookmarks (Last Read + Favorit Ayat) |
|
||
| 9 | Per-ayat audio playback |
|
||
| 10 | Full surah Murattal player with Qari selector |
|
||
| 11 | Murattal playlist navigation + auto-play next |
|
||
| 12 | Mode Hafalan (loop ayat range) |
|
||
| 13 | Murattal screen enhancements |
|
||
| — | Simple Mode / Full Mode dynamic routing |
|
||
| — | Lucide Icons migration |
|
||
| — | Live search debouncer |
|
||
| — | Bottom nav bar dynamic tabs |
|
||
|
||
---
|
||
|
||
## New API: muslim.backoffice.biz.id
|
||
|
||
Base URL: `https://muslim.backoffice.biz.id`
|
||
|
||
### A. Replacement — Migrate Data Sources
|
||
|
||
Replace current EQuran.id and local JSON with the user's own API for better control and reliability.
|
||
|
||
| Current Source | New Endpoint | Notes |
|
||
|---|---|---|
|
||
| EQuran.id Surah list | `GET /v1/quran/surah` | Includes `audio_url` (Mishari Alafasy) |
|
||
| EQuran.id Ayat per surah | `GET /v1/quran/ayah/surah?id={surahId}` | Arab, latin, translation, per-ayat audio, juz, page, hizb |
|
||
| Local dzikir JSON | `GET /v1/dzikir?type={pagi\|sore\|solat}` | Adds Dzikir Sesudah Sholat |
|
||
| EQuran.id random ayat | `GET /v1/quran/ayah/specific?surahId=X&ayahId=Y` | For Ayat Hari Ini |
|
||
|
||
### B. Enrichment — Enhance Existing Screens
|
||
|
||
| Feature | Endpoint | Where |
|
||
|---|---|---|
|
||
| Tafsir Kemenag | `GET /v1/quran/tafsir` | New tab on Quran Reading screen |
|
||
| Kata Per Kata (word-by-word) | `GET /v1/quran/word/ayah?surahId=X&ayahId=Y` | Toggle in Quran Reading screen |
|
||
| Browse by Juz | `GET /v1/quran/juz` | Option in Tilawah screen |
|
||
| Browse by Page (Mushaf) | `GET /v1/quran/ayah/page?id={pageId}` | Option in Tilawah screen |
|
||
| Asbabun Nuzul | `GET /v1/quran/asbab` | Inline on verses that have `asbab` reference |
|
||
| Asmaul Husna | `GET /v1/quran/asma` | Mini-feature in Alat/Beranda |
|
||
| Quran Theme index | `GET /v1/quran/theme` | Browse by Topic in Tilawah |
|
||
| Quran Search by meaning | `GET /v1/quran/ayah/find?query={word}` | Search bar in Tilawah screen |
|
||
|
||
### C. New Screens
|
||
|
||
Each new screen should be:
|
||
- Added to the **Alat** screen grid in Full Mode
|
||
- Listed in the **Beranda** Quick Actions in Simple Mode
|
||
- Routed under `/tools/{feature}` (Full Mode, hides bottom bar) and optionally as a top-level route for Simple Mode
|
||
|
||
| Screen | Endpoint | Description |
|
||
|---|---|---|
|
||
| **Kumpulan Doa** | `GET /v1/doa` | Categorized prayers (quran, hadits, harian, ibadah, haji, etc.) with search via `/v1/doa/find?query=X` |
|
||
| **Hadits Arba'in** | `GET /v1/hadits` | 42 Hadits with Arabic + Indonesian, searchable via `/v1/hadits/find?query=X` |
|
||
|
||
---
|
||
|
||
## Implementation Priority
|
||
|
||
### Phase 1: API Service Layer
|
||
- [ ] Create `muslim_api_service.dart` in `lib/data/services/`
|
||
- [ ] Base URL: `https://muslim.backoffice.biz.id`
|
||
- [ ] Implement HTTP client with error handling + caching pattern (similar to `equran_service.dart`)
|
||
|
||
### Phase 2: Replacement (migrate data sources)
|
||
- [ ] Migrate Surah listing to `/v1/quran/surah`
|
||
- [ ] Migrate Ayat reading to `/v1/quran/ayah/surah?id=X`
|
||
- [ ] Migrate Murattal audio URLs to new API `audio_url` field
|
||
- [ ] Migrate Dzikir data from local JSON to `/v1/dzikir?type=X`
|
||
- [ ] Add Dzikir Sesudah Sholat category
|
||
|
||
### Phase 3: Enrichment
|
||
- [ ] Quran Tafsir tab on reading screen
|
||
- [ ] Kata Per Kata toggle on reading screen
|
||
- [ ] Juz browser in Tilawah
|
||
- [ ] Quran search by meaning
|
||
- [ ] Asbabun Nuzul inline display
|
||
- [ ] Asmaul Husna mini-feature
|
||
|
||
### Phase 4: New Screens
|
||
- [ ] Kumpulan Doa screen + route + Alat grid entry + Beranda quick action
|
||
- [ ] Hadits Arba'in screen + route + Alat grid entry + Beranda quick action
|
||
|
||
---
|
||
|
||
## Key Files Reference
|
||
|
||
| File | Purpose |
|
||
|---|---|
|
||
| `lib/app/router.dart` | All navigation routes, dual-path routing, bottom nav logic |
|
||
| `lib/core/widgets/bottom_nav_bar.dart` | Dynamic bottom nav tabs (ValueListenableBuilder) |
|
||
| `lib/features/dashboard/presentation/dashboard_screen.dart` | Beranda with Quick Actions |
|
||
| `lib/features/tools/presentation/tools_screen.dart` | Alat grid |
|
||
| `lib/features/settings/presentation/settings_screen.dart` | Mode toggle (saves to Hive key `'default'`) |
|
||
| `lib/data/local/hive_boxes.dart` | Hive initialization + seed defaults |
|
||
| `lib/data/local/models/app_settings.dart` | Settings model with `simpleMode` field |
|
||
| `lib/data/services/equran_service.dart` | Current Quran API client (to be replaced) |
|
||
| `lib/features/quran/presentation/quran_screen.dart` | Tilawah screen |
|
||
| `lib/features/quran/presentation/quran_reading_screen.dart` | Quran reading |
|
||
| `lib/features/quran/presentation/quran_murattal_screen.dart` | Murattal player |
|
||
| `lib/features/dzikir/presentation/dzikir_screen.dart` | Dzikir counter |
|