- Fix All Day checkbox positioning in CalendarEventModal (own row)
- Add provider name to calendar dropdown (Google/Apple/Outlook)
- Optimistic UI updates after event save/delete (no reload needed)
- Force-refresh calendar cache after event mutations
- Reduce background sync interval from 5min to 2min
- Support forceRefresh in background-sync API
- Use shared Prisma singleton in tasks sync route
- Add per-provider task list fetching and sync checkboxes
- Add allDay support to event creation and editing
v1.4.0
When both fetchCalendarEvents and fetchTasks ran in parallel, whichever
finished first would set isSyncing=false, hiding the spinner while the
other was still running. Replaced boolean with a ref-based counter so
the spinner stays visible until all concurrent syncs complete.
v1.3.1
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
New tasks created in synced someday lists are now pushed to Microsoft
To-Do automatically. Added createMsTodoTask() API function, POST
handler on /api/tasks/sync, and frontend wiring to call sync after
local task creation in externally-linked lists.
v1.3.0
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add externalProvider to SomedayList interface and fetch mapping
- Display a small provider icon (Microsoft/Google/Apple) next to the
list title with tooltip showing the sync source
- Icon appears at 50% opacity to stay subtle
v1.2.3
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Apple calendar parser now checks ICAL.js isDate flag and emits
date-only strings (YYYY-MM-DD) for all-day events instead of
full ISO datetime — fixes all-day detection in the frontend
- Calendar events mapper routes date-only Apple events to the
date field instead of always using dateTime
- Manual refresh button now sends forceRefresh=true which makes
the sync endpoint wait for live data instead of returning stale cache
- Automatic background syncs still use fire-and-forget for performance
v1.2.2
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Undo/Redo:
- Add undo/redo stacks tracking task and someday list state snapshots
- Undo/redo buttons appear on hover in header center section
- Keyboard shortcuts: Ctrl+Z (undo), Ctrl+Y / Ctrl+Shift+Z (redo)
- Snapshots taken before addTask, toggleTask, updateTask, deleteTask, toggleTaskRolling
Outlook OAuth fix:
- Redirect through /auth/oauth-complete client-side page instead of directly to /tasks
- Client page calls session.update() to refresh JWT before navigating
- Prevents session loss caused by SameSite cookie policy during cross-origin redirect
Microsoft To-Do import fix:
- Set externalId and externalProvider on SomedayList during import
- Link existing lists missing external metadata on re-import
- Enables pull-sync to find and update tasks in subsequent syncs
v1.2.0
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add isSyncing state to fetchTasks() so spinner shows during task/list loading
- Remove !task.completed filter from getTasksForDate — completed tasks now stay
visible with strikethrough instead of vanishing
- Inject package.json version into NEXT_PUBLIC_APP_VERSION via next.config.js
so the Settings > About tab always shows the current version
v1.1.1
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add dark mode color adjustment helper for category colors
- Support multiple motivational quote source URLs
- Fix text wrapping for tasks/events to prevent horizontal overflow
- Improve someday list item layout for long text
- Add CLAUDE.md with semantic versioning and git workflow rules
- Update test/doc URLs and planning docs
v1.1.0
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Updated globals.css for .time-slot-task and .time-slot-event row
- Removed white-space: nowrap from GridTaskBlock title span
- Added word-wrap: break-word to simple-view columns
- Replaced broken animate-spin Tailwind class with custom weekly-spinner CSS
- Standardized loading indicators across Auth, Tasks, and Calendar settings
- Fixed JSX syntax errors in several components
- Removed bottom-center resize handle from GridTaskBlock
- Ensured hover menu is always visible and unclipped for all task heights
- Widened settings sidebar to 480px for better tab spacing
- Fixed conditional rendering of quote settings in WeeklyView
- Reverted RefreshCcw icon to original CSS loading spinner
- Fixed GridTaskBlock overflow to restore task actions menu visibility
- Implemented motivationalQuote state and fetcher with custom API source setting
- Removed redundant Goal of the Week setting from panel
- Removed boxed background from grid tasks and added hover-only resize handle
- Fixed vertical drop calculation using correct cell sizes
- Aligned time column header perfectly using a structural ghost replica
- Added collision detection to prevent dragging tasks over occupied slots
- Move all-day event position toggle from toolbar into Settings > General tab
- Render current time label in the time column (left of the red dot line)
- Add note icon on tasks with markdownContent, with hover tooltip
- Add English and German translations for all-day position setting
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Adds full OAuth2 flow, bidirectional task sync, calendar event CRUD,
caching with background refresh, and shared token management for
Microsoft/Outlook services. Extracts common token refresh logic into
shared outlook-token.ts utility.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add soft-delete support for tasks with deletedAt field and migration.
Remove Apple Reminders iCloud integration entirely (API routes, lib,
UI modal, and Python script) in favor of CalDAV approach. Add periodic
pull-sync from Google Tasks every 2 minutes with deletion detection.
Fix orphaned someday task rescue and cross-list task toggle/edit.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Replace broken CloudKit/pyicloud Apple Reminders integration with
CalDAV-based approach (getAppleReminderLists, fetchTasks from
apple-calendar.ts) in tasks/lists, tasks/import, and tasks/sync routes
- Restore calendar date picker icon in header for jump-to-date navigation
- Add goalScope field to User model with migration
- Force-dynamic Google OAuth routes to fix redirect issues
- Update Google Tasks client and sync logic
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Fix Google OAuth callback to redirect using NEXTAUTH_URL (prevents session loss behind reverse proxy)
- Create/update Account record during Google OAuth callback so Google Tasks API has access tokens
- Remove legacy CalDAV fallback from Apple Reminders - only use CloudKit (iOS 13+ Reminders app)
- Add debug command to icloud-reminders.py for diagnosing CloudKit connectivity
- Improve profile save error messages to show details
- Add better error logging throughout CloudKit reminders flow
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Save edited quotes as weekly goals on blur (header + settings panel)
- Fresh quote shown when navigating between weeks (no stale cache)
- Add goal font family, size, and weight settings with UI controls
- Lower calendar event z-index so tasks are always draggable on top
- Set line-height: initial on task items for consistent rendering
- Fix Google Tasks auth scope from tasks.readonly to tasks (read/write)
- Add Google Tasks update/delete functions for bidirectional sync
- Sync task renames and deletes back to Google Tasks
- Add goal font fields to Prisma schema and profile API
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add Google Tasks integration and Apple Reminders support
- Add task import/export with list management APIs
- Add goal API for weekly goals
- Add German holidays library
- Add ImportListModal component
- Enhance WeeklyView with major UI improvements
- Enhance CalendarSettings with new connection options
- Add external task fields to database schema
- Add Playwright test suites for auth and tasks
- Add iCloud reminders Python scripts
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Refactored SettingsModal to a slide-in SettingsSidebar
- Added comprehensive preference toggles (Someday, All-Day, Schedule)
- Integrated Google Fonts selection (Headline/Body/Weight)
- Synchronized all preferences with DB and WeeklyView state
- Fixed sidebar positioning and overlay CSS
- Implemented View Transition API for Week Navigation (simultaneous slide-out/slide-in).
- Added Task Action Icons (Notes, Delete) to Time Grid tasks.
- Refactored navigate function to use startViewTransition.
- Updated globals.css with View Transition keyframes and rules.