Blog
The feature I said no to (and the one I found instead)
A user asked Calendula to sync itself to a plain .ics file. Talking it through in the open turned a "no" into a better, smaller feature — and clarified what the app is actually for.
Why your CalDAV events show sixty shades of the same blue
Two open colour reports on Calendula come from one root — an overstuffed picker on CalDAV calendars and hard-to-read dark event titles — and both trace back to how event colour flows through Android's calendar provider.
The translator who emailed me
I stood up a whole self-hosted Weblate instance to invite translators. A missing email setting silently blocked the first one who showed up — until he emailed me directly. By the next morning: Italian at 40%.
"This event only": the edit that quietly did nothing
Editing a single instance of a recurring event is one of the sharpest edges in the calendar model. A bug in Calendula, and why recurrence makes "just save it" surprisingly hard.
The week my calendar app stopped being just mine
Calendula was a thing I built for myself. Then strangers started relying on it, filing issues, debating design in the comments — and it turned into something with a small community around it.
Compose for widgets, RemoteViews underneath
Jetpack Glance lets you write home-screen widgets in Compose. But it compiles down to RemoteViews — so the old constraints still bite through the nice API. Three Calendula bugs that proved it.
Hello, world
First post — what this site is and how it's built.
Why my calendar app has no internet permission
Calendula can't talk to the network — and that's the whole design. A look at building on Android's CalendarContract instead of reinventing a sync stack.
Open standards as a constraint, not a checkbox
CalDAV, iCalendar, OpenTasks, DecSync — why I treat open standards as a hard boundary for what the Floret apps are allowed to do.