# 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 ``` ### Build Release APK ```bash ./scripts/build_release_apk.sh ``` Artifacts will be written to `dist/android/`: - versioned APK: `jamshalat-masjid-screen-v-build.apk` - latest APK copy: `jamshalat-masjid-screen-latest.apk` - checksum file: `*.sha256` - update JSON template: `latest.json.example` ### Android Production Signing Release APKs now require real signing config. Before building: 1. Copy [android/key.properties.example](/Users/dwindown/CascadeProjects/jamshalat-masjid-screen/android/key.properties.example) to `android/key.properties` 2. Fill in your real keystore values 3. Put the keystore file under `android/keystore/` or update `storeFile` accordingly Example: ```properties storePassword=YOUR_STORE_PASSWORD keyPassword=YOUR_KEY_PASSWORD keyAlias=upload storeFile=keystore/upload-keystore.jks ``` Notes: - `android/key.properties` - `android/keystore/` - `*.jks` are ignored by Git and must stay private. The release build now fails fast if signing is not configured, so you cannot accidentally produce another debug-signed production APK. ## 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.