đź”’

Enter passcode

This app is locked.

đź“‹ Call Schedule Assistant

Set up your calendars →
Dr. Lee can't work Riverside on Sep 4 — suggest a swap
Find a swap so I get next Friday off
Who's on backup this week?
Suggest coverage with least disruption and no back-to-back days

1 · Calendar feeds

Paste each calendar's Secret address in iCal format (Google Calendar → Settings → the calendar → “Integrate calendar”). Or paste raw ICS text below if a URL won't load.

Google ICS URLs can't be fetched by a browser directly. Set a proxy prefix (the app appends the encoded ICS URL), or leave URLs blank and paste ICS text per calendar. See the “Paste ICS text” toggles above.

2 · AI suggestions

Calls run from your browser. Your key is stored only on this device (localStorage) and sent directly to the provider you pick.

Passcode

Locks the app on this device. Note: this is a light lock — someone technical could bypass it. For strong protection, host behind server login.

Config backup

Export your setup (calendar URLs, rules, model) to a JSON blob you can save, share, or move to another machine. On export you can optionally include your API key encrypted with a passphrase; import will ask for that passphrase to restore it. The passcode is never exported. Tip: drag & drop an exported .json file onto the window to import it.

Install as app

On iPhone/iPad: Share → Add to Home Screen. On desktop Chrome/Edge: the install icon in the address bar. Runs offline once loaded (calendar refresh needs network).

Rules the assistant follows

These are enforced by the deterministic swap/coverage engine (and told to the AI). The engine is the source of truth — every suggestion is verified against them.

Shift types & hours

  • DS (Day Shift) — titled DS: Name — 08:00–16:00, day only, no overnight.
  • Full on-call — a plain single name — Riverside 28h (08:00 → next-day 12:00), Moreno Valley 24h (08:00 → next-day 08:00). Covers the overnight.
  • Split call — titled Name1/Name2 — Name1 works the day half (08:00–20:00), Name2 the night half (20:00 → next-day 08:00).
  • Backup — 08:00 → next-day 08:00 (24h).

Hard rules (never violated)

  • No leave conflict — never scheduled on a Leave day.
  • No double-booking — can't be in two places at the same time.
  • Overnight rest — whoever works a night (full call, night half, or DS + Backup the same day) can't also work a shift starting the next morning. Two full calls on consecutive days is invalid; night-into-morning is invalid.
  • DS + next-day call is allowed — a DS (ends 16:00) followed by a full call the next day is fine — unless that DS person is also on Backup that day.
  • Location locks — Chernin only Riverside; Laborada only Moreno Valley.

Preferences & soft rules

  • Keep calls intact — most physicians prefer a straight 24h. Swaps trade whole calls for whole calls; splitting a call into day/night is a last resort.
  • Balanced swaps — trade like for like: same shift kind, weekend↔weekend / weekday↔weekday, and same location for calls.
  • DS + Backup move together — if one person holds both a DS and a Backup on the same day, they're reassigned as a pair.
  • Backup next to a call — allowed but discouraged (advisory), not a hard block.
  • Coverage tiers — exhaust each tier before the next: Primary (Washington, Chou, Doti, Chang, Faison, Houston, Chundu, Giang, Sriram) → Per diem (Zentay, Abbasi, Gebrekristos) → Last resort (Chernin, Laborada).
  • Swap vs. coverage — a swap/day-off must be reciprocal (both end even); a sick/out day is one-way coverage.

Add your own free-text preferences under Setup → “Scheduling rules / preferences”. They're passed to the AI alongside these built-in rules.