Product architecture

How Yah's Way keeps a household's time.

Four engines compose every screen: a multi-framework Calendar Engine, a Vocabulary Substitution layer, location-aware Astronomical calculations, and Sabbath Mode. Below is the data, flow, and rules that make them work together.

System overview

   ┌────────────────────┐      ┌──────────────────────┐      ┌────────────────────┐
   │  Household Profile │─────▶│  Vocabulary Engine   │─────▶│   Render Layer     │
   │  (calendar, vocab, │      │  (token substitution │      │  (mobile/web UI)   │
   │   day-begin, GPS)  │      │   at every string)   │      └──────────┬─────────┘
   └─────────┬──────────┘      └──────────┬───────────┘                 │
             │                            │                             │
             ▼                            ▼                             ▼
   ┌────────────────────┐      ┌──────────────────────┐      ┌────────────────────┐
   │  Calendar Engine   │◀────▶│  Astronomy Service   │◀────▶│  Notification Bus  │
   │  Rabbinic / Lunar  │      │  sunrise/sunset/moon │      │  push, in-app,     │
   │  Enoch / Karaite   │      │  per GPS coordinate  │      │  email (per pref)  │
   └─────────┬──────────┘      └──────────┬───────────┘      └──────────┬─────────┘
             │                            │                             │
             └────────────┬───────────────┘                             │
                          ▼                                             │
                ┌──────────────────────┐                                │
                │   Sabbath Mode       │────────────────────────────────┘
                │   Quiet hours rule   │
                └──────────────────────┘
Calendar Engine

Pluggable framework adapters return the same shape — { sabbathStart, sabbathEnd, newMoon, feastWindows } — so the UI never branches.

  • Rabbinic — fixed sundown rule, Hillel II tables
  • Lunar Sabbath — new-moon anchored weekly cycle
  • Enoch — solar 364-day year, fixed Wednesday New Year
  • Karaite — observation-based New Moon and Aviv barley
Vocabulary Engine

Every translatable string passes through a substitution map. Households edit pairs; the rest of the app instantly reflects their language.

  • Defaults: Yahuah, Yahusha, Torah, Shabbat
  • User-defined pairs override defaults
  • Substitution runs at render — no rebuilt strings persisted
  • Custom pairs respected in push notifications too
Astronomy Service

Pure functions compute sunrise, sunset, twilight, and lunar phase from latitude, longitude, and date. Cached per coordinate for offline use.

  • NOAA Solar algorithm
  • Meeus lunar phase approximation
  • Cache window: 30 days local
  • Falls back to last cached value when offline
Sabbath Mode

Cron-style rule scheduled per household. Triggers quiet UI, mutes notifications, and surfaces the Sabbath welcome screen.

  • Trigger: 18 min before computed sundown
  • Release: 42 min after Saturday sundown (3 stars)
  • Day-beginning override: sunrise / midnight options
  • Manual override available but logged
Sabbath Mode — rule evaluation

  evaluate(household, now):
    framework = household.framework
    coords    = household.gps
    dayBegin  = household.dayBeginning            // Sunset | Sunrise | Midnight

    sabbath   = CalendarEngine[framework].weekly(now, coords, dayBegin)
    if sabbath.start - 18.min <= now < sabbath.end + 42.min:
        return QUIET_HOURS
    if isFeast(framework, now, coords):
        return FEAST_HOURS
    return NORMAL

NORMAL

All features on, notifications respect quiet hours

QUIET_HOURS

Push muted, soft palette, Sabbath welcome surfaced

FEAST_HOURS

Feast content unlocked, prep checklist surfaces

Onboarding → first Sabbath flow
  1. 1

    Choose framework

    Rabbinic / Lunar / Enoch / Karaite

  2. 2

    Day-beginning

    Sunset / Sunrise / Midnight

  3. 3

    Vocabulary

    Set Father, Son, Torah, Sabbath pairs

  4. 4

    Grant location

    GPS → astronomical cache

  5. 5

    First sundown

    Schedule push, surface checklist