Commit Graph

394 Commits

Author SHA1 Message Date
c5dc315f82 feat: sync calendar colors from all providers and add custom recurrence
- Store calendar colors (backgroundColor) from Apple and Synology
  during connection setup
- Auto-refresh missing colors for existing Apple/Synology connections
- Show color dots next to calendar names in settings
- Add "Custom..." recurrence option with interval (every N days/weeks/
  months/years) and day-of-week selection for weekly recurrence
- Generate proper RRULE with INTERVAL and BYDAY for all providers
- Generate proper Outlook Graph recurrence with custom intervals

v1.61.0

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-23 17:35:22 +01:00
1ab98025a6 feat: add Outlook calendar colors and recurrence end date/count
- Fetch and display Outlook calendar colors from Microsoft Graph API
  instead of hardcoded blue
- Add recurrence end options to calendar event modal: Never, On Date
  (UNTIL), or After X occurrences (COUNT)
- Pass recurrence end parameters through to RRULE generation for all
  providers (Google, Apple, Synology, Outlook)

v1.60.0

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-23 17:14:13 +01:00
6fc0ccef74 fix: inline project icons so multi-line text wraps around them
Move project icons from flex siblings into the text span so that
multi-line task titles wrap around the icon instead of leaving
empty space below it.

v1.59.4

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-23 13:58:43 +01:00
b6f5ba42ed fix: show project icons in time grid (GridTaskBlock) view
Add showProjectIcons prop to GridTaskBlock so project icons appear
next to task titles in simple and calendar views, not just list view.

v1.59.3
2026-03-23 13:17:06 +01:00
ccd069ae80 fix: add 'Show Icons for Projects' toggle to settings modal
Per-view setting with translations in all 5 languages (EN, DE, FR, ES, IT).

v1.59.2
2026-03-23 12:45:35 +01:00
b26d710fec fix: move sidebar toggle into header toolbar, left of view switcher
Removes the fixed-position button and places it inline in the desktop
header controls row with matching hover-to-reveal behavior.

v1.59.1
2026-03-23 12:38:38 +01:00
d7eeafb08f feat: add 'Project Icons' toggle to show icons on tasks
New per-view setting to display project icons next to task titles in
simple, calendar, and list views. Toggle via Quick Settings sidebar,
similar to the existing 'Checkboxes' toggle.

v1.59.0
2026-03-23 12:31:19 +01:00
3061ac09d0 fix: add cross icon to icon picker
v1.58.3
2026-03-23 12:27:05 +01:00
301e5f9829 feat: expand icon picker to ~490 icons
Add ~240 more MDI icons covering outdoor/adventure, animals, food/kitchen,
vehicles, tools/construction, fun/toys, lifestyle, sports, and more.

v1.58.2
2026-03-23 12:13:11 +01:00
09ae6d6a2d fix: close project picker on mouse leave and outside click
v1.58.1
2026-03-23 11:15:08 +01:00
9093149f5e feat: improved icon picker with search, FontAwesome and MDI icons
Replace the small grid of ~45 icons with a searchable IconPicker component
featuring ~250 icons from FontAwesome and Material Design Icons. Includes
keyword search, library tabs (All/FA/MDI), and categories covering tech,
home, sports, food, nature, finance, health, and more.

v1.58.0
2026-03-23 11:13:21 +01:00
7e11b261a3 fix: move sidebar toggle button from bottom-left to top-left
v1.57.16
2026-03-23 10:29:38 +01:00
3da2acadf1 fix: project picker dropdown stays visible and above other tasks
Add picker-open class when project picker is shown to keep task-actions
visible even when mouse leaves the task hover area. Elevate z-index on
picker-open tasks so the dropdown isn't obscured by adjacent tasks.

v1.57.15
2026-03-23 10:28:17 +01:00
02ae5a46f8 chore: remove Synology calendar debug logging
v1.57.14

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-23 01:49:21 +01:00
8402adbd45 fix: always full-fetch Google Tasks for linked someday lists
The updatedMin optimization skipped tasks that were missed during
initial sync. Now does a full fetch when a someday list is linked,
ensuring all remote tasks are discovered.

v1.57.13

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-23 01:35:56 +01:00
a009a4953a fix: paginate task sync and unblock connections endpoint
- Google Tasks and Microsoft To-Do sync now paginate through all
  results instead of capping at 100 tasks per list.
- Synology calendar pruning in GET /connections is now fire-and-forget
  so a slow/unreachable NAS doesn't block the entire response.

v1.57.12

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-23 01:11:23 +01:00
a5295c5dd7 fix: retry Outlook API calls on 429 throttling with backoff
Respects Retry-After header when available, otherwise uses
exponential backoff (2s, 4s, 6s) for up to 3 attempts.

v1.57.11

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-23 00:47:52 +01:00
87aeb8ad47 fix: someday list delete buttons obscured by task items below
Raise z-index on the list header when delete confirmation is active
so Cancel/Delete buttons render above the task list items.

v1.57.10

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-23 00:37:24 +01:00
21a0547f3d fix: hide add-task input when someday list delete confirmation is shown
The "Add task..." input was overlapping the Cancel/Delete buttons,
making it impossible to click Delete.

v1.57.9

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-23 00:30:39 +01:00
9e7266053b fix: clean up someday lists and tasks when disconnecting a calendar provider
Unlink external references (externalId, externalProvider, externalListId)
from someday lists and tasks when their associated calendar connection
is deleted, so orphaned entries don't persist in the UI.

v1.57.8

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-23 00:21:16 +01:00
3ec5a21714 fix: Apple Calendar ignoring selection state, causing duplicate events
Apple calendar events were fetched from ALL calendars regardless of the
user's Display checkbox selection. Now respects the stored selected state,
matching the behavior of Synology/Google/Outlook providers.

Also reverts the title-based deduplication which was too aggressive.

v1.57.7

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-23 00:12:28 +01:00
98f1c751e5 fix: deduplicate calendar events appearing in multiple calendars
Events with the same title, start, and end time from different calendars
are now shown only once instead of duplicated in the all-day and time grid.

v1.57.6

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-23 00:03:47 +01:00
af46c0c21f chore: add debug logging for Synology calendar pruning
Log individual calendar names/URLs from server and stale calendar IDs
to diagnose why deleted calendars persist in stored list.

v1.57.5

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-22 23:54:08 +01:00
93e808ddfa fix: auto-prune deleted Synology calendars during event fetch
When a Synology calendar returns 404 during event fetch, remove it from
the stored calendar list instead of silently returning empty results.

v1.57.4

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-22 23:06:02 +01:00
87d78d78b5 fix: handle deleted Google Tasks lists gracefully (404 cleanup)
When a Google Tasks list returns 404 during sync, soft-delete all local
tasks linked to it and unlink the synced someday list instead of spamming
error logs.

v1.57.3

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-22 23:02:16 +01:00
ba19482a41 fix: prune deleted Synology calendars from settings list
When loading calendar connections, the API now fetches the live calendar
list from Synology and removes entries that no longer exist on the server.

v1.57.2

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-22 22:48:06 +01:00
f4451bf011 style: compact day header spacing
Reduce day header padding and tighten line-height on date/weekday elements.

v1.57.1

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-22 22:13:16 +01:00
ee4b540558 feat: add Notion provider integration + Apple Reminders deprecation note
- Notion OAuth integration: start/callback routes, calendar-events dispatch,
  CRUD operations (create/update/delete via Notion API)
- New notion-calendar.ts provider library with database discovery
- Onboarding wizard: expanded to 6 steps (header/tasks/display design),
  improved preview fidelity, universal dummy content, Notion in connect step
- Apple Calendar: label changed to "events only", added warning that
  Reminders are unsupported since iOS 13 (no CalDAV/API from Apple)
- Fixed 12h time format on now-line, wizard settings apply on completion

v1.57.0

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-22 21:02:25 +01:00
4ac73d3e03 feat: onboarding wizard for first-time users + UI fixes
- 6-step onboarding wizard (welcome, language, connect providers,
  view style, work hours, styling) for new signups
- Added hasCompletedOnboarding field to User schema
- Fixed subtask progress bar in GridTaskBlock (simple/calendar views)
- Fixed kanban drag-and-drop to someday area
- Fixed weather/provider icon overlap in time grid tasks
- Provider icon positioning: inline when weather on, top-right when off

v1.56.0

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-22 13:52:29 +01:00
452e1a0eab fix: make subtask progress bar more visible (wider + taller)
Increased progress bar from 24x4px to 36x5px for better visibility
in the task subtask indicator badge.

v1.55.3

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-22 08:43:13 +01:00
1f90526b5b fix: improved subtask expand/collapse in calendar and kanban views
Kanban cards now have inline subtask expand/collapse with progress bar,
chevron toggle, and checkbox list. Calendar view subtask badge updated
to match with ChevronDown icon, highlight when expanded, and wider
progress bar. Consistent UX across both views.

v1.55.2

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-22 08:34:43 +01:00
22a193180b fix: kanban detail modal footer layout - delete left, OK/Cancel right
Move trash icon to lower-left corner, add OK and Cancel buttons
in the lower-right corner.

v1.55.1

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-22 08:29:25 +01:00
ca7911c7ef feat: kanban card detail modal with full task editing
Click any kanban card to open a Trello-style detail modal with:
- Title editing
- Project assignment with dropdown
- Kanban stage selector
- Due date picker
- Someday list assignment
- Markdown notes editor
- Subtask management (add, toggle, edit, delete)
- Task deletion
Responsive design: slides up as bottom sheet on mobile.

v1.55.0

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-21 22:31:10 +01:00
aece7049c0 fix: make kanban cards clickable to open notes/details sidebar
Clicking a kanban card now opens the notes sidebar for editing notes,
subtasks, and other task details. Cards also show subtask count and
notes indicator. Added FileText icon import.

v1.54.1

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-21 19:42:20 +01:00
bce86aeb9b feat: kanban task creation and Google Tasks API quota optimization
Add inline task creation in kanban view columns - creates tasks in a
"Kanban" someday list (or project-named list if filtered by project).
Optimize Google Tasks sync: use updatedMin to fetch only changed tasks,
increase sync interval to 5min, handle 429 quota errors gracefully.

v1.54.0

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-21 19:28:15 +01:00
876bd1047b feat: real-time sync across devices via Server-Sent Events
Adds SSE-based push notifications so changes made on one device
appear instantly on all other connected devices for the same user.

- SSE notification hub (src/lib/sse.ts) with per-user client tracking
- Stream endpoint (/api/events/stream) with 30s heartbeat
- Task and list API routes notify connected clients on mutations
- Client auto-connects with 5s reconnect on connection loss
- Existing 2-minute polling sync remains as fallback

v1.53.0

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-20 07:44:00 +01:00
3c17f6a89d fix: prevent session loading hang from JWT callback DB failure
JWT callback was querying DB on every request which could hang if DB
is slow. Now only queries when token.id is missing, and wraps in
try/catch so session still resolves on DB errors.

v1.52.1

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-19 22:52:44 +01:00
234bb25c1e feat: configurable weather display data per view
Users can now pick which weather data to show per time slot: icon,
temperature, feels like, wind speed, gusts, rain probability,
precipitation, humidity, and UV index. API now fetches all data
from Open-Meteo. Also fixed slot height for 20min duration.

v1.52.0

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-19 22:44:04 +01:00
c4214304af fix: revert adapter session stubbing that broke session loading
The custom adapter wrapper that stubbed session methods was preventing
sessions from loading. Reverted to plain PrismaAdapter - the original
credentials login issue was caused by missing DB columns, not the adapter.

v1.51.6

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-19 22:21:57 +01:00
a1f6166eb5 fix: replace 2h timeslot with 20min option
Timeslot options are now 15min (4/hr), 20min (3/hr), 30min (2/hr),
and 1h (1/hr). Removed the 2h option which didn't make sense.

v1.51.5

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-19 10:14:08 +01:00
b20591108e fix: add migrations for 10 missing User columns
viewSettings, weatherEnabled, weatherLat, weatherLon, weatherLocation,
lightTheme, darkTheme, emailVerificationCode, mobileFontScale, and
notificationsEnabled were in the Prisma schema but never had migrations,
causing all profile saves to fail on the server.

v1.51.4

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-19 09:42:27 +01:00
39c0ac64fc fix: add missing migration for weatherRecentCities column
The weatherRecentCities field was added to the Prisma schema but no
migration was created, causing PrismaClientValidationError on the server.

v1.51.3

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-19 09:30:03 +01:00
918d87cbbb fix: credentials login error and all-day resize bar position
- Fix NextAuth CredentialsProvider + PrismaAdapter conflict by stubbing
  adapter session methods (JWT strategy doesn't use DB sessions)
- Improve login error handling with redirect:false for real error messages
- Move all-day section resize bar to top when allDayPosition is "below"
- Fix resize drag direction for top-positioned all-day handle

v1.51.2

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-19 09:02:26 +01:00
eeabe2c1c5 style: add icons to view style tabs in settings
Match the header view switcher icons (Calendar, CalendarDays, ListTodo,
Kanban) in the settings sidebar tab bar.

v1.51.1

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-19 08:35:50 +01:00
2141332bb3 feat: fix per-view settings persistence and add recent weather cities
Per-view settings (cellDuration, showSomeday, etc.) now persist across
page reloads by using a ref to avoid stale closure bugs in saveViewSetting
and removing global state pollution from per-view onChange handlers.
Weather display fixed to use effectiveWeatherEnabled for fetch/render.
Added weatherRecentCities (max 8) as quick-switch pill buttons.
Kanban checkboxes now respect the showTaskCheckboxes per-view setting.

v1.51.0

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-19 08:32:48 +01:00
a26dc5efa6 feat: view style tabs at top of settings as per-view context
Move view style selector (Simple/Calendar/List/Kanban) to the top
of the general settings tab. Settings below now automatically apply
to the selected view. Replaces the previous per-view badge approach
with a cleaner tab-based UI: switch to a view tab, adjust its
settings — done.

Per-view settings: hour format, sub-hour labels, weather, checkboxes.

v1.50.0

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-18 17:23:18 +01:00
3eff24143c fix: short hour format now shows just the number (8, 9, 10)
The formatHour function was ignoring the format parameter in 24h
mode, always returning HH:MM. Now "short" returns just the hour
number without leading zero or :00.

v1.49.1

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-18 17:17:41 +01:00
4757dc3cdb feat: per-view settings for hour format, sub-hours, weather, checkboxes
Add viewSettings JSON field to User model storing per-view overrides.
Settings like hour label format, sub-hour labels, weather, and task
checkboxes can now be set per view (simple/calendar/list/kanban) or
globally. A clickable badge next to each setting shows "All" (global)
or the current view name (per-view). Click to toggle scope.

Also fixes hourLabelFormat not actually being applied to time column
rendering (was hardcoded, now uses effective per-view value).

v1.49.0

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-18 01:09:36 +01:00
def2c37ddb fix: remove all-day label column in list mode to align with day columns
In list mode there's no time column, so the all-day label was
causing a left offset mismatch. Removed the label so all-day
events grid lines up with the day columns below.

v1.48.3

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-18 00:56:52 +01:00
30f495733d fix: kanban stage delete UX and hide all-day events in kanban
- Use trash icon instead of X for delete button
- Add cancel X next to the red confirm button
- Hide all-day calendar events in kanban view

v1.48.2

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-18 00:51:18 +01:00