Fun Calendar 1.0.1 — editable events and instant achievements
Personal events are now editable, achievements unlock instantly on every tab, favourites show up in the Calendar view, and sharing holiday cards finally works reliably.
First point release since launch. Most of this came straight out of user email — which is the best possible source of a changelog.
What's new
- Edit personal events. Tap any event you created to change its name or emoji. Previously the only fix for a typo was to delete and re-add.
- Pro: custom icons and colours for personal events, so birthdays and anniversaries read differently at a glance.
- Favourites on the Calendar tab. Holidays you starred now surface in the month grid, not just in the Favourites list.
- Achievements unlock instantly — and the toast appears on whichever tab you happen to be on.
Fixed
- Sharing a holiday card no longer fails silently when the render happens off-screen.
- Bigger tap targets throughout, and smoother transitions between the deck and the detail sheet.
Under the hood
The editable-events work meant touching the PersonalEventStore write path. Fun Calendar splits persistence deliberately: SwiftData owns the three user-generated record types, UserDefaults owns everything else. Each store wraps a ModelContext and mirrors into a @Published in-memory copy so SwiftUI reads stay cheap.
Editing turned out to be the case that exposed the mirror going stale — the context was updated, the published copy wasn't, and the row kept rendering the old title until the tab was rebuilt. The fix was to make every mutation funnel through a single apply(_:) that writes and re-mirrors in the same call, rather than letting call sites poke the context directly.
Sixteen locales shipped simultaneously, which is the part that always takes longer than the feature itself.
- #release
- #swiftdata
- #swiftui