The onboarding screen is the first thing a new user sees; it was a bare centred title + body + button. Rebuild it as a proper Material 3 Expressive welcome: - Branded hero reconstructing the launcher mark (slate squircle + foreground vector); the denied state adds a lock badge over the corner - App-name eyebrow, a benefit-led headline, and three trust rows (stays on device / every calendar together / no tracking) with tonal icon chips - Full-width filled CTA with a trailing arrow, pinned in a Scaffold bottom bar clear of the navigation bar; scrollable body for short screens - "Read-only · no internet permission" footnote — accurate: the app declares only READ_CALENDAR - Denied/recovery state reuses the same shell with Open-settings (primary) and Try-again (text) actions - 8dp spacing scale, edge-to-edge insets handled via Scaffold Built with the newly installed material-3 skill's token/component guidance. Resolves the pre-1.0 polish backlog item. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2.7 KiB
2.7 KiB
Calendula — Roadmap
v0.x — Pre-Release
| Version | Milestone | Status |
|---|---|---|
| v0.1 | Foundation & CI | complete |
| v0.2 | Data Layer & Permission Flow | complete |
| v0.3 | Month + Week + Day views, view switcher | complete |
| v0.4 | Event Detail (S4) + humanized recurrence | complete |
| v0.5 | Calendar filter (M3) + Settings (M4) | complete |
| v0.6 | Full event read — surface every readable field | complete |
| v1.0 | Polish pass, F-Droid release | pending |
Delivery ran ahead of the original table: Day view (S3) shipped in v0.3 and Event Detail (S4) in v0.4, so the Filter/Settings milestone became v0.5.
Jump-to-date (the date-picker half of M2) was cut from scope and will not ship. The "Today" half of M2 already shipped in v0.5 (drawer entry).
v0.6 — Full event read
Round out the read-only model so a detail view shows everything the system
actually stores, before write support starts. Scope = CalendarContract
columns we don't yet read/display:
- Reminders (
VALARM) — readCalendarContract.Reminders, list lead times - Status — Confirmed / Tentative / Cancelled (cancelled shown struck-through)
- Availability (
TRANSP) — Free / Busy chip - Attendee extras — role (required / optional / organizer) + the user's own
SELF_ATTENDEE_STATUS - Timezone (
EVENT_TIMEZONE) — shown only when it differs from the device zone - URL —
tappable link cardcut:CalendarContractexposes noEvents.URLcolumn (onlyCUSTOM_APP_URI, an originating-app deep-link). URLs are instead surfaced by linkifying the description text - Access level / class (private / confidential) — small chip (optional, trivial)
All of the above shipped in v0.6.0 (2026-06-11).
Deliberately out of v0.6:
- Recurrence exception / modified-occurrence badges —
Instancesalready resolves correct per-occurrence times for display; this only matters for editing, so it folds into v2 CATEGORIES,ATTACH— not reliably exposed byCalendarContract(provider limitation, not our choice)
v1.0 — First Public Release
All V1 features shipped, polished, on F-Droid. Read-only calendar. Remaining before v1.0: a UI polish/QA pass.
Polish backlog (pre-1.0)
Redesign the initial grant-access (permission) screen— done (Material 3 Expressive onboarding, shipped on the v0.6.0 branch)
v2.0 — Write Support
- Event create / edit / delete via
CalendarContractwrites - Quick-add sheet
- Conflict UX (event modified externally during edit)
v3.0 — Power-User Features
- Home-screen widget
- Full-text search
- Tablet / foldable layouts
- Optional: ICS file import (drag-and-drop)
Order is indicative — community feedback after V1 may re-prioritize.