Synology tasks were not syncing because tsdav defaulted to VEVENT only.
Added explicit VTODO comp-filter to the CalDAV REPORT request.
Removed debug logging from sync routes.
v1.15.9
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Provider icon is now a sibling flex item inside .weekly-task-text
(same level as checkbox), not nested inside the title text span.
Larger size (11px) and higher opacity (0.6) for better visibility.
v1.15.8
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Tasks created locally in a synced someday list may not have
externalProvider set (if the sync to Google/etc failed). Now when
moving such a task to a weekday slot, the provider is inherited
from the source list and persisted to the DB.
v1.15.7
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Place the provider logo (Google/Microsoft/Apple/Synology) right after
the task title text so it's always visible and not hidden by the
task-actions toolbar. Only shown on weekday slots, not in someday area.
v1.15.5
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Use bottom: 100% instead of fixed top offset so toolbar always sits
above the task regardless of task height.
v1.15.4
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Show provider-specific icons (Google, Microsoft, Apple, Synology) before and after synced task titles
- Fix someday list reorder drag & drop: stable index calculation with drop indicator line
- Prevent dropping someday lists onto day slots (shows not-allowed cursor)
- Hide recurring button for someday tasks
- Fix Google Tasks subtask duplicates by filtering out child tasks from top-level list
v1.15.0
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Both boot-update.sh and update-server.sh were missing the
cp -r .next/server step, causing middleware-manifest.json
not found errors after deployment.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
v1.14.1
- Move subtask indicator badge outside text span for visibility
- Prevent parent task from hijacking subtask drag events
- Restructure font settings to 2-row layout (font dropdown + size/weight)
- Fix someday horizontal scroll with callback ref wheel handler
- Sync new tasks in Google-linked someday lists to Google Tasks
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
v1.14.0
Add ~30 curated quotes (15 DE + 15 EN) to local quote library. Goal API
now uses local quotes as fallback for all languages, with ZenQuotes only
for English users. Frontend fetchMotivationalQuote also falls back to
local quotes instead of hardcoded English string.
v1.13.0
- Add JSON export/import for all tasks, anyday lists, and projects (Settings > Account > Backup & Restore)
- Add merge and replace import modes with confirmation for destructive replace
- Add resizable notes sidebar with drag handle on left edge
- Add subtask count indicator (indigo pill) on tasks that toggles subtask list
- Add note indicator (amber pill) on tasks that toggles inline notes
- Show Account ID in Settings > Account as read-only identifier
- Fix goal save bug: saved goals matching default text are no longer ignored
- Fix calendar week number using Monday within visible range instead of middle day
- Fix calendar events not appearing instantly by delaying sync refresh 3s
- Grey out URL field when creating events on Google/Outlook calendars
v1.12.0
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add touch-friendly task actions (tap-to-reveal toolbar)
- Add swipe gestures (right=complete, left=delete)
- Add compact mobile header with overflow menu
- Add FAB + bottom sheet for quick task creation
- Add mobile date picker as centered modal
- Add touch feedback CSS (scale on press, no sticky hover)
- Fix Google sign-in by adding allowDangerousEmailAccountLinking
- Fix Google Calendar OAuth using separate 'google-calendar' provider
to avoid collision with NextAuth's Account records
- Update all API routes to support both provider names
v1.11.0
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace input elements with textarea for task editing and creation.
Shift+Enter inserts a newline, Enter saves. Display uses pre-wrap.
v1.10.0
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Mobile fixes:
- Add viewport meta tag (was missing, causing broken mobile rendering)
- Make header nav controls visible on mobile (opacity-0 group-hover was invisible on touch)
- Add touch swipe gestures for day navigation on mobile
- Fix viewDays responsive override after profile load
Bug fixes:
- Fix goal save (WeeklyView used POST but route only had GET/PUT; fix to use PUT, add POST alias)
- Fix body key mismatch (goal → text) in goal save request
Auth & identity (Task 1):
- Add accountNumber (auto-increment) to User model for stable identity
- Fix OAuth flows: pass user CUID in state instead of email
- Google/Outlook callbacks now look up users by ID, not email
- Non-Gmail users can now connect Google Calendar/Tasks
CalDAV performance (Task 5):
- Embed CalDAV object URL in Apple event IDs (caldav::<url>::<uid> format)
- Delete/update now use O(1) direct URL access instead of O(n) full calendar scan
- Optimistic UI removal on delete (no blocking force-refresh)
- Legacy fallback for old-format IDs during transition
Apple Calendar data (Task 2):
- Pass URL, location, recurringEventId, isRecurring through full pipeline
- Add url, recurringEventId, isRecurring to CachedCalendarEvent schema
- Calendar cache now reads/writes all new fields
Projects (Task 6):
- New Project model (name, icon, color, description, order)
- CRUD API at /api/tasks/projects
- Tasks now support optional projectId with cascading nullify
Quotes (Task 4):
- Curated local quote database (50 quotes, DE+EN) with tag filtering
- Preset quote source APIs (ZenQuotes, Quotable, Forismatic, Type.fit)
Fonts (Task 7):
- FontPicker component with searchable dropdown and live preview
- /api/fonts endpoint (Google Fonts API proxy with 24h cache, fallback to 40 popular fonts)
Quick Settings (Task 8):
- QuickSettingsSidebar component (font size, spacing, show completed, start day, show lines)
- New user preferences: showCompletedTasks, showLines, startDayOffset, quoteSourceUrls
v1.9.0
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add responsive CSS breakpoints (480px/768px/1024px)
- Auto-adjust viewDays based on screen width
- Keep time column visible on mobile (compact)
- Add boot-update.sh for auto-update on reboot
- Fix Suspense boundary in verify-email page
- Bump version to 1.7.0
- Email verification: 6-digit code + one-click link on signup
- SMTP integration with nodemailer (lazy-init, auto-detect TLS)
- Verify-email page with 6 input boxes, paste support, auto-submit
- Resend verification with 60s rate limiting
- Block login for unverified email accounts
- Auto-save settings: debounced 800ms save on all profile changes
- Redirect to calendar settings after OAuth connection
- Fix Google Calendar connection display after connecting
- Task actions hover toolbar: fix z-index/overflow clipping on first row
- Make day header sticky with proper stacking context
- Fix Docker build: resolve hooks-rules-of-hooks in GridTaskBlock, add Suspense
boundary for useSearchParams, fix non-root user home dir and prisma binary path
- Add comprehensive DB migrations for missing columns/tables (WeeklyGoal,
CachedCalendarEvent, User settings, SomedayList sync fields, Task subtasks)
- Fix Outlook OAuth redirect using NEXTAUTH_URL instead of request.url
- Fix CalendarEventModal preserving existing event dates (support flat format)
- Fix header z-index layering so goal text doesn't block hover controls
- Convert font size selects to free-form text inputs, add dayHeaderGap setting
- Add goal 2-line clamping with 500px max width
- Fix weekend colors not applying to date elements
v1.6.0
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- 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>