76 lines
2.9 KiB
Markdown
76 lines
2.9 KiB
Markdown
# 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.4)
|
||
|
||
- Pure #000000 AMOLED background
|
||
- Larger 50px clock; no swipe instruction label
|
||
- Prayer names above their times, in fixed 104px native list rows
|
||
- Center magnification: prayer times grow continuously from 30px to 60px as
|
||
their row approaches the physical screen center; names grow from 20px to 28px
|
||
- Scroll viewport 320×264 at x73/y101, centered at y233; 80px end spacers
|
||
- Fixed next-prayer countdown below the list; lavender next-prayer highlight
|
||
- Glyph sizes change without changing row heights, avoiding scroll-position drift
|
||
- 15s clock refresh preserves scroll focus; calculation logic unchanged
|
||
- Normal system back exits; crown support not assumed
|
||
|
||
Automated math/page/focus/layout tests and release build pass. The live scroll
|
||
magnification still needs an on-watch check. `preview-0.4.png` is a static layout
|
||
mock with illustrative times, not a device screenshot.
|
||
|
||
## Project layout
|
||
|
||
```text
|
||
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
|
||
|
||
```bash
|
||
npm ci
|
||
npm run release
|
||
node tests/prayer.cjs
|
||
node tests/page.cjs
|
||
node tests/amoled.cjs
|
||
node tests/focus.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.
|