# Requirements Archive: v1.0 MVP

**Archived:** 2026-06-10
**Status:** SHIPPED

For current requirements, see `.planning/REQUIREMENTS.md`.

---

# Requirements: FamilySync

**Defined:** 2026-06-03
**Core Value:** The household can see and co-edit one color-coded family calendar (shared + each member's personal) and shared lists from a single low-friction PWA — cross-ecosystem, no app store.

## v1 Requirements

Requirements for initial release. Each maps to roadmap phases.

### Authentication & Onboarding

> **Given:** Authelia is already deployed and both household members already have Authelia accounts. Auth scope is therefore app-side only — register FamilySync as an OIDC confidential client in Authelia and integrate the login flow. No Authelia deployment, no account provisioning.

- [ ] **AUTH-01**: User can log in through Authelia (OIDC SSO) — no separate FamilySync account or password to create
- [ ] **AUTH-02**: User stays logged in across sessions so re-authentication is rare (persistent session)
- [ ] **AUTH-03**: Each member maps to a stable identity (OIDC `iss`+`sub`) and is assigned a consistent per-member color

### Calendar

- [ ] **CAL-01**: App reads the shared family Fastmail calendar via a CalDAV broker token and caches it locally (ctag polling)
- [x] **CAL-02**: User sees a unified, color-coded calendar that aggregates every accessible calendar into one view
- [x] **CAL-03**: User can switch between week, month, day, and agenda/list views
- [x] **CAL-04**: User can create a timed or all-day event, written back to the correct Fastmail calendar
- [x] **CAL-05**: User can edit an existing event
- [x] **CAL-06**: User can delete an event
- [x] **CAL-07**: User can create a recurring event and see all its occurrences expanded correctly (single-occurrence editing deferred to v1.x)
- [ ] **CAL-08**: Each member's personal Fastmail calendar is overlaid into the unified view — _spike-gated in Phase 1_; if cross-account CalDAV sharing proves infeasible, v1 falls back to shared-family-only and this moves to v1.x

### Lists

- [x] **LIST-01**: User can create and delete named lists (e.g. Groceries, Gift Ideas)
- [x] **LIST-02**: User can add items to a list, check them off, and delete them
- [x] **LIST-03**: User can reorder items within a list
- [x] **LIST-04**: Both members' list edits appear live for the other member without manual refresh

### Notifications

- [x] **NOTIF-01**: User receives a Web Push reminder before an event starts
- [x] **NOTIF-02**: User receives a Web Push alert when the other member changes a shared list
- [x] **NOTIF-03**: User receives a Web Push alert when an event is added or changed

### PWA & Install

- [x] **PWA-01**: App is installable to the Home Screen on iPhone and Android (web manifest + service worker, served over HTTPS)
- [x] **PWA-02**: First-time users get a guided "Add to Home Screen" prompt (prerequisite for iOS Web Push)

## v1.x Requirements

Deferred to a near-term follow-up release. Tracked but not in the v1 roadmap.

### Calendar

- **CAL-09**: User can edit/delete a single occurrence of a recurring event (RECURRENCE-ID / EXDATE)
- **CAL-10**: User can apply a "this and following" edit to a recurring series
- **CAL-11**: Documentation for subscribing to the Fastmail calendar natively in Apple Calendar via CalDAV (no new code)
- **CAL-12**: Secondary-timezone display toggle for travel

## v2 Requirements

### Display

- **DISP-01**: Always-on wall-display / kiosk dashboard view (Skylight-style)
- **DISP-02**: Upcoming-events / agenda summary widget tuned for the wall display

## Out of Scope

Explicitly excluded. Documented to prevent scope creep. Anti-features sourced from research (`.planning/research/FEATURES.md`).

| Feature                                       | Reason                                                                       |
| --------------------------------------------- | ---------------------------------------------------------------------------- |
| Email features                                | Members keep existing mail clients; never the product's job                  |
| Self-hosted calendar server (Baikal/Radicale) | Fastmail hosts all calendars via CalDAV; one fewer service                   |
| Vikunja / external task backend               | Lists live in MariaDB; cross-ecosystem native task sync is impossible anyway |
| React Native / App Store app                  | PWA delivers app-like UX without publishing overhead                         |
| PostgreSQL                                    | Not in the stack; MariaDB is the database                                    |
| Chores / rewards / star system                | No children in the household; lists cover any task need                      |
| Meal planning / recipe box                    | Separate domain, high cost; grocery list covers the coordination need        |
| Kids / sub-accounts                           | No children; irrelevant                                                      |
| AI email-to-event import                      | Requires email access (out of scope) + LLM backend; privacy risk             |
| RSVP / invite flows (iTIP/iMIP)               | Two people share one calendar; both attend by default                        |
| Event-level comments / photos                 | Two people can text; adds chat/media storage for ~zero value                 |
| Activity feed / audit log                     | Obvious with two users                                                       |
| Multi-household / accounts at scale           | One household, two hardcoded Authelia accounts                               |
| Ads / monetization                            | Self-hosted; no revenue model                                                |
| Complex permissions / role tiers              | Two equal partners with identical write access                               |
| Offline-first with CRDT conflict resolution   | Home WiFi is primary; optimistic updates + retry suffice                     |
| Grocery delivery integration                  | Third-party dependency; not needed                                           |

## Traceability

| Requirement | Phase   | Status   |
| ----------- | ------- | -------- |
| AUTH-01     | Phase 1 | Pending  |
| AUTH-02     | Phase 1 | Pending  |
| AUTH-03     | Phase 1 | Pending  |
| CAL-01      | Phase 1 | Pending  |
| CAL-08      | Phase 1 | Pending  |
| CAL-02      | Phase 2 | Complete |
| CAL-03      | Phase 2 | Complete |
| CAL-04      | Phase 3 | Complete |
| CAL-05      | Phase 3 | Complete |
| CAL-06      | Phase 3 | Complete |
| CAL-07      | Phase 3 | Complete |
| PWA-01      | Phase 3 | Complete |
| PWA-02      | Phase 3 | Complete |
| LIST-01     | Phase 4 | Complete |
| LIST-02     | Phase 4 | Complete |
| LIST-03     | Phase 4 | Complete |
| LIST-04     | Phase 4 | Complete |
| NOTIF-01    | Phase 5 | Complete |
| NOTIF-02    | Phase 5 | Complete |
| NOTIF-03    | Phase 5 | Complete |
| CAL-09      | v1.x    | Deferred |
| CAL-10      | v1.x    | Deferred |
| CAL-11      | v1.x    | Deferred |
| CAL-12      | v1.x    | Deferred |
| DISP-01     | v2      | Deferred |
| DISP-02     | v2      | Deferred |

**Coverage:**

- v1 requirements: 20 total
- Mapped to phases: 20
- Unmapped: 0 ✓
- Deferred (not in v1 scope): 6 — CAL-09…CAL-12 (v1.x), DISP-01/DISP-02 (v2)

---

_Requirements defined: 2026-06-03_
_Last updated: 2026-06-10 — added deferred REQ-IDs (CAL-09…CAL-12, DISP-01/02) to traceability table_
