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>
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>
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>
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>
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>
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>
- 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>
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>
- 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>
- 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>
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>
- 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>
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>
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>
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>
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>
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>
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>
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>
- 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>
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>
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>
- 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>
- 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
- Fix setval(0) error in accountNumber migration (use GREATEST(..., 1))
- Add migration for dateVerticalAlign, dayHeaderGap, weekday settings, quoteLanguages
- Deploy scripts now fall back to db push if migrate deploy fails
v1.22.3
The standalone build already includes the correct server files.
Copying .next/server on top was overwriting middleware-manifest.json,
causing MODULE_NOT_FOUND errors at runtime.
v1.22.1
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
- 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>
- 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>
- 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>
- 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>
- 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
- 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>
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>
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>
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>