2.8 KiB
SALAH — prayer times for Casablanca (Xiaomi Watch S4)
Offline prayer-time companion: shows today's six times (FAJR, SHURUK, DHUHR, ASR, MAGHRIB, ISHA) with the next prayer highlighted and a countdown banner.
Status: VERIFIED MATH (matches AlAdhan on 3 reference dates); on-watch render pending user confirmation.
Method
Morocco (Ministry of Habous), matching AlAdhan method=21:
- Fajr 19°, Isha 17° (twilight angles)
- Standard Asr (shadow factor 1× — Maliki default in Morocco)
- Dhuhr = solar noon + 5 min; Maghrib = sunset + 5 min (AlAdhan's baked offsets)
- Location hardcoded: Casablanca 33.5731, −7.5898 · fixed TZ = UTC+1. Ramadan clock changes are not handled by this version.
All computation happens on the watch — no GPS, no network. Pure solar math
(same Meeus approach as the sundial) lives in src/common/prayer.js.
Screen (v0.6)
- Restores the exact native list markup, row styles and page logic from v0.3, which the user confirmed scrolled smoothly on their watch
- Removes ALL scroll handlers, zoom logic and dynamic font-style bindings
- Fixed 28px prayer names and 36px times, side by side in 80px rows
- Pure black background; enlarged 50px header clock; no swipe hint
- Next-prayer countdown above the list; normal system back exits
The user reported v0.4 and v0.5 lag during swiping (not only when stopping).
tests/native-scroll.cjs verifies parity with the smooth v0.3 baseline and
absence of the zoom path. v0.6 tests/build pass; device smoothness still needs
confirmation. Old preview images document earlier releases, not v0.6.
Project layout
src/
├── app.ux, manifest.json # com.ilias.salah, watch, designWidth 466
├── common/
│ ├── prayer.js # times/format/nextPrayer/formatCountdown — pure, unit-tested
│ └── icon.png # 192×192 circular icon (user-supplied mosque art)
└── pages/index/index.ux # layout + update loop
tests/
├── prayer.cjs # 10 tests vs AlAdhan reference times (3 dates)
├── page.cjs # 11 wiring/layout tests (incl. chord-fit assertions)
├── make_icon.py # icon conversion pipeline (disc detect → round mask → 192²)
└── check-rpk.py # verifies icon/manifest inside the built .rpk
Build & test
npm ci
npm run release
node tests/prayer.cjs
node tests/page.cjs
node tests/amoled.cjs
node tests/native-scroll.cjs
Install
Side-load dist/com.ilias.salah.release.*.rpk via AstroBox.
Releases: https://gitea.oimcloud.myaddr.tools/codex-bot/vela-salah
Accuracy note
Verified against AlAdhan API (method 21) for 2026-09-09, 2026-01-15, 2026-07-01 — all six times within 2 minutes on every date. Tolerance covers the low-precision solar vector (±0.01°) plus rounding.