ROADMAP.md and STATE.md predate the issue tracker. They were how planning worked before issues and milestones existed, and keeping them means maintaining a second copy of that information by hand — which is why STATE.md still described release/v2.8.0 as the next release, eight minors ago. Issues and milestones say the same thing and can't drift: a milestone maps to its release/vX.Y.Z branch, which is now also how a contributor learns where to target a PR. Both files stay in git history if a past decision needs looking up. Repointed the six references at the tracker: the README's docs list, two rows in the docs map, PROJECT.md's Current Milestone, and REQUIREMENTS.md's idea-backlog pointer. ARCHITECTURE.md's "see the roadmap's idea backlog" now cites the crash reporter's web-issue path instead — a worked example of the no-network rule beats a pointer to a deleted backlog.
53 lines
2.3 KiB
Markdown
53 lines
2.3 KiB
Markdown
# Calendula — Requirements
|
|
|
|
Architecture reference: [`../docs/ARCHITECTURE.md`](../docs/ARCHITECTURE.md)
|
|
|
|
## V1 Scope (Variant "B") — shipped in full (v1.0.0, 2026-06-11)
|
|
|
|
- [x] Foundation & CI infrastructure — v0.1.0 (2026-06-08)
|
|
- [x] Data Layer over `CalendarContract`
|
|
- [x] Permission flow (`READ_CALENDAR`)
|
|
- [x] Month view (S1)
|
|
- [x] Week view (S2)
|
|
- [x] Day view (S3)
|
|
- [x] Event Detail Sheet (S4) — became a full screen, plus full event read (v0.6)
|
|
- [x] Multi-Calendar Filter (M3)
|
|
- [x] Today button (M2) — shipped v0.5; Jump-to-Date **cut from scope**
|
|
- [x] View-Switcher (M1)
|
|
- [x] Settings screen (M4)
|
|
- [x] Empty / no-permission / no-calendars states
|
|
- [x] German + English localization
|
|
- [x] Loading/Failure/Success states per screen (architectural pattern)
|
|
|
|
## V2 Scope — write support, shipped in full (v2.0.0, 2026-06-11)
|
|
|
|
- [x] Write foundation: `WRITE_CALENDAR`, read-only-calendar detection, delete (v1.1)
|
|
- [x] Create event: form, FAB, last-used calendar (v1.2; polish v1.2.1)
|
|
- [x] Edit event: shared form, scoped recurring writes, recurrence picker (v1.3)
|
|
- [x] Reminder notifications (v1.4) — **reversal of the original
|
|
"system handles reminders" assumption:** Calendula targets
|
|
sole-calendar-app users, so it posts reminder notifications itself
|
|
(Etar model), incl. `POST_NOTIFICATIONS` onboarding
|
|
- [x] Conflict dialog on save + store polish (v2.0)
|
|
- Quick-add — **cut from scope** (the prefilled form covers it)
|
|
- Calendar switching while editing — moved to v3 backlog
|
|
|
|
### Out of Scope (V3+)
|
|
|
|
- Home-screen widget
|
|
- Full-text search
|
|
- Tablet/foldable-specific layouts
|
|
- Locations & People ideas (contact picker, OSM autocomplete) — undecided
|
|
- iOS support (Android-only by design)
|
|
|
|
## Constraints
|
|
|
|
- **Tech stack:** Kotlin + Jetpack Compose + Material 3 Expressive, Hilt, DataStore
|
|
- **Tech stack pin:** Hilt 2.59.2 + KSP 2.3.9; Kotlin 2.3.21 (KSP for Kotlin 2.4.0 not released yet). Material 3 pinned to `1.5.0-alpha21` (Expressive APIs only exist in alpha). Re-evaluate when KSP/Material3 stable land.
|
|
- **Platform:** Android 10+ (API 29 minimum), Android 16 (API 36) target
|
|
- **Offline-first:** all data lives in `CalendarContract`; no app-side network
|
|
- **Privacy:** zero telemetry, no analytics
|
|
- **i18n:** German + English from day one
|
|
- **Tests + CI from day one**
|
|
- **License:** MIT
|