Commit Graph

332 Commits

Author SHA1 Message Date
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
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