Automated on-call rotation and SMS notification system for the technical support team.
WhoseOnFirst manages shift assignments and sends daily SMS notifications to on-call team members. The system uses a simple circular rotation to ensure fair, predictable shift distribution across the team.
Key Features:
- Role-based access control (Admin/Viewer)
- Configurable 24-hour and 48-hour shifts
- Automated 8:00 AM CST daily notifications via Twilio
- Manual schedule overrides for vacation/sick coverage
- Drag-and-drop rotation ordering
- Weekly escalation contact summaries
| Component | Technology |
|---|---|
| Backend | FastAPI, Python 3.12 |
| Database | SQLite with SQLAlchemy ORM |
| Scheduler | APScheduler |
| SMS | Twilio |
| Frontend | Vanilla JS, Tabler CSS |
| Container | Red Hat UBI9 (OpenShift compatible) |
- URL:
http://localhost:8900/(dev) orhttp://localhost:8000/(prod) - Default Admin:
admin/Admin123! - Default Viewer:
viewer/Viewer123!
Change passwords immediately after first login.
| Page | Access | Purpose |
|---|---|---|
| Dashboard | All | Current on-call, escalation chain, calendar |
| Team Members | Admin | Add/edit members, drag-drop rotation order |
| Shift Configuration | Admin | Configure shift durations and days |
| Schedule Generation | Admin | Generate rotation schedules |
| Schedule Overrides | Admin | Manual coverage for vacation/sick |
| Notifications | Admin | SMS history and template editing |
| Help | All | Twilio setup guide |
# Development (port 8900)
docker-compose -f docker-compose.dev.yml up -d
# Production (port 8000)
docker-compose up -d- FastAPI - Web framework
- Twilio - SMS delivery
- Tabler - UI components
- Claude - AI-assisted development
Version 1.5.0 · Changelog