Commit graph

395 commits

Author SHA1 Message Date
Till-JS
4d1db202c0 feat(calendar): convert toolbar to collapsed FAB next to InputBar
- CalendarToolbar is now collapsed by default as a FAB button
- FAB positioned right next to the QuickInputBar
- Toolbar panel opens above on click with smooth slide animation
- Reduced bottom padding since toolbar no longer takes full width
- DateStrip position adjusted to be closer to InputBar
- Updated localStorage logic (default is now collapsed)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-12 21:55:07 +01:00
Till-JS
502ba0c6b9 ♻️ refactor(calendar): integrate agenda as view type and improve DayView layout
- Add AgendaView component as integrated calendar view type
- Add 'agenda' option to view type selector in toolbar
- Remove separate /agenda route (now accessible via view switcher)
- Redesign DayView for better wide-screen display:
  - Center content with max-width constraints
  - Narrower events (max-width 400px)
  - Better positioned time labels
- Fix overflow handling in all calendar views
2025-12-12 21:51:05 +01:00
Till-JS
b7057ed8fc feat(calendar): improve DateStrip today button and fix initial date display
- Move today button next to month label (left side, without shifting layout)
- Add current date display below "Heute" label
- Style button as pill-shaped with blue accent colors
- Widen DateStrip container for better layout
- Fix month label to have fixed min-width to prevent layout jumps
- Fix initial date not showing correctly on page reload by:
  - Using instant scroll on mount instead of smooth
  - Calling updateVisibleMonth() after scroll completes
  - Initializing visibleMonth with today's date

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-12 21:36:19 +01:00
Wuesteon
a9aeffabb1 ♻️ refactor(picture): simplify credit system to production-only
- Remove freemium model (3 free generations per user)
- Credit check now only enforced in production (not staging)
- Add HTTPS detection for webhook mode fallback
- Simplify GenerateResponse (remove freeGenerationsRemaining)
- Clean up async generation metadata handling

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-12 20:49:38 +01:00
Wuesteon
3f9bc5761b ♻️ refactor(chat): simplify chat service and update seed data
- Remove unused code from chat.service.ts
- Simplify seed.ts with fewer AI models
- Update CLAUDE.md documentation
- Update .env.example
- Remove unused package dependency
- Minor UI fix in chat page
2025-12-12 20:48:10 +01:00
Wuesteon
0fa154c7d6 🐛 fix(shared-auth): add automatic token refresh on 401 responses
- Add backendUrl parameter to initializeWebAuth() for interceptor config
- Expand isTokenExpiredResponse() to match more error patterns:
  - "invalid token", "token validation failed", "claim" (jose errors)
  - ERR_JWT_EXPIRED error code
- Update all web apps to pass backendUrl for automatic refresh:
  - picture (3006), chat (3002), zitare (3007), contacts (3015)
  - calendar (3014), clock (3017), todo (3018)
- Fix API client default port in picture web app

This prevents users from being randomly signed out when JWT expires.
The interceptor now catches 401 responses and automatically refreshes
the token before retrying the request.
2025-12-12 20:47:43 +01:00
Wuesteon
4357902d33 Merge remote-tracking branch 'origin/dev' into till-dev 2025-12-12 14:12:14 +01:00
Till-JS
b3490833fa fix(calendar): add shared-splitscreen to Dockerfile
The calendar web app imports @manacore/shared-splitscreen but it was
missing from the Docker build context, causing the build to fail.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-12 13:25:42 +01:00
Till-JS
81f77c424c feat(calendar): improve navigation layout controls and sidebar integration
- Add layout control icons (sidebar/bottom-bar) for better UX
- Position FABs on right side for consistent minimization direction
- Fix app switcher dropdown direction (opens up when nav at bottom)
- Add isToolbarCollapsed store for toolbar state management
- Create CalendarToolbarContent component for reusable toolbar elements
- Improve sidebar toolbar integration with proper vertical layout
- Hide PillViewSwitcher sliding indicator in vertical mode
- Add scrollbar to sidebar toolbar content
- Ensure all toolbar buttons are full-width and left-aligned in sidebar

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-12 13:13:45 +01:00
Till-JS
448cfb9010 fix(calendar): improve toolbar UX and fix build warnings
- Merge hours filter toggle and time range selector into single button
  - Click toggles filter on/off
  - Right-click (desktop) / long-press (mobile) opens time range dropdown
- Add overflow indicators for events outside visible time range
  - Show colored lines at top/bottom edge for hidden events
  - Works in DayView, WeekView, and MultiDayView
- Fix portal pattern for dropdown z-index in PillCalendarSelector
- Fix all build warnings:
  - Remove unused .task-drag-ghost CSS in WeekView/MultiDayView
  - Remove unused imports in MonthView
  - Add ARIA role to TodoDetailModal backdrop
  - Change labels to spans in PillTimeRangeSelector
  - Convert button to div with role=button in ThemeCard
  - Replace deprecated svelte:component with dynamic component

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-12 13:03:31 +01:00
Till-JS
f2ac3e245e feat(splitscreen): add split-screen feature for multi-app side-by-side view
Add new @manacore/shared-splitscreen package enabling iFrame-based
split-screen functionality across Calendar, Todo, and Contacts apps.

Features:
- SplitPaneContainer with CSS Grid layout
- AppPanel with iFrame sandbox permissions and loading/error states
- ResizeHandle with mouse, touch, and keyboard support (20-80% range)
- PanelControls for swap and close actions
- Svelte 5 runes-based store with Context API
- URL persistence (?panel=todo&split=60)
- localStorage persistence with versioning
- Mobile auto-disable (<1024px breakpoint)

Integration:
- PillNavigation: added onOpenInPanel prop and Ctrl/Cmd+click support
- PillDropdown: added split button per app item
- Calendar, Todo, Contacts layouts wrapped with SplitPaneContainer

Also fixes:
- WeekView.svelte: fixed {@const} placement error
- MultiDayView.svelte: fixed {@const} placement error

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-12 13:00:26 +01:00
Till-JS
f51708d75a fix(calendar): fix QuickEventOverlay z-index stacking issue
- Add portal action to move overlay to body, escaping parent stacking contexts
- Set z-index: 99999 via inline style to ensure overlay appears above all UI elements
- Remove z-index: 0 from main-content that was creating a stacking context
- Overlay now correctly displays above DateStrip, Toolbar, and InputBar

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-12 12:15:01 +01:00
Till-JS
51912a285d feat(calendar): add search highlighting to calendar views
- Add searchStore for managing search state and event highlighting
- Integrate InputBar search with calendar view highlighting
- Dim non-matching events and highlight matching events during search
- Add search-highlighted and search-dimmed CSS classes to all views
- Adjust toolbar position for DateStrip component

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-12 11:57:55 +01:00
Till-JS
7ff8213bd6 feat(calendar): add default calendars and event indicators
- Create 4 default calendars for new users: Persönlich, Beruf, Familie, Freizeit
- Add event count dots below dates in DateStrip (max 5 dots)
- Show blue dots for events, white dots on today

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-12 03:51:53 +01:00
Till-JS
74e2dabf76 feat(calendar): add moon phases to DateStrip component
- Add suncalc library for accurate astronomical moon phase calculation
- Display moon phase emojis (🌑🌓🌕🌗) on significant dates
- Show new moon, first quarter, full moon, and last quarter
- Style moon indicators centered above each day
- Add hover effects to "Heute" button

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-12 03:05:53 +01:00
Till-JS
7d03a524fc fix: misc UI improvements across todo and shared-tailwind
- Update Todo main page layout
- Fix DateStrip component styling
- Adjust themes.css color variables

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-12 02:42:25 +01:00
Till-JS
5cd550c5a1 fix(contacts): improve ContactList and FilterBar styling
- Update ContactList with better spacing and layout
- Improve FilterBar responsiveness
- Adjust app.css for new component styles

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-12 02:40:44 +01:00
Till-JS
b42db508a3 feat(calendar): improve calendar UI with new components
- Update CalendarHeader with better navigation
- Add PillCalendarSelector for calendar switching
- Improve DateStrip with view range highlighting
- Update CalendarToolbar with refined controls
- Remove separate event/new page (using modal instead)
- Adjust app.css for new layout

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-12 02:37:43 +01:00
Till-JS
12ba2cf824 refactor(theme): remove custom theme editor and community themes
Remove unused custom theme functionality:
- Delete custom-themes-store.svelte.ts from shared-theme
- Remove ThemeEditor, ColorPicker, ThemeLivePreview components
- Remove CommunityThemeGallery, ThemeCommunityCard components
- Remove ThemeEditorPage, CommunityThemesPage
- Simplify ThemePage to show only built-in themes
- Remove editor and community routes from contacts app
- Update THEMING.md documentation

The built-in theme variants (default, ocean, forest, sunset, etc.)
provide sufficient customization. Custom theme creation was never
fully implemented and added unnecessary complexity.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-12 02:34:43 +01:00
Till-JS
db701fd648 fix(calendar): improve DateStrip today and range highlighting
- Use inline styles for today highlighting to ensure visibility
- Add hardcoded blue color (#3b82f6) for today indicator
- Fix view range highlighting with light blue background
- Add proper scroll container with max-width constraint
- Improve overall styling with box-shadow and border

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-12 02:26:54 +01:00
Till-JS
0f10a38cc0 feat(shared-ui): add QuickInputBar and PillToolbar components
- Add QuickInputBar component with natural language parsing, syntax
  highlighting, search, and quick-create functionality
- Add PillToolbar, PillToolbarButton, PillToolbarDivider components
  for app-specific toolbar controls
- Add PillTimeRangeSelector for hour range selection
- Add PillViewSwitcher for view mode switching with sliding indicator
- Integrate QuickInputBar into Calendar, Contacts, and Todo apps
- Add app-specific toolbars: CalendarToolbar, ContactsToolbar, TodoToolbar
- Add DateStrip component for Calendar date navigation
- Fix type exports: export QuickAction and CreatePreview from quick-input
  module, remove duplicate exports from deprecated command-bar

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-12 02:17:17 +01:00
Till-JS
c6f8b9f87c feat(settings): add device-specific settings storage
Implement per-device settings sync via mana-core-auth. Settings are now
stored both locally (localStorage) and in the cloud, with each device
(desktop, mobile, tablet) maintaining its own configuration.

Changes:
- Add deviceSettings JSONB column to user_settings table
- Add device API endpoints (GET/PATCH/DELETE /settings/device/:id/:app)
- Extend user-settings-store with device ID generation and detection
- Integrate calendar settings with cloud sync per device
- Remove todos from calendar header row (sidebar + grid only)
- Add hours dropdown to CalendarHeader for time range configuration

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-11 23:49:18 +01:00
Wuesteon
5921cfd257 Merge branch 'till-dev-backup' into till-dev 2025-12-11 18:48:28 +01:00
Till-JS
0ecbf69ebc feat(contacts): integrate contacts into Todo and Calendar apps
- Add ContactSelector, ContactBadge, ContactAvatar to shared-ui
- Add ContactsClient API service to shared-auth
- Add ContactReference, ContactSummary types to shared-types
- Todo: Add assignee and involvedContacts to tasks with UI in TaskEditModal
- Todo: Display contacts in TaskItem and KanbanTaskCard
- Calendar: Add AttendeeSelector with RSVP status support
- Calendar: Integrate attendees in EventForm
- Calendar: Add task drag-drop to calendar views (Day/Week/MultiDay)
- Contacts: Add ContactTasks component to show related tasks
- Backend: Add findByContact endpoint to Todo task service
- UI polish: glassmorphism styling, keyboard navigation, auto-focus

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-11 18:14:35 +01:00
Till-JS
876d81f788 Merge branch 'till-dev' into till-dev-backup 2025-12-11 16:12:26 +01:00
Till-JS
309faba62c feat(contacts): integrate contacts into Todo and Calendar apps
- Add ContactSelector, ContactBadge, ContactAvatar to shared-ui
- Add ContactsClient API service to shared-auth
- Add ContactReference, ContactSummary types to shared-types
- Todo: Add assignee and involvedContacts to tasks with UI in TaskEditModal
- Todo: Display contacts in TaskItem and KanbanTaskCard
- Calendar: Add AttendeeSelector with RSVP status support
- Calendar: Integrate attendees in EventForm
- Calendar: Add task drag-drop to calendar views (Day/Week/MultiDay)
- Contacts: Add ContactTasks component to show related tasks
- Backend: Add findByContact endpoint to Todo task service
- UI polish: glassmorphism styling, keyboard navigation, auto-focus

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-11 16:00:08 +01:00
Wuesteon
a069670a18 fix(calendar): resolve a11y errors in calendar views
- Fix button nested inside button in TodoSidebarSection (converts outer
  button to div with separate toggle button)
- Replace role="slider" with role="separator" on resize handles in
  DayView, WeekView, and MultiDayView to avoid missing aria-valuenow
  requirement

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-10 22:00:53 +01:00
Till-JS
e586820523 chore(calendar): add lucide-svelte and update dependencies
Add lucide-svelte for icons and reorder dependencies alphabetically.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-10 21:12:08 +01:00
Till-JS
6bc3c0998c feat(todo): configure nav items for visibility settings
Pass app-specific navigation items to GlobalSettingsSection.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-10 21:12:08 +01:00
Till-JS
6c2d603a1a feat(todo): add inline tag creation with color palette
Replace modal-based tag creation with inline form and preview.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-10 21:12:08 +01:00
Till-JS
931ee6bf9e feat(calendar): add agenda view components
Add AgendaFilters and AgendaItem components for enhanced agenda view.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-10 21:12:08 +01:00
Till-JS
cd569eff4e feat(calendar): add tasks page for todo management
Add dedicated tasks route with navigation entry and todo detail modal.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-10 21:12:08 +01:00
Till-JS
f3c567f56e feat(calendar): integrate todo tasks into calendar views
Add todo items display in Day/Week/Month views and sidebar section.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-10 21:12:08 +01:00
Till-JS
a898160423 refactor(todo): rename Labels to Tags for consistency across apps
- Rename route /labels to /tags and /label/[id] to /tag/[id]
- Rename LabelSelector component to TagSelector
- Update all UI texts from "Labels" to "Tags"
- Update navigation items and references
- Align terminology with Calendar and Contacts apps

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-10 21:12:08 +01:00
Till-JS
75bf7ecf47 fix(todo): improve drag-and-drop reliability with ID-based sync
Use sorted task IDs instead of array reference to detect real changes
from parent. Update lastTaskIds after finalize to prevent $effect from
reverting local DnD state changes.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-10 21:12:08 +01:00
Till-JS
aeb6a15994 feat(command-bar): match priority highlight colors to UI
Priority keywords now show their actual UI colors:
- Dringend (urgent): red #ef4444
- Wichtig (high): orange #f97316
- Normal (medium): yellow #eab308
- Später (low): green #22c55e

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-10 21:12:07 +01:00
Till-JS
993b8c129a fix(todo): allow priority keywords without ! prefix
Now supports both:
- "heimfahren wichtig" → priority high
- "heimfahren !wichtig" → priority high

Keywords: später, normal, wichtig, dringend (case-insensitive)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-10 21:12:07 +01:00
Till-JS
09e44a2f2f feat(shared-ui): add unified statistics components with theme support
- Add reusable chart components in shared-ui (StatsGrid, ActivityHeatmap, TrendLineChart, DonutChart, ProgressBars, StatisticsSkeleton)
- Use CSS variables (--primary) for consistent theme-based styling
- Add statistics pages to Calendar and Contacts apps
- Add statistics stores with app-specific metrics
- Fix PriorityDonutChart layout in Todo app (vertical layout with 2x2 legend grid)
- Add date-fns dependency to shared-ui

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-10 21:12:07 +01:00
Till-JS
330b9907b0 refactor(todo): rename priority labels for better natural language input
- low → "Später" (was "Niedrig")
- medium → "Normal" (was "Mittel")
- high → "Wichtig" (was "Hoch")
- urgent → "Dringend" (unchanged)

CommandBar syntax now supports: !später, !normal, !wichtig, !dringend
Shortcut syntax still works: !, !!, !!!

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-10 21:12:07 +01:00
Till-JS
74604b09d3 feat(todo): add deep validation for DTOs and completed task pagination
Validation:
- Create SubtaskDto with title MinLength/MaxLength, order validation
- Create TaskMetadataDto with typed EffectiveDuration, storyPoints enum
  validation (Fibonacci only), funRating bounds (1-10)
- Use @ValidateNested with @Type() for deep validation in CreateTaskDto

Pagination:
- Add offset parameter and total count to getCompletedTasks()
- Return { tasks, total, hasMore } structure for frontend pagination
- Enforce max limit of 100 to prevent abuse
- Add 3 pagination tests (basic, offset, max enforcement)

Error handling:
- Add try-catch to localStorage operations in +layout.svelte
- Handles private browsing mode and quota exceeded errors gracefully

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-10 21:12:07 +01:00
Till-JS
b1877c4a08 feat: add unified CommandBar Quick-Create for Calendar and Contacts
Implements the same CommandBar quick-create functionality from Todo
in Calendar and Contacts apps with a shared base parser architecture.

- Add base-parser in shared-utils with common patterns (date, time, tags)
- Refactor task-parser to use base-parser
- Create event-parser for Calendar with duration, location, @calendar
- Create contact-parser for Contacts with email, phone, @company detection
- Integrate Quick-Create into Calendar and Contacts layouts

Natural language syntax:
- Common: heute, morgen, Montag, 15.12., um 14 Uhr, #tags
- Calendar: für 2h, 30 min, in Berlin, @Kalender, ganztägig
- Contacts: @Firma, bei Company, auto email/phone detection

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-10 21:12:07 +01:00
Till-JS
c6b48d8f95 fix(todo): add input validation, N+1 fix, and RRULE bounds checking
Security & Validation:
- Add @IsNotEmpty and @MinLength(1) validators to prevent empty inputs
  - CreateTaskDto.title
  - CreateLabelDto.name
  - CreateProjectDto.name
- Add German error messages for validation failures

Performance:
- Fix N+1 query in network.service.ts getGraph()
  - Batch load all task-label relationships in single query
  - Reduces queries from O(n) to O(1) for label fetching

Security:
- Add validateRRule() to prevent DoS via malicious recurrence rules
  - Reject rules > 500 chars
  - Reject rules with > 5000 occurrences in 10 years
  - Prevents hourly/minutely abuse while allowing daily tasks

Cleanup:
- Remove debug console.log from tasks.svelte.ts

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-10 21:12:07 +01:00
Till-JS
828dbcc017 refactor(todo-web): extract reusable form components from TaskEditModal
Extract 5 form components to reduce TaskEditModal from 1220 to 604 lines (51%):

- PrioritySelector: Task priority selection buttons with color indicators
- StorypointsSelector: Fibonacci story point picker (1,2,3,5,8,13,21)
- DurationPicker: Quick duration buttons + custom input for effective time
- FunRatingPicker: 1-10 rating scale with color-coded visual feedback
- LabelSelector: Dropdown for multi-select label assignment

These components are now reusable across other task forms and views.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-10 21:12:06 +01:00
Till-JS
89a2b3da9e feat(todo): add quick task creation via CommandBar
- Add natural language parser for task input (date, time, priority, project, labels)
- Extend CommandBar with onCreate/onParseCreate callbacks
- Show create preview with parsed attributes as first option
- Support Cmd/Ctrl+Enter to create directly
- Fix service worker to not intercept Vite dev server requests
- Update deprecated apple-mobile-web-app-capable meta tag

Example: "Meeting morgen 14 Uhr !hoch @Arbeit #wichtig"
→ Creates task with due date, time, priority, project and label

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-10 21:12:06 +01:00
Till-JS
d8f1bbbbce fix(todo-backend): implement recurrence handling and fix N+1 query
- Implement recurring task handling using rrule library
  - createNextOccurrence() creates next task instance when completing recurring task
  - calculateNextStartDate() maintains offset between start/due dates
  - Copies labels, subtasks (reset), and metadata to new occurrence
  - Respects recurrenceEndDate limit

- Fix N+1 query problem for task labels
  - Replace individual loadTaskLabels() calls with batch loadTaskLabelsBatch()
  - Reduces database queries from O(2n) to O(2) for task lists
  - Uses Maps for O(1) lookups when combining tasks with labels

- Add Jest test coverage (25 tests)
  - CRUD operations, task status changes, recurrence
  - Special queries (inbox, today, completed)
  - Batch loading efficiency verification

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-10 21:12:06 +01:00
Wuesteon
39b04e4b34 🐛 fix(auth): enable automatic token refresh across all web apps
Users were getting signed out after ~15 minutes because API clients were
reading tokens directly from localStorage without triggering the refresh
logic. The tokenManager exists with proper refresh capability but was
never being used.

Changes:
- Add getValidToken() method to auth stores in 9 web apps
- Update API clients to use authStore.getValidToken() instead of localStorage
- Token refresh now happens proactively before requests fail

Apps updated: chat, calendar, picture, zitare, contacts, todo, clock, manacore, manadeck

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-10 20:52:29 +01:00
Wuesteon
6f74e1d9a6 feat(chat,picture): add OpenRouter integration and credit system
Chat:
- Add OpenRouter as primary AI provider with multiple models
- Update chat service with new model configurations
- Add model seed data for Llama, DeepSeek, Mistral, Claude, GPT-4o

Picture:
- Integrate @mana-core/nestjs-integration for credit system
- Implement freemium model (3 free generations, then 10 credits)
- Migrate storage to @manacore/shared-storage
- Add comprehensive project documentation
2025-12-10 20:46:33 +01:00
Till-JS
1040b54058 fix(calendar): fix Todo integration and show all tasks in sidebar
- Fix /tasks/upcoming endpoint 500 error (Invalid time value)
- Use inArray instead of or() for batch label loading
- Show all todos in sidebar (overdue + today + upcoming)
- Make todo list scrollable with max-height
- Improve error handling: don't mark service unavailable if today tasks loaded

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-10 20:34:25 +01:00
Till-JS
812a6f5090 fix(todo): resolve type errors and update component props
- Fix KanbanColumn to use DndEvent type from svelte-dnd-action
- Extend UpdateTaskDto and store updateTask method to support all task fields
- Add metadata type cast in +page.svelte for compatibility
- Create feedback service and update FeedbackPage to use new API
- Fix forgot-password page: rename handler to onForgotPassword, use titleForm
- Remove deprecated enableGoogle/enableApple props from RegisterPage

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-10 20:16:17 +01:00
Till-JS
0b28eba3f2 chore: various UI improvements and fixes
Calendar:
- Fix EventDetailModal and QuickEventOverlay component updates
- Update TodoDetailModal and TodoItem components
- Remove unused settings section code
- Fix network page styling

Todo Backend:
- Improve task service validation

Shared UI:
- Update Card, DataCard, Input components with improvements
- Enhance TagBadge with better color handling
- Fix TagEditModal and TagList components
- Update PillNavigation and PillDropdown styling
- Add NetworkGraph improvements
- Update CommandBar, FormModal, AppsPage components
- Fix chart types and GlobalSettingsSection

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-10 20:05:02 +01:00