Entry point: main.py
┌────────────┐ ┌────────────┐ ┌────────────┐
│ Client │ │ App Engine │ │ Firestore │
└─────┬──────┘ └─────┬──────┘ └─────┬──────┘
│ │ │
├───┐ │ │
│ │ Wake │ │
│◀──┘ │ │
│ │ │
│ /epd (Key, Size) │ │
├───────────────────▶├─┐ Schedule (User) │
│ │ ├─────────────────▶├─┐
│ │ │ │ │
│ │ │ User Data │ │
│ Content Image │ │◁ ─ ─ ─ ─ ─ ─ ─ ─ ┼─┘
│◁ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┼─┘ │
│ │ │
├───┐ │ │
│ │ Display │ │
│◀──┘ │ │
│ │ │
│ /next (Key) │ │
├───────────────────▶├─┐ Schedule (User) │
│ │ ├─────────────────▶├─┐
│ │ │ │ │
│ │ │ User Data │ │
│ Sleep Time │ │◁ ─ ─ ─ ─ ─ ─ ─ ─ ┼─┘
│◁ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┼─┘ │
│ │ │
├───┐ │ │
│ │ Sleep │ │
│◀──┘ │ │
│ │ │
┌────────────┐ ┌────────────┐ ┌────────────┐ ┌────────────┐
│ Client │ │ App Engine │ │ Firestore │ │ Browser │
└─────┬──────┘ └─────┬──────┘ └─────┬──────┘ └─────┬──────┘
│ │ │ │
├───┐ │ │ │
│ │ Wake │ │ │
│◀──┘ │ │ │
│ │ │ │
│ /epd (Key, Size) ├─┐ Schedule (User) │ │
├───────────────────▶│ ├─────────────────▶├─┐ │
│ │ │ │ │ │
│ │ │ Error │ │ │
│ Settings URL Image │ │x ─ ─ ─ ─ ─ ─ ─ ─ ┼─┘ │
│◁ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┼─┘ │ │
│ │ │ │
├───┐ │ │ │
│ │ Display │ │ │
│◀──┘ │ │ Settings URL │
│ │ │ ○─────────────▶├─┐
├───┐ │ │ │ │
│ │ Sleep │ │ User Data │ │
│◀──┘ │ │◁ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┼─┘
│ │ │ │
┌──┴────────────────────┴────────────────────┴────────────────────┴──┐
│ │
│ Regular Flow │
│ │
└──┬────────────────────┬────────────────────┬────────────────────┬──┘
│ │ │ │