Commit Graph

398 Commits

Author SHA1 Message Date
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
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
d1d7c4a7b6 fix: replace browser confirm popup with inline delete confirmation
First click on X shows a red "Confirm" button inline. Second click
deletes the stage and moves all its tasks back to "no phase".
Clicking elsewhere resets the state.

v1.48.1

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-18 00:48:52 +01:00
265eac6f89 feat: inline kanban stage editing, remove from settings sidebar
- Column headers are now editable: click the name to rename, click
  the color dot to change color, hover to reveal delete button
- "+" column at the end to add new stages
- Removed kanban stages section from settings sidebar

v1.48.0

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-18 00:44:56 +01:00
2ca9503944 fix: restore hour/sub-hour label styling in calendar view
The calendar-view time-slot-label override was clobbering the
hour-start font-weight and sub-hour font-size. Now properly
differentiates hour labels (bolder) from sub-hour labels (smaller,
lighter).

v1.47.5

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-18 00:41:01 +01:00
a51f085ee5 style: adjust calendar and simple view spacing per user tweaks
- Calendar: 4px column margin, margin-top:0 on hour-start slots
- Simple: restore hour-start border, add 10px horizontal column margins

v1.47.4

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-18 00:35:29 +01:00
1a9a2dd585 fix: restore time column in simple view and refine TeuxDeux styling
- Remove display:none on time column so it shows again
- Remove all time-slot grid lines for a cleaner look
- Remove vertical column borders (no right borders)
- Bold uppercase headers with subtle bottom border
- Cleaner task items with more padding

v1.47.3

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-18 00:20:48 +01:00
959efc725b fix: remove half-hour lines in calendar view for cleaner Google Calendar look
Only show horizontal grid lines at full hour boundaries, matching
the clean Google Calendar aesthetic from the reference screenshot.

v1.47.2

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-18 00:19:30 +01:00
43f05160c5 fix: merge kanban filter bar and project chips into single row
Put + icon (create project) on far left, followed by project drop
chips, then a spacer, then search/filters on the right — all in
one unified toolbar row.

v1.47.1

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-18 00:16:02 +01:00
855760e39c feat: kanban drag fix, project targets, calendar/simple view polish
- Fix kanban drag: remove confusing card tilt, ensure dragOver always
  calls preventDefault so drops work reliably across all browsers
- Add project drop targets bar in kanban: drag tasks onto project chips
  to assign/unassign projects
- Add "Create Project" button to kanban filter bar
- Right-align kanban filter bar
- Use ProjectIcon (FontAwesome) in kanban cards instead of raw emoji
- Calendar view: Google Calendar-inspired styling (subtle grid lines,
  smaller time labels, cleaner borders)
- Simple view: TeuxDeux-inspired styling (uppercase headers, thick
  bottom border, flat borderless task items, minimal aesthetic)

v1.47.0

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-18 00:10:38 +01:00
c84fd4c60e feat: mobile UX polish — FA icons, weather fix, header swap, sticky fix
- Replace emoji project icons with FontAwesome solid icons (46 icons)
  with proper icon picker grid and legacy emoji fallback
- Fix weather temperature unreadable on mobile (white on white) by
  adding explicit dark/light color
- Fix weekday sticky header on mobile: correct top offset for
  time-grid scroll container, use overflow-x: clip to not break sticky
- Swap mobile header: quick settings (PanelLeftOpen) on left,
  burger menu (settings) on right, remove search icon (available
  in left sidebar)

v1.46.0

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-17 23:57:55 +01:00
183fd6ea48 feat: reorganize mobile UX — projects sidebar, left quick actions, sticky fix
- Create dedicated Projects sidebar (separate from settings) with full
  CRUD, emoji picker, and dark mode support
- Move all quick actions (nav, search, jump to date, calendar event,
  recurring tasks, goal, focus, dark mode, view/days/slot/hours,
  undo/redo/refresh) from right settings sidebar to left quick settings
- Remove projects tab from settings — all project management via sidebar
- Fix iPhone sticky headers: time-column-header no longer sticky on
  mobile, weekly-day-header remains sticky

v1.45.0

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-17 22:57:00 +01:00
62257ff089 fix: restore vertical scrolling on iPhone time grid
Apply maxHeight constraint to time-grid-wrapper on all devices,
not just desktop. iOS Safari needs an explicit height bound for
overflow-y: scroll to work within a flex container.

v1.44.1

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-17 15:27:27 +01:00
36c4652f8e feat: add weather display, projects tab, iPhone today fix, stale calendar fix
- Add weather feature with Open-Meteo API: hourly temp/icon overlay on time slots,
  location search via geocoding, weather toggle in settings
- Move project management to dedicated settings tab with emoji icon picker
- Fix iPhone single-day view starting on yesterday instead of today
- Fix deleted Apple calendar events persisting until app reboot by
  scheduling a delayed re-fetch after stale background sync

v1.44.0

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-17 12:15:25 +01:00
a20f6673ec fix: declutter iPad/tablet header by hiding secondary controls
On tablet (≤1024px), hide days-to-show, time range, slot duration,
and goal/quote from header. Move days and slot controls into the
overflow menu. Only view switcher icons + KW/year + navigation remain
in the header bar.

v1.43.2
2026-03-17 11:43:26 +01:00
a8be3361be fix: move themeColor from metadata to viewport export
Resolves Next.js deprecation warnings about unsupported metadata themeColor.

v1.43.1
2026-03-17 11:30:51 +01:00
7e343b29e4 feat: improve project management with emoji icons and better UI
- Add emoji icon picker for projects (40 icons to choose from)
- Redesign project list in settings with color left-border, icon display
- Show project icons on task cards, project picker, and kanban cards
- Add New Project button to desktop header, tablet overflow menu, and mobile FAB
- Remove duplicate unused /api/tasks/projects route

v1.43.0
2026-03-17 11:14:39 +01:00
0248cfbb6c feat: add responsive header with overflow menu for tablet
Desktop shows all action buttons inline. On tablet (≤1024px), secondary
actions collapse into a dropdown overflow menu with proper touch targets,
dark mode support, and fade-in animation.

v1.42.0
2026-03-17 10:55:52 +01:00
18da568b9f feat: transform mobile FAB into quick action menu
FAB now opens a fan menu with 4 options instead of directly adding tasks:
- Task: opens the existing bottom sheet for quick task entry
- Event: opens the calendar event modal
- Focus: enters focus mode
- Search: opens search modal

FAB rotates to X when menu is open, backdrop dismisses on tap.
Each menu item has a colored icon bubble with label.

v1.41.0

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-17 10:50:12 +01:00
2d386362ca style: redesign subtask and notes inline UI
- Subtasks: slide-in animation, left border accent, hover highlights,
  mini progress bar in indicator badge, scale effect on checkbox hover
- Notes: slide-in animation, cleaner toolbar with SVG icons instead of
  emoji, proper dark mode support, focus ring on editor, max-height cap
- Both use CSS variables for consistent theming

v1.40.1

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-17 10:47:55 +01:00
85982f06a5 feat: fix iPhone Today button, add all settings to sidebar, fix layout
- Fix goToToday landing on yesterday in single-day view (skip startDayOffset)
- Add quick actions panel to settings sidebar for all screen sizes (not just mobile)
- Add view style switcher, visible hours, search, and new project to sidebar
- Change weekly-container to height:100vh for proper flex layout
- Someday/all-day sections use flex-shrink:0 for stable resize behavior
- Collapse uses height:30px!important to override inline styles

v1.40.0

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-17 10:41:12 +01:00
afa2695e0c fix: thin resize handles and fix resizing for both areas
- Use 1px border style instead of thick background bar
- Switch from maxHeight to height for proper resize control
- Fix overflow conflict in expanded someday CSS
- Both all-day and someday areas now properly resizable

v1.39.4

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-17 03:19:11 +01:00
806061bf47 fix: move someday resize handle to top border and improve visibility
Handle now appears above the someday section as a visible bar with
background color. Dragging up increases height (inverted for top handle).
Handle styling improved with hover/active states for better discoverability.

v1.39.3

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-17 02:49:27 +01:00
87c7211655 fix: move resize handles outside scrollable sections
Resize handles for all-day and someday areas were inside the
overflow:auto section, making them scroll away. Now placed
outside the section so they always sit at the bottom border.

v1.39.2

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-17 01:37:39 +01:00
71486f0d43 fix: rolling tasks not moving to today due to profile load race condition
Rolling ran inside fetchTasks before profile.autoRolling was loaded,
so it always saw false and skipped. Now runs as a dedicated effect
that waits for both profile and tasks to be ready.

v1.39.1

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-17 01:08:15 +01:00
eebc8eb9b6 feat: drag-to-provider sync, recurring task editing, resizable areas, search improvements
- Sync tasks to external provider when dragged to a synced Someday list (Google/Outlook/Synology)
- Add Synology support to POST /api/tasks/sync endpoint
- Edit recurring task series (title, interval, unit, time) all at once via new API
- Make Someday and all-day areas vertically resizable with drag handles (height persisted in cookies)
- Include Someday tasks in search results with list name display
- Instant calendar event appearance after creation (improved optimistic update + immediate cache refresh)
- Fix project color not updating on tasks when project color changes
- Add database backup script for Supabase LXC

v1.39.0

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-17 00:50:42 +01:00
43169c0bfc feat: add mobile font scale setting
New setting in Settings > Styling that scales all fonts on mobile
devices (75% / 85% / 100% / 115% / 130%). Applies to day names,
dates, tasks, events, and the mobile header date. Also scales the
CW/date display in the mobile header via scaleRem().

New DB field: mobileFontScale (Float, default 1.0)

v1.38.0
2026-03-16 22:42:09 +01:00
2ad55fe1bd fix: restore sticky weekday headers on mobile
The global overflow-y:visible rule for time-grid-on was overriding
the mobile overflow-y:auto on .weekly-days-grid, which broke
position:sticky on day headers. Wrap desktop overflow rules in a
min-width media query and keep mobile scroll container intact.

v1.37.4
2026-03-16 22:35:37 +01:00
0fa2893e10 fix: prune deleted Synology calendars from stored list
When fetching events, refresh the calendar list from the Synology
server and remove any stored calendars that no longer exist. This
stops repeated "Calendar unavailable" errors from deleted calendars.

v1.37.3
2026-03-16 22:28:28 +01:00
c28fa71e4d fix: settings sidebar text color on mobile and blue theme bar
- Use var(--weekly-bg) and var(--weekly-text) for sidebar background
  and text color so it matches the calendar in both light/dark mode
- Add explicit label color rules for settings sidebar
- Change manifest theme_color from blue (#0ea5e9) to white
- Add responsive themeColor meta tags for light/dark preference

v1.37.1
2026-03-16 21:59:34 +01:00
f9c7893341 feat: add push notifications for calendar event reminders
- Service worker + Web Push API for browser/mobile notifications
- PWA manifest with icons for home screen install (iOS 16.4+)
- Push subscription management (subscribe/unsubscribe API routes)
- Notification toggle in Settings > General
- Push scheduler script (cron) checks cached events and sends
  notifications at reminder times, with dedup tracking
- Test notification endpoint at /api/push/test
- Persists reminders in calendar event cache for scheduler access
- New DB models: PushSubscription, SentNotification
- New user field: notificationsEnabled

Setup: generate VAPID keys with `npx tsx scripts/generate-vapid-keys.ts`
and add to .env, then run scheduler via cron every minute.

v1.37.0
2026-03-16 21:38:15 +01:00
d991e7a65b style: make CalendarEventModal more compact for mobile
Reduce padding, gaps, font sizes, and combine Status/Visibility into
a single row for better usability on smaller screens.

v1.36.1
2026-03-16 17:04:25 +01:00
b9c05571be feat: add alerts, invitees, attachments, busy status, and visibility to calendar events
Support extended calendar event properties across all providers:
- Alerts/Reminders: VALARM for CalDAV, reminders API for Google, reminderMinutes for Outlook
- Invitees/Attendees: ATTENDEE for CalDAV, attendees API for Google/Outlook
- Attachments: ATTACH (URL-based) for CalDAV (Apple/Synology)
- Busy Status: TRANSP for CalDAV, transparency for Google, showAs for Outlook
- Visibility: CLASS for CalDAV, visibility for Google, sensitivity for Outlook

Updated CalendarEventModal with new UI fields including expandable
Invitees & Attachments section and reminder/status/visibility dropdowns.

v1.36.0

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 14:36:37 +01:00
c21fd0bd88 Fix WeeklyView TS errors and Time Grid alignment 2026-03-15 11:21:07 +01:00
376d0efdc2 fix: settings sidebar single-scroll on mobile
Switch sidebar from flex column layout to block on mobile so the
quick actions, tabs, and settings content all flow in one scrollable
container instead of the content being trapped in a tiny flex:1 area.

v1.35.3

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 10:02:42 +01:00
658042c8b3 fix: double date picker on mobile, sidebar scroll, 2-column grid
- Prevent desktop SimpleDatePicker from rendering on mobile (was
  showing two date pickers simultaneously)
- Add overflow-y: auto to settings sidebar at 768px breakpoint so
  the quick actions panel and content are scrollable on all mobile
- Add cols-2 CSS rules for weekly-days-grid and all-day-events-grid
  so the 2-day view spreads columns correctly

v1.35.2

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 09:57:36 +01:00
914b1d76b2 fix: prevent swipe navigation when scrolling someday area
Ignore horizontal swipe gestures that originate inside the .weekly-someday
element so that horizontal scrolling of someday lists works without
triggering day navigation on mobile.

v1.35.1

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 09:53:54 +01:00
e663f82c26 feat: add 2-day view, scrollable mobile settings, fix someday on mobile
- Add 2-column option to view days selector (1,2,3,5,7)
- Make settings sidebar scrollable on mobile (overflow-y: auto)
- Fix someday section not visible on mobile by removing maxHeight
  constraint from time-grid-wrapper on mobile devices, allowing
  natural page scrolling to reach the someday area below

v1.35.0

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 09:48:40 +01:00
fff67cb4af fix: tighten date-weekday gap in above/below layout
Set flex gap to 0px for column layouts (above/below) so the date sits
closer to the weekday. Remove default margin-bottom from .weekly-day-date
CSS to prevent extra spacing.

v1.34.5

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 09:27:29 +01:00
6409dd8908 fix: date vertical offset scales with headline font size
Compute vertical offset relative to the weekday headline font size
instead of the date's own small font. Top shifts up 55%, center 25%,
bottom stays at baseline — giving visible, proportional alignment.

v1.34.4

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 09:13:35 +01:00
d6009ef7b2 fix: date vertical alignment uses baseline with relative offsets
Use baseline alignment as anchor so the date positions relative to the
weekday text, not the container. Apply small em-based offsets for
top/center/bottom to fine-tune positioning without overshooting.

v1.34.3

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 09:04:53 +01:00
a66f2c0bb4 fix: use baseline alignment for date vertical "bottom" option
Change "bottom" date vertical alignment from flex-end to baseline so
the date aligns to the weekday text baseline instead of the container
edge, giving a more natural and subtle positioning.

v1.34.2

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 09:00:36 +01:00
e9a4a0b216 fix: date vertical alignment in day header
Remove default h3 margins from .weekly-day-name and clear margin-bottom
on .weekly-day-date when in horizontal (left/right) layout so that
flexbox alignItems (top/center/bottom) works correctly.

v1.34.1

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 08:55:48 +01:00
d28a02c5b5 feat: optimize mobile UX with simplified header and quick actions
Replace crowded 7-element mobile header with clean 3-element layout:
hamburger menu (left), tappable date display (center), search (right).
All touch targets are 44px+ per Apple HIG.

Move navigation, quick actions, view controls, and utilities into a
new mobile quick actions panel at the top of the settings sidebar.
Add safe area insets for notch and home indicator on iOS devices.

v1.34.0

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-14 23:39:17 +01:00
de483ed64e fix: apply CW font settings to mobile header
Mobile header now uses Calendar Week (KW) font family, size, weight,
and color settings instead of hardcoded styles. Year span also uses
separate Year font settings in KW mode.

v1.33.8

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-14 21:51:12 +01:00
b5599b6625 fix: add 16px right margin to side-nav-right to clear scrollbar
v1.33.7

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-14 20:42:03 +01:00
892d729e53 fix: side-nav-right visibility and mobile text input color
Move right navigation arrows outside scrollable time-grid-wrapper so
they remain visible on hover. Add explicit -webkit-text-fill-color for
all inputs/textareas to fix invisible text on iOS Safari.

v1.33.6

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-14 19:56:22 +01:00
0f214040ff fix: scroll to startHour on load and fix time label visibility
- Add timeGridWrapperRef to scroll the correct container (wrapper has
  overflow-y: scroll, inner elements have overflow: visible)
- Scroll wrapper to startHour offset on load and when startHour changes
- Time labels use translateY(-0.4em) so first/last hours aren't clipped
  by the sticky header or container edge
- jumpToHour also targets the wrapper ref

v1.33.5

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-14 19:04:31 +01:00
8b68c50445 fix: visible hours setting now constrains the time grid viewport
Time-grid-wrapper max-height is set based on (endHour - startHour) so
only the selected time range is visible. Users can still scroll to see
hours outside the range. Tasks remain in their correct timeslots.

v1.33.4

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-14 18:53:37 +01:00
ee2f7bfb69 fix: tasks stay in correct timeslot when changing visible hours
- GridTaskBlock now positions tasks from hour 0, not from workingHoursStart
- Changing start/end hour only scrolls the view, doesn't shift task positions
- Calendar events and tasks now align on the same time slots

v1.33.3

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-14 18:46:34 +01:00
ebfe911b81 fix: align time column header, calendar events, all-day events, and swap view icons
- Fix time-column-header height to dynamically match weekly-day-header
- Fix all-day events column alignment (width 50px → 55px to match time column)
- Fix calendar events overflowing weekday columns (remove negative left/right)
- Swap Simple/Calendar view icons in header switcher
- Uncomment headerCustomFormat in API select for instant toggle
- Add response error checking in updateTaskFields for kanban persistence
- Add font/view dependencies to header height ResizeObserver

v1.33.2

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-14 18:32:09 +01:00
58de23a18f Convert header display settings to dropdown (v1.33.1) 2026-03-13 15:53:16 +01:00
b827f39722 Implement custom header formatting (v1.33.0) 2026-03-13 15:18:32 +01:00
07ffc9136e Add Month & Year and Full Date header display options 2026-03-13 15:10:40 +01:00
a6acc64ab8 Optimize build process and fix dynamic route collection errors 2026-03-13 14:33:14 +01:00
b244755163 Fix build collector errors and bump to 1.31.3 2026-03-13 14:23:08 +01:00
ef22fb5046 Fix linting errors and Synology rootUrl issue 2026-03-13 13:40:39 +01:00
9e32440f15 Merge branch 'dev' into main 2026-03-13 12:11:37 +01:00
2819068d4d Fix all-day event shifts and header UI overlap 2026-03-13 12:11:12 +01:00
22d2a8440f fix: make header toggle instant and fix calendar event width 2026-03-12 09:04:49 +01:00
329f082ecf feat: view switcher improvements, header month option, kanban date/time, mobile fixes
- Swap simple/calendar icons in header view switcher
- Add calendar view button to header view switcher
- Reorder header: view switcher first, then days, hours, slot duration
- Add header display setting: calendar week (KW) or month name
- Show kanban stage color border on GridTaskBlock (week/simple views)
- Show date, weekday, and time on kanban cards
- Remove task swipe gestures on mobile (use container swipe for day nav)
- Fix mobile landscape 3-day grid overflow
- Add headerDisplay to schema, API, and settings UI

v1.30.0

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 20:22:32 +01:00
8703239f0f feat: fix kanban drag persistence, add view switcher and kanban filters
Fix stale closure in updateTaskFields causing tasks to disappear after
dragging between kanban columns. Add view switcher icons (Week/List/Kanban)
in the header on hover. Add search bar and filter dropdowns (project,
someday list, week) to the kanban board. Include someday list tasks in
kanban view.

v1.29.0

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 13:12:55 +01:00
af2de09f6b feat: add Kanban board view with customizable stages
- New "Kanban" view style alongside Simple, Calendar, and List
- Drag tasks between columns to change their stage
- Customizable stages with colors in Settings > View Style
- Stage colors appear as left border indicators on tasks in weekly view
- Default stages: Backlog, To Do, In Progress, Review, Done
- Stages persist in database (User.kanbanStages as JSON)
- Task stage persists in database (Task.kanbanStage)
- Full i18n support (EN, DE, FR, ES, IT)
- Unassigned tasks shown in separate column

v1.28.0

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 09:15:11 +01:00
7b02e648ab fix: clearer "No tab" option to remove list from tab group
Replace cryptic "—" with translated "No tab" label in the tab assign
dropdown (EN, DE, FR, ES, IT). Selecting it unassigns the list from
its current tab.

v1.27.3

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 09:01:15 +01:00
79e4a5b287 fix: tab creation now works, use FolderPlus icon for tab assign
New tabs created via FolderPlus button are stored in localStorage as
custom tabs and merged with list-derived tabs. Dissolve and rename
also update custom tabs. Changed tab assign icon in list headers from
Tag to FolderPlus for consistency.

v1.27.2

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 08:58:55 +01:00
72eafbd63c fix: drag and drop lists onto tabs to assign them
Drag a someday list by its handle and drop it on a tab button to assign
it to that tab. Drop on "All" to unassign. Visual feedback with dashed
outline on hover during drag.

v1.27.1

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 08:55:55 +01:00
8959aa7f5a feat: move someday controls to horizontal tab bar, remove label column
Replace the someday-label-column with a unified horizontal tab bar
containing: collapse chevron, "any day" label, new list icon (ListPlus),
new tab icon (FolderPlus), divider, then tab buttons. All icons have
tooltips. Inline input for creating new tabs directly in the bar.

v1.27.0

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 08:53:30 +01:00
f05a7c9035 fix: show list count badges on someday tab buttons
Display number of lists per tab in a circle badge next to the tab name.
"All" shows total count, each tab shows its filtered count.

v1.26.2

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 08:47:44 +01:00
b2a1981385 fix: tab persistence and move tabs to horizontal bar above someday grid
Fix tabs vanishing on reload by adding missing `tab` field in fetchTasks()
list mapping. Replace cramped vertical tabs in someday-label-column with
a readable horizontal tab bar above the someday grid, working in both
time-grid and non-time-grid modes. Double-click to rename, X to dissolve.

v1.26.1

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 08:44:17 +01:00
1334656300 feat: inline unsync confirmation and sync all/unsync all buttons
Replace browser confirm() popup when unchecking synced task lists with
an inline red confirmation banner. Add sync all / unsync all buttons
per provider for batch operations. i18n for EN, DE, FR, ES, IT.

v1.26.0

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 08:31:53 +01:00
b56bfdeb52 fix: tab persistence, dissolve tabs, and Synology CalDAV discovery fallback
- Fix someday tabs disappearing on reload (include tab field in fetch mapping)
- Add dissolve/delete tab feature with X button on hover (all 5 languages)
- Fix Synology calendar "cannot find homeUrl" by falling back to derived homeUrl
  when well-known CalDAV discovery fails

v1.25.2

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 21:51:22 +01:00
ff6ed1f949 fix: mobile someday tabs and inline new tab input
Show horizontal scrollable tab bar on mobile (≤768px) above someday
lists. Hide vertical tabs in label column on small screens.
Replace browser prompt for new tab name with inline input field.

v1.25.1

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 21:38:38 +01:00
3016293cd9 feat: add someday list tabs and side navigation arrows
Add tab system for someday lists allowing categorization (e.g. Private,
Work, Family). Lists can be assigned to tabs via tag icon dropdown in
list headers. Tabs appear in the someday label column for filtering.
Double-click tab name to rename. Tabs persist in DB via new SomedayList.tab field.

Also add hover-overlay prev/next day/week navigation arrows on left and
right sides of the weekly grid, and fix first hour label clipping.

i18n: tab translations for EN, DE, FR, ES, IT.

v1.25.0

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 21:15:46 +01:00
fd2d4e5ed3 feat: complete i18n for settings, add language flags, reduce Synology calendar noise
- Added 70+ translation keys across all 5 languages (EN/DE/FR/ES/IT)
- Replaced 45+ hardcoded strings in settings with translated versions
- Added flag emojis to language dropdown (🇬🇧🇩🇪🇫🇷🇪🇸🇮🇹)
- Fixed language dropdown jumping back to English (functional updater, correct fallback)
- Downgraded Synology calendar 405/404 errors to warnings for stale calendars

v1.24.0

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 17:02:28 +01:00
627f4c0005 fix: hide reset token, add password confirmation field
Token is now read from URL silently. User enters password twice
with client-side match validation. Shows error for missing/invalid tokens.

v1.23.1
2026-03-10 16:43:27 +01:00
59cfcc7be4 feat: implement password reset flow with email
- API now handles two cases: send reset link (email only) and
  reset password (token + newPassword)
- Generates UUID token stored on user with 1-hour expiry
- Sends styled HTML email with reset link via SMTP
- Prevents email enumeration (always returns success)

v1.23.0
2026-03-10 16:11:30 +01:00
9512c6ceda fix: UserMenu dropdown invisible in dark mode and clipped by overflow
Rewrote UserMenu to use CSS variables and portal rendering instead of
hardcoded Tailwind classes. Added localized labels for all 5 languages.

v1.22.2
2026-03-10 15:35:39 +01:00
0b68d275d0 feat: multi-language quote selection with per-user language picker
Users can now choose which languages their motivational quotes appear in
via toggle buttons in Settings. Added 45 curated quotes in French, Spanish,
and Italian. Quote language preference is stored per-user in the database.

v1.22.0
2026-03-09 08:11:23 +01:00
9ac7198b24 feat: localization (FR/ES/IT), portal date picker, font matching, quote cleanup
- Add French, Spanish, and Italian translations for full UI localization
- Add Italian to language selector; show native language names
- Fix Jump to Date calendar: use React portal with fixed positioning
  to prevent clipping by overflow:hidden ancestors
- Fix font matching: time grid tasks inherit from task font settings
  when at default values (0.75rem/500), matching someday list fonts
- CSS fallback chain: time-slot-task vars fall through to task vars
- Remove broken recite.vercel.app default quote URL
- Add date-fns locales (fr, es, it) for SimpleDatePicker

v1.21.0

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 20:54:13 +01:00
4c18d37bec feat: account number display, weekly goals export/import, calendar event fixes
- Show Account Number in Settings > Account for user identification
- Add weekly goals to JSON export/import with upsert-based merge
- Fix calendar events not appearing instantly (await cache ops, prevent
  provider force-refresh from overwriting optimistic updates)
- Add Sign Out button in Settings > Account for mobile accessibility
- Fix dateVerticalAlign persistence in profile API
- Fix quote API error handling for non-JSON responses
- Add Synology to CalendarEvent source type union

v1.20.0

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 19:56:21 +01:00
9863f8e28e feat: weekday case setting, right-aligned icons, font matching, calendar fixes
- Add weekday case setting (Normal/Capitalize/Uppercase) with DB persistence
- Move provider icons to end of line (right-aligned with marginLeft: auto)
  in both GridTaskBlock and TaskItem
- Make time grid task font inherit from task font settings as fallback
  instead of separate hardcoded defaults (0.75rem/500 → task font values)
- Fix Jump to Date calendar: center-aligned dropdown, dark mode support
  via CSS variables, proper border and shadow styling
- Add weekdayCase to Prisma schema, profile API, and translations (EN/DE)

v1.19.0

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 13:23:22 +01:00
05dab0720b feat: provider icons in time grid, fix weekday names persistence, calendar z-index
- Add sync provider icons (Google, Microsoft, Apple, Synology) to
  GridTaskBlock so they show in weekday time slots
- Add weekdayFormat and customWeekdayNames fields to Prisma schema
  and profile API so custom weekday names persist across reloads
- Fix Jump to Date calendar z-index by elevating container when open
- Fix someday textarea font to inherit from CSS instead of hardcoded values

v1.18.0

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 13:09:37 +01:00
7f04750e4a fix: provider icons on all tasks, font size matching, day header z-index
- Show sync provider icons (Google, Microsoft, Apple, Synology) on both
  someday and weekday tasks with fallback detection from externalId
- Remove hardcoded fontSize from someday tasks so they inherit CSS variables
- Remove line-height override for someday task text
- Bump day header z-index to 20 to prevent task overlap when scrolling
- Always propagate externalProvider when dragging tasks between slots

v1.17.2
2026-03-08 12:50:51 +01:00
f925c8cb7f chore: release v1.17.1 - Fixed TypeScript errors and added missing default value 2026-03-08 11:01:17 +01:00
9338727b05 fix: resolve TypeScript errors for dateVerticalAlign property 2026-03-08 10:49:36 +01:00
fab588083f style: move Day / Weekday Gap above Weekday Font in settings 2026-03-08 10:45:51 +01:00
10aa9aabb5 feat: added Date Vertical Alignment setting and updated version to v1.17.0 2026-03-08 10:41:53 +01:00
77daa6e30b chore: release v1.17.0 - Reorganized settings, added Localisation tab, and refined UI layout 2026-03-08 10:30:28 +01:00
2ec09fdcca feat: full Synology bidirectional sync and fix someday list delete button
- Add createSynologyTask: new tasks in synced lists push to Synology CalDAV
- Wire Synology create into POST /api/tasks when somedayList is synced
- Fix someday list title input using width:100% instead of flex:1, which
  pushed the delete button off-screen making lists undeletable
- Slightly improved provider icon styling

v1.16.1

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 02:00:55 +01:00
fe41c153f7 feat: Synology bidirectional sync (push updates back to CalDAV)
Added updateSynologyTask and deleteSynologyTask functions that modify
VTODOs on the Synology CalDAV server. Wired into the sync PATCH handler
so completing/editing/deleting a Synology-synced task pushes changes back.
Also slightly increased provider icon size for better visibility.

v1.16.0

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 01:46:40 +01:00
aaa3705511 fix: include synology in external tasks query to prevent duplicate creation
The sync query filtered externalProvider for only 'google' and 'outlook',
missing 'synology'. This caused every sync cycle to treat all Synology
tasks as new, creating duplicates each time.

v1.15.10

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 01:37:35 +01:00
d9949f42d5 fix: add VTODO filter for Synology CalDAV sync and clean up debug logs
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>
2026-03-08 01:35:19 +01:00
f6b7a5d7a2 fix: move provider icon to flex sibling of task text for reliable visibility
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>
2026-03-08 00:51:15 +01:00
ecf774e0f9 fix: inherit provider from someday list when moving task to weekday slot
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>
2026-03-08 00:42:18 +01:00
031837cbb2 fix: wrap mobile task toolbar into two rows to prevent overflow
v1.15.6

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 00:30:02 +01:00
08ac46bb6b fix: move provider icon inline after task title for better visibility
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>
2026-03-08 00:28:45 +01:00
a592ac40e9 fix: move mobile task action toolbar above task text to prevent overlap
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>
2026-03-08 00:12:34 +01:00
609874b288 fix: hide provider icons on someday tasks, show only when moved to weekday slots
v1.15.3

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 00:08:44 +01:00
57c1c0e1c3 fix: remove provider icon from front of synced tasks
Only keep the provider logo at the far right of each synced task.

v1.15.2

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 00:05:25 +01:00
3ea57fb8b4 UI: remove duplicate icons in Someday lists, left-align task actions, and fix mobile overlay. Version 1.15.1 2026-03-07 23:00:47 +01:00
9cde2e4de2 feat: provider logos on synced tasks, someday list drag & drop fix, hide recurrence for someday
- 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>
2026-03-07 21:20:27 +01:00
3d75d7b39b feat: subtask indicators, drag & drop fixes, font layout, someday scroll & Google Tasks sync
- 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
2026-03-07 19:06:19 +01:00
3ddfc6af79 chore: update fallback port in email.ts 2026-03-07 17:54:10 +01:00
2777601031 chore: change development port to 3000
v1.13.1
2026-03-07 17:39:26 +01:00
d41bc25fb0 fix: always apply completed class for strikethrough and improve checkbox styling for Safari mobile 2026-03-06 15:30:15 +01:00
6fbbbdfdae fix: escape unescaped quote in RichTextEditor blockquote button (build error) 2026-03-06 12:31:06 +01:00
499b012d82 fix: CSS class slide animation, mobile dot, flex task indicators 2026-03-06 12:09:13 +01:00
5e235b65ad feat: expand local quote library with language-aware fallbacks
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
2026-03-05 15:45:39 +01:00
6574eeb65f feat: add backup/restore, task indicators, and multiple bug fixes
- 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>
2026-03-05 15:39:37 +01:00
5dad5aa492 fix(weekly-view): hide individual scrollbars and fix task creation P2003 error 2026-03-05 11:36:17 +01:00
182e634f23 feat: add Start View On setting (Today/Yesterday) in General Settings Modal 2026-03-04 11:49:11 +01:00
0632e03326 fix: mobile view header density, today logic, and sticky layout 2026-03-04 11:32:45 +01:00
8ea3720831 fix: per-device settings save to cookie only, not DB 2026-03-04 11:14:46 +01:00
58bbbbdf52 fix: cookie settings override, 5x week animation, deprecated meta tag 2026-03-04 11:08:39 +01:00
c5c713da11 feat: 5x longer week slide animation (1.75s vs 0.35s day) 2026-03-04 09:01:04 +01:00
9fa646fa55 fix: CSS class slide animation, mobile dot, flex task indicators 2026-03-04 08:54:37 +01:00
b3503d9e4d feat: UI improvements A-F — cookies, KW fix, mobile header, indicators 2026-03-04 02:49:44 +01:00
9be39b0b30 fix: full-screen slide animation for day/week nav 2026-03-04 02:30:26 +01:00
b7fa5ff7c0 fix: consolidate slide animation CSS - remove 3 conflicting keyframe blocks 2026-03-04 02:17:41 +01:00
bfa9c1f8e7 fix(azure-ad): disable checks to prevent cookie errors from outlook redirect 2026-03-04 01:21:29 +01:00
97c8b7af72 fix(azure-ad): use PKCE instead of state cookie to fix proxy issues 2026-03-04 00:54:11 +01:00
f700ab0cea fix(next-auth): revert custom cookie overrides 2026-03-04 00:36:10 +01:00
c15cb51845 fix(next-auth): enforce cookie policies for Reverse Proxy compatibility 2026-03-04 00:27:11 +01:00
4e16930d1d fix(mS-todo): remove select fields from sync to fix Graph API ParseUri error 2026-03-03 19:29:09 +01:00
745e84d699 fix: remove dueDateTime from MS Graph API select query to prevent 400 Bad Request 2026-03-03 15:07:49 +01:00
c7fc01b782 Add Microsoft Auth and update Auth UI 2026-03-03 14:03:09 +01:00
b001845890 feat: mobile UX overhaul and fix Google OAuth
- 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>
2026-03-02 18:41:46 +01:00
beb3281194 fix(v1.10.1): force dynamic for problematic APIs and improve Outlook sync logs 2026-03-02 08:26:14 +01:00
330d6fddc6 feat: support linebreaks in task titles with Shift+Enter
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>
2026-03-02 08:18:35 +01:00
163e9c1a07 feat: major update — mobile fix, auth decoupling, CalDAV perf, projects, fonts, quotes
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>
2026-03-01 17:55:49 +01:00
ecd9be03ce fix(lxc): remove duplicate property in WeeklyView and sync to v1.8.7 2026-03-01 16:06:13 +01:00
dad44ca384 fix(api): use type assertions for User model to bypass prisma type-lag during build
chore(release): bump version to 1.8.5
2026-03-01 15:35:18 +01:00
7f1211a048 feat(settings): update default application settings for clean bright look
feat(db): add dayHeaderGap field to persist spacing settings

chore(release): bump version to 1.8.4
2026-03-01 15:30:23 +01:00
87cf48e6fd style(email): replace dark mode template with bright, clean aesthetic
chore(release): bump version to 1.8.3
2026-03-01 14:56:31 +01:00
74eec23443 fix(email): change fallback sender to carrylight.de to prevent SPAM rejection
chore(release): bump version to 1.8.2
2026-03-01 14:40:02 +01:00
95487cc83f fix(email): increase SMTP timeout to 15s to prevent email dispatch failures on slow connections
chore(release): bump version to 1.8.1
2026-03-01 14:14:52 +01:00
9778952783 Update second hardcoded version string to 1.8.0 2026-03-01 12:51:53 +01:00
fcaadc1ce9 Refactor Someday area to grid layout with dynamic slots, fixed scrolling, and border refinements 2026-03-01 11:58:48 +01:00
dea7c387ea v1.7.0: Responsive mobile layout + boot update script
- 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
2026-02-27 13:03:25 +01:00
2133364e3d feat: email verification, auto-save settings, calendar UX improvements
- 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
2026-02-27 08:57:15 +01:00
20deaece0c fix(hooks): clean up syntax and formatting in GridTaskBlock 2026-02-26 07:54:24 +01:00
b1ad9ec546 fix(hooks): definitively resolve React Hook violations in GridTaskBlock 2026-02-26 07:49:45 +01:00
9652bd374e fix: resolve React Hook violation in GridTaskBlock 2026-02-26 07:41:59 +01:00
dddde43935 feat: add setting to show task checkboxes in weekly view
- Add showTaskCheckboxes field to User model in Prisma schema
- Create database migration for the new field
- Update user profile API to handle the new setting
- Implement checkbox rendering in GridTaskBlock controlled by user preference
- Add CSS styles for task checkboxes
2026-02-25 12:59:55 +01:00
f0672e5c68 feat: fix Docker deployment, OAuth redirects, event editing, and UI improvements
- 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>
2026-02-24 23:18:13 +01:00
279d1a4c49 Fix notes popup positioning, reposition task actions to avoid overlap, and improve Apple Calendar sync 2026-02-24 12:58:19 +01:00
368928c016 Reposition notes popup to floating vertical container and various integration fixes 2026-02-24 12:26:02 +01:00
8842123caf feat: improve calendar sync, event modal, and task list management
- 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
2026-02-24 11:01:15 +01:00
210a142f61 fix(sync): resolve drag-and-drop sync gap for Someday lists 2026-02-24 02:06:32 +01:00
eb5a4b4232 fix: sync spinner disappearing prematurely during concurrent fetches
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>
2026-02-24 00:52:06 +01:00
c8080f23ff feat: add bidirectional Microsoft To-Do task creation sync
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>
2026-02-24 00:39:19 +01:00
220015b2b6 feat: show sync provider icon on someday lists
- 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>
2026-02-24 00:30:23 +01:00
866f514f10 fix: detect iCloud all-day events and bypass cache on manual refresh
- 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>
2026-02-24 00:26:04 +01:00
1f202eb8c9 fix: move undo/redo buttons to right section, left of add event button
v1.2.1

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 00:16:30 +01:00
83e2a99d78 feat: add undo/redo, fix Outlook OAuth session loss, fix Microsoft To-Do task import
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>
2026-02-24 00:07:59 +01:00