# Roadmap

## Phase 1 — Stabilized baseline
Status: **Mostly complete**

- [x] CSS ownership centralized.
- [x] Program/Profile visually stabilized.
- [x] Dashboard cleaned up.
- [x] Calendar rendering fixed.
- [x] Overview improved.
- [x] Core modules introduced.
- [x] Renderers introduced.
- [x] RC89 known-good baseline.

## Phase 2 — Non-video modularization
Status: **Next**

Goal: shrink `app.js` without touching exercise/video.

Planned modules:
```text
assets/js/actions/navigation-actions.js
assets/js/actions/calendar-actions.js
assets/js/actions/program-actions.js
assets/js/actions/profile-actions.js
assets/js/services/program-service.js
assets/js/services/profile-service.js
assets/js/services/calendar-service.js
assets/js/services/progress-service.js
```

Rules:
- Move one action group at a time.
- Keep runtime behavior unchanged.
- Add smoke checks after each extraction.

## Phase 3 — Data/schema hardening
Goal: prepare for admin/server.

Tasks:
- Define canonical IDs for programs, phases, sessions, blocks, exercises.
- Add validation helpers.
- Separate program definitions from exercise library.
- Prepare for media/video references.

## Phase 4 — Exercise player/video design
Do not start before a design discussion.

Topics to decide:
- Where videos are stored.
- How missing videos are recorded/uploaded.
- Local vs server cache.
- Admin workflow.
- iOS playback behavior.
- Offline behavior.
- Preload strategy.
- Completion/progress write rules.

## Phase 5 — Admin/server path
Possible future modules:
- exercise editor
- program editor
- video manager
- upload API
- server sync
- user/auth layer


## RC91 update
- Added `assets/js/services/profile-service.js`.
- Added `assets/js/services/program-service.js`.
- Exercise player/video remains untouched.


## RC92 update
- Added `assets/js/actions/navigation-actions.js`.
- Added `assets/js/actions/calendar-actions.js`.
- Added `assets/js/actions/profile-actions.js`.
- Added `assets/js/actions/program-actions.js`.
- Added `tests/rc92_action_smoke.js`.
- Exercise player/video remains untouched and is the next design boundary.
