BUILDING.md never mentioned the floret-kit submodule, so its instructions
could not produce a working build — a plain clone fails to configure. It
also understated the SDK requirement: compileSdk is 37, not the "36+" it
claimed. Both matter now that the Codeberg move is meant to make an
outside clone viable.
The docs map advertised superpowers/specs/ and superpowers/plans/, neither
of which exists any more, while omitting BUILDING.md and RELEASING.md.
Dropped the dead rows and listed what is actually there. Purged the
remaining superpowers references in .planning/ and ARCHITECTURE.md's
dangling "see plan 03" the same way — a pointer to a deleted file is worse
than no pointer.
ARCHITECTURE.md still called OptionCard "the app's only sanctioned
selection-dialog style", which the 2026-07-07 flip to full-screen pickers
reversed, and described no layer for floret-kit despite it being a
compiled-from-source composite build. Its CI note credited Gitea Actions;
contributor CI runs on Codeberg now.
PROJECT.md's Source section described the old world outright ("hosted on
self-hosted Gitea") and now records the split: Codeberg canonical, Gitea
build infrastructure.
2.3 KiB
2.3 KiB
Calendula — Requirements
Architecture reference: ../docs/ARCHITECTURE.md
V1 Scope (Variant "B") — shipped in full (v1.0.0, 2026-06-11)
- Foundation & CI infrastructure — v0.1.0 (2026-06-08)
- Data Layer over
CalendarContract - Permission flow (
READ_CALENDAR) - Month view (S1)
- Week view (S2)
- Day view (S3)
- Event Detail Sheet (S4) — became a full screen, plus full event read (v0.6)
- Multi-Calendar Filter (M3)
- Today button (M2) — shipped v0.5; Jump-to-Date cut from scope
- View-Switcher (M1)
- Settings screen (M4)
- Empty / no-permission / no-calendars states
- German + English localization
- Loading/Failure/Success states per screen (architectural pattern)
V2 Scope — write support, shipped in full (v2.0.0, 2026-06-11)
- Write foundation:
WRITE_CALENDAR, read-only-calendar detection, delete (v1.1) - Create event: form, FAB, last-used calendar (v1.2; polish v1.2.1)
- Edit event: shared form, scoped recurring writes, recurrence picker (v1.3)
- 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_NOTIFICATIONSonboarding - 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) — see
ROADMAP.mdidea backlog, 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