- Month view now draws multi-day events as continuous bars (lane packing,
per-week column span clipped at week boundaries, +N overflow) instead of a
chip on every day; events bucketed per week once + memoized packing for
smooth scrolling
- Startup: core-splashscreen covers the window from frame 0 (no warm-start
flash); the in-app splash stays until the first events finish loading (loading
starts behind the splash via an early-obtained CalendarViewModel + ready flow),
so you no longer enter a laggy app
- Background load shows a small spinner in the top bar (removed the linear bar)
- Week/Day titles wrap to two smaller lines (no more truncation)
- Event detail opens with a slide+fade animation
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- CalEvent parsing: handle Android's JSONObject.optString JSON-null quirk that
returned the string "null" — this made every event blue (color "null" →
fallback) and showed "null" for empty location/description. Now null-safe.
- Event detail: copy-to-calendar action; calendar row uses a calendar icon
(was identical to the notes icon); empty location/notes rows hidden
- Event editor: copy mode (prefill from an existing event, save as new)
- Settings: hour height, text/line contrast are now button chips (like the
cache range); color picker wraps, shows the current colour and a check mark
- Month scroll perf: precompute a day→events index once per change and only
reload when the visible month actually changes (was filtering every cell
every frame → laggy)
- Splash: dark window/splash background + inset launcher icon (was an ugly
white box on startup)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Month view rewritten as a continuous vertical scroll (iOS-style): no
prev/next buttons, compact fixed-height week rows, month label on the 1st,
top-bar title follows the visible month, Today scrolls back to today
- Long-press a day opens the event editor pre-filled with that date
- Theme: green container/tint colors so the FAB and accents are no longer the
Material default purple
- Event colors: parse #RGB shorthand, and fall back to a stable per-calendar
palette colour instead of a constant blue when the server omits a colour
- Top bar hides prev/next arrows in month view (scroll instead)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Theme primary now the iOS brand green (#20A050), fixed app-wide (was tied
to the server's blue primary_color)
- Launcher icon generated from the iOS AppIcon across all densities;
dropped the placeholder adaptive icon
- PasswordField: eye toggle + brief last-character reveal; used on login,
profile and CalDAV password inputs
- Login now surfaces the server's actual error detail (verified the JSON
contract against the live server; a 401 is a genuine credential mismatch)
- CLAUDE.md: correct prod base URL to calendar.scarriffle.com
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>