docs: architecture tour, docs index, showcase README; ci: Gitea release per tag
All checks were successful
CI / ci (push) Successful in 4m38s
All checks were successful
CI / ci (push) Successful in 4m38s
Documentation pass after the 2.0 milestone:
- docs/ARCHITECTURE.md — principles (provider as single source of truth,
observer-driven UI, JVM-first tests, no network), layer + reminder
mermaid diagrams, navigation (overlay/held-key, no nav lib), and the
provider lessons (recurring-write invariants, conflict snapshots)
- docs/README.md — map of what documentation lives where, incl. the
convention that superpowers/ plans are historical artifacts while
.planning/ stays current
- README.md — showcase layout (centered header, badges, screenshot
gallery from the fastlane assets, grouped features, install/build/
architecture/roadmap sections); renders on Gitea
- .planning/{PROJECT,REQUIREMENTS,STATE}.md unstaled: read-only-V1 talk
removed, V1/V2 checklists marked shipped, state points at v3 + the
Locations & People go/no-go
release.yaml gains a gitea-release job: on every tag push it extracts the
tag's CHANGELOG section and creates a Gitea release with it as the notes.
No APK assets — distribution stays with the F-Droid repo. Idempotent
(skips an existing release), gated on the test job only so notes appear
even when the F-Droid upload hiccups.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -2,11 +2,12 @@
|
||||
|
||||
## What This Is
|
||||
|
||||
A modern Material 3 Expressive Android calendar app, read-only V1. Lives
|
||||
entirely on top of Android's `CalendarContract` — any calendar synced to the
|
||||
device (CalDAV via DAVx5, Google, local, WebCal, …) shows up automatically.
|
||||
The differentiator is visual: real Material 3 Expressive design that no
|
||||
existing FOSS calendar app delivers.
|
||||
A modern Material 3 Expressive Android calendar app. Lives entirely on top
|
||||
of Android's `CalendarContract` — any calendar synced to the device (CalDAV
|
||||
via DAVx5, Google, local, WebCal, …) shows up automatically; creating,
|
||||
editing, and deleting writes straight back, and reminders are delivered by
|
||||
the app itself (Etar model). The differentiator is visual: real Material 3
|
||||
Expressive design that no existing FOSS calendar app delivers.
|
||||
|
||||
## Core Value
|
||||
|
||||
@@ -15,8 +16,10 @@ re-inventing the calendar sync stack — leave that to DAVx5 and the system.
|
||||
|
||||
## Current Milestone
|
||||
|
||||
**v0.1 — Foundation & CI:** Buildable Android project scaffold with theme,
|
||||
icon, i18n, Hilt, DataStore, green CI.
|
||||
Milestones 1 (read, v1.0) and 2 (write support, v1.1–v2.0.0 incl. reminder
|
||||
delivery) are **complete** — v2.0.0 shipped 2026-06-11. Next is v3.0
|
||||
(power-user features) plus an undecided "Locations & People" idea backlog;
|
||||
see `ROADMAP.md`.
|
||||
|
||||
## Stack
|
||||
|
||||
@@ -26,9 +29,8 @@ Expressive 1.5.0-alpha21 (alpha is intentional — Expressive APIs only
|
||||
live in the 1.5 alpha line). Hilt 2.59.2, DataStore. Gradle Kotlin DSL
|
||||
with Version Catalog. AGP 9.1.1, Gradle 9.5.1. JVM target 17.
|
||||
|
||||
Read-only V1, write support V2.
|
||||
|
||||
Android-only (minSdk 29, targetSdk 36). No iOS.
|
||||
Android-only (minSdk 29, targetSdk 36). No iOS. No `INTERNET` permission —
|
||||
any feature that would need one is an explicit product decision first.
|
||||
|
||||
## Naming
|
||||
|
||||
|
||||
@@ -2,39 +2,43 @@
|
||||
|
||||
See full design spec: `docs/superpowers/specs/2026-06-08-calendar-app-design.md`
|
||||
|
||||
## V1 Scope (Variant "B")
|
||||
## V1 Scope (Variant "B") — shipped in full (v1.0.0, 2026-06-11)
|
||||
|
||||
### Validated (shipped)
|
||||
- Foundation & CI infrastructure — v0.1.0 (2026-06-08)
|
||||
|
||||
### Active (V1)
|
||||
|
||||
- [x] Foundation & CI infrastructure
|
||||
- [x] Foundation & CI infrastructure — v0.1.0 (2026-06-08)
|
||||
- [x] Data Layer over `CalendarContract`
|
||||
- [x] Permission flow (`READ_CALENDAR`)
|
||||
- [ ] Month view (S1)
|
||||
- [ ] Week view (S2)
|
||||
- [ ] Day view (S3)
|
||||
- [ ] Event Detail Sheet (S4)
|
||||
- [ ] Multi-Calendar Filter (M3)
|
||||
- [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**
|
||||
- [ ] View-Switcher (M1)
|
||||
- [ ] Settings screen (M4)
|
||||
- [ ] Empty / no-permission / no-calendars states
|
||||
- [ ] German + English localization
|
||||
- [ ] Loading/Failure/Success states per screen (architectural pattern)
|
||||
- [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)
|
||||
|
||||
### Out of Scope (V2+)
|
||||
## 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+)
|
||||
|
||||
- Event create / edit / delete (V2)
|
||||
- Home-screen widget
|
||||
- Full-text search
|
||||
- Quick-add
|
||||
- ~~Custom notifications/reminders (system already handles these)~~ —
|
||||
**reversed:** Calendula targets sole-calendar-app users, so no other app
|
||||
posts reminder notifications. We post them ourselves (Etar model). Planned
|
||||
for v1.4 — see `ROADMAP.md`.
|
||||
- Tablet/foldable-specific layouts
|
||||
- Locations & People ideas (contact picker, OSM autocomplete) — see
|
||||
`ROADMAP.md` idea backlog, undecided
|
||||
- iOS support (Android-only by design)
|
||||
|
||||
## Constraints
|
||||
|
||||
@@ -4,13 +4,10 @@
|
||||
|
||||
## Status
|
||||
|
||||
**Milestone:** v2.0 — Write support (milestone 2, in progress)
|
||||
**Phase:** v1.3.0 (edit event) shipped 2026-06-11 after four on-device
|
||||
review rounds (BYDAY toggles, scoped recurring writes, scope-at-save flip,
|
||||
stale-instances split bugfix). Milestone 2 runs in four slices
|
||||
(`docs/superpowers/plans/2026-06-11-03-write-support.md`); v2.0 (quick-add,
|
||||
conflict dialog, polish) is the remaining slice, v1.4 (reminder
|
||||
notifications) comes first.
|
||||
**Milestone:** 2 (write support) **complete** — v2.0.0 shipped 2026-06-11.
|
||||
**Phase:** between milestones. Next: v3.0 (power-user features) and the
|
||||
go/no-go on the "Locations & People" idea backlog (`ROADMAP.md`). Docs
|
||||
pass done (ARCHITECTURE.md, README overhaul, planning docs refreshed).
|
||||
|
||||
## Progress
|
||||
|
||||
@@ -62,10 +59,22 @@ notifications) comes first.
|
||||
recurring saves park in `SaveUiState.AwaitingScope`, a changed rule drops
|
||||
the "only this event" option
|
||||
|
||||
- [x] v1.4 reminder notifications (shipped 2026-06-11) — exported
|
||||
`EVENT_REMINDER` receiver → `CalendarAlerts` (SCHEDULED & due) →
|
||||
dedicated channel, tap opens detail (singleTop deep link); best-effort
|
||||
FIRED marking; one-time onboarding step requesting `POST_NOTIFICATIONS`
|
||||
with duplicate-reminders warning; Settings mirror. Provider only fires
|
||||
`METHOD_ALERT` rows (AOSP-verified), so email reminders never reach us
|
||||
|
||||
- [x] v2.0 conflict dialog + store polish (shipped 2026-06-11 as v2.0.0) —
|
||||
`EditSnapshot` compare on save (overwrite/discard; deleted → close),
|
||||
quick-add cut, calendar-switch → v3 backlog; F-Droid/README copy
|
||||
refreshed, fastlane screenshots DE+EN captured on-device
|
||||
|
||||
## Next
|
||||
|
||||
1. v1.4 — reminder notifications (essential for sole-app use): `EVENT_REMINDER`
|
||||
receiver + notification channel, `POST_NOTIFICATIONS`, onboarding step with
|
||||
default-on toggle + duplicate-reminder warning (Etar model)
|
||||
2. v2.0 — quick-add sheet, conflict dialog, polish pass, milestone release
|
||||
3. Monitor the F-Droid build/publish for v1.1.0 – v1.3.0
|
||||
1. Decide the "Locations & People" go/no-go (INTERNET permission question)
|
||||
— see `ROADMAP.md` idea backlog
|
||||
2. v3.0 scoping: widget, full-text search, tablet layouts, ICS import,
|
||||
calendar-move
|
||||
3. Monitor the F-Droid build/publish for the v1.4.0 / v2.0.0 tags
|
||||
|
||||
Reference in New Issue
Block a user