120 lines
3.5 KiB
Markdown
120 lines
3.5 KiB
Markdown
# JamShalat Masjid Screen
|
|
|
|
Smart digital prayer clock and mosque signage app built with Flutter for Android TV boxes and landscape displays.
|
|
|
|
## Purpose
|
|
|
|
This app is meant to run continuously inside a mosque as a full-screen prayer information display. It combines:
|
|
|
|
- live clock and daily prayer schedule
|
|
- pre-adzan and adzan alert states
|
|
- iqomah countdown flow
|
|
- Friday (`Jumat`) special screens
|
|
- black screen during prayer
|
|
- slideshow and branded background support
|
|
- local admin panel for changing mosque identity, timing, and appearance settings
|
|
|
|
The product direction is documented in [PRD.md](/Users/dwindown/CascadeProjects/jamshalat-masjid-screen/PRD.md).
|
|
|
|
## Current Stack
|
|
|
|
- Flutter
|
|
- Riverpod for app state
|
|
- Hive for local persistence
|
|
- `http` for remote APIs
|
|
- `wakelock_plus` for always-on screen behavior
|
|
- `audioplayers` for adzan and iqomah sounds
|
|
|
|
## Current Architecture
|
|
|
|
The current implementation is a pragmatic Flutter app centered around:
|
|
|
|
- `lib/main.dart`: app bootstrap, Hive initialization, fullscreen setup
|
|
- `lib/providers.dart`: clock stream, settings state, screen-state machine, slideshow rotation
|
|
- `lib/data/local/models.dart`: Hive models and adapters
|
|
- `lib/data/services/`: sync, prayer API, background API, sound service
|
|
- `lib/features/home/`: public display screens
|
|
- `lib/features/admin/`: settings/admin panel
|
|
|
|
This is not yet a strict Clean Architecture / MVVM implementation from the PRD. It is a working product foundation optimized for iteration speed.
|
|
|
|
## Implemented Screens
|
|
|
|
- Main screen
|
|
- Slideshow screen
|
|
- Adzan alert screen
|
|
- Iqomah countdown screen
|
|
- Friday preparation screen
|
|
- Friday khutbah screen
|
|
- Black screen during prayer
|
|
- Admin settings screen
|
|
|
|
## Data Sources
|
|
|
|
- Prayer times: MyQuran sholat API
|
|
- Background images: Unsplash API
|
|
|
|
The app is designed to behave offline-first after schedule data has been synced and stored locally.
|
|
|
|
## Assets
|
|
|
|
Included assets currently used by the app:
|
|
|
|
- fonts: Plus Jakarta Sans, Manrope
|
|
- sounds: `beep.mp3`, `3-detik-countdown.mp3`
|
|
- images: app icon and user-configured local slideshow/background images
|
|
|
|
## Local Development
|
|
|
|
### Requirements
|
|
|
|
- Flutter SDK installed and available in `PATH`
|
|
- Android toolchain if building APKs
|
|
|
|
### Run
|
|
|
|
```bash
|
|
flutter pub get
|
|
flutter run
|
|
```
|
|
|
|
### Analyze
|
|
|
|
```bash
|
|
flutter analyze
|
|
```
|
|
|
|
### Test
|
|
|
|
```bash
|
|
flutter test
|
|
```
|
|
|
|
## Current Stabilization Status
|
|
|
|
The app is in a workable development state, but not yet fully stabilized.
|
|
|
|
Known issues at the time of writing:
|
|
|
|
- `test/widget_test.dart` is broken placeholder boilerplate and currently fails `flutter test`
|
|
- Android manifest does not yet declare `INTERNET`, which will block API-dependent features on device
|
|
- there are multiple deprecated `withOpacity` usages reported by `flutter analyze`
|
|
- some placeholders are still hardcoded, including Hijri date text in Friday-related screens
|
|
- README and repo hygiene were incomplete and are being normalized
|
|
|
|
## Immediate Priorities
|
|
|
|
1. Fix test baseline so `flutter test` becomes useful again.
|
|
2. Add Android `INTERNET` permission.
|
|
3. Remove broken placeholders and obvious UI/data defects.
|
|
4. Stabilize schedule sync and runtime state transitions.
|
|
5. Continue feature work from the PRD after the baseline is reliable.
|
|
|
|
## Notes About Git
|
|
|
|
This workspace currently does not contain a local `.git` directory even though a remote repository exists:
|
|
|
|
- `https://git.backoffice.biz.id/dwindown/jamshalat-masjid-screen.git`
|
|
|
|
If needed, the local folder can be attached to that remote in a follow-up step.
|