Fix Dockerfile to include all required shared packages and add
health endpoint for Docker healthcheck. Enable skilltree-web
service in docker-compose.macmini.yml.
- Increase resize handle height from 8px to 20px with visual grip indicator
- Show live time preview during resize operations
- Add drag-to-create functionality: click and hold on empty cell to drag and create events with custom duration
- Fix zitare TypeScript errors (SearchResultItem -> QuickInputItem, createUserSettingsStore API)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Profile Features:
- EditProfileModal for name changes
- ChangePasswordModal with validation
- DeleteAccountModal with email confirmation
Subscription Features:
- Full subscription page at /subscription
- Plan comparison with monthly/yearly toggle
- Stripe Checkout integration
- Billing portal access
- Invoice history display
Credits Features:
- Stripe Checkout integration for credit purchases
- Loading states and toast notifications
- Success/error handling with URL params
API Services:
- profile.ts: getProfile, updateProfile, changePassword, deleteAccount
- subscriptions.ts: getPlans, getCurrentSubscription, createCheckout, etc.
- credits.ts: added initiatePurchase method
Also includes German/English i18n translations.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add PillTagSelector component for tag selection in navigation
- Remove separate TagStrip bar (saves 70px vertical space)
- Add tag-selector support to PillNavigation element rendering
- Remove hasTagStrip prop from DateStrip/DateStripFab components
- Export PillTagSelector and types from shared-ui
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add new dashboard widget showing storage usage stats:
- Total storage used and file count
- Recent files list with icons
- Link to open Storage app
Backend changes:
- Add GET /api/v1/files/stats endpoint to storage backend
- Returns totalFiles, totalSize, favoriteCount, recentFiles
Frontend changes:
- Add storageService API client
- Add StorageUsageWidget component
- Add i18n translations (de/en)
- Register widget in dashboard types and container
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add backend endpoints for user profile management:
- GET /auth/profile - retrieve user profile data
- POST /auth/profile - update name and profile image
- POST /auth/change-password - change password (requires current)
- DELETE /auth/account - soft-delete account (requires password)
Security features:
- Password verification before sensitive actions
- Soft-delete preserves data for retention
- Security events logged for audit trail
- Rate limiting on sensitive endpoints
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add padding-top (1rem) and padding-bottom (200px) to time-column and day-column
- Ensures content can be scrolled past the bottom UI (PillNav, InputBar, etc.)
- Applied to DayView, WeekView, and MultiDayView
- Remove credit display from responses (credits still charged)
- Remove "Synchronisiert" text (sync still works)
- Use sendMessage instead of sendReply to avoid quoting user ID
- Simplify status output
- Use cleaner formatting with dots instead of pipes
- Hide tasks in calendar by default on app load (not persisted from sessions)
- Auto-scroll to current hour when loading DayView, WeekView, MultiDayView
- Center current hour in viewport for immediate visibility
- Exclude task/sidebar settings from cloud sync to ensure clean initial state
- Add touch-based swipe-back handler for edge swipes from left
- Show visual indicator (arrow + progress bar) during swipe
- Use history.back() for proper navigation history handling
- Only activate in 30px left edge zone to avoid scroll conflicts
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Fix datenschutz link to point to manacore-landing.pages.dev
- Update hosting info to reflect own infrastructure in Germany
- Add Cloudflare CDN section
- Update analytics section with Umami details (no cookies)
- Change email domain from mana.ai to mana.how
- Remove archived Memoro app section
- Update date to February 2026
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Change sidebarCollapsed default to true (tasks hidden by default on mobile)
- Add leftAction snippet slot to InputBar component
- Move VoiceRecordButton inside InputBar instead of floating position
- Remove obsolete voice-button-wrapper styles
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add Dockerfile for production build
- Add docker-entrypoint.sh for runtime config
- Add hooks.server.ts for client-side env injection
- Add zitare-web service to docker-compose.macmini.yml
- Port 5012
- Depends on zitare-backend
- Health check on /health endpoint
mana-core-auth has a double prefix (/api/v1/api/v1/auth) due to
global prefix + controller prefix. Update SessionService to use
the correct paths.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add Dockerfile for zitare-backend (multi-stage build, port 3007)
- Add docker-entrypoint.sh for database setup
- Add zitare-backend service to docker-compose.macmini.yml
- Update matrix-zitare-bot to depend on zitare-backend
- Add zitare-backend to CI workflow (change detection + build job)
- Add account deletion confirmation email
- Extend data export with sessions, security events, transactions
- Add DSGVO info banner with privacy policy link
- Add data retention periods section
- Add cookie info (no tracking cookies)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
After successful !login, the bot now stores a persistent link between
the Matrix user ID and the Mana account in mana-core-auth. This allows
the bot to auto-authenticate users in the future without requiring
another !login command.
Changes:
- Add createMatrixUserLink() method to SessionService
- Call link creation after successful login
- Add MANA_CORE_SERVICE_KEY to todo and calendar bot docker config
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add missing year, source, and authorBio fields to all quotes
- Fix incorrect weis-1 quote (was Konfuzius, now Laozi with Tao Te King)
- Add new quotes: weis-9 (Konfuzius), liebe-6 (Saint-Exupéry), leben-7 (Horaz),
erfolg-5/6 (Goethe, Sassoon), glueck-6 (Aristoteles), freund-5 (Cicero),
mut-6 (Vergil), hoff-4/5 (Tutu, Cicero), natur-5/6 (Muir, Heraklit)
- Total: 60 quotes with complete multilingual metadata
- All author bios now include birth/death years
- Add 6-language support: original, de, en, it, fr, es
- Add quote metadata: source, year, tags, imageUrl, authorBio, verified
- Add originalLanguage field to preserve original quote language (la, el, zh, sa, etc.)
- Update all 50 quotes with full translations and metadata
- Add new utility functions: getQuoteText, getQuotesByTag, getAllTags,
getQuotesByAuthor, getVerifiedQuotes, getQuotesByYearRange,
getQuotesByOriginalLanguage
- Update matrix-zitare-bot to use new multilingual schema
- Show 90-day grid instead of 365 for better visibility
- Add month labels above the contribution grid
- Use European week start (Monday)
- Add animated hero section with gradient backgrounds
- Improve stat cards with hover effects and shadows
- Add secondary stats: Active Days, Commits/Day, Max Streak
- Make grid cells clickable to open respective devlog
- Add crown icon for top contributor
- Show percentage in contributor progress bars
- Add date badges to recent activity items
- Use glassmorphism effects and smooth animations
- Remove local JSON storage from matrix-todo-bot and matrix-calendar-bot
- Delete TodoService, CalendarService and their modules
- Add requireLogin() helper that prompts users to authenticate
- All bot commands now require login before any operation
- Data is always synced with respective backends (todo-backend, calendar-backend)
- Update CLAUDE.md documentation for both bots
BREAKING CHANGE: Bots no longer work without authentication
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Mobile users now get a separate room list and chat view:
- /chat shows full-screen room list on mobile
- /chat/[roomId] shows full-screen chat with back button
- Desktop retains side-by-side layout unchanged
- Last room restore only happens on desktop
Switch manacore-web from GHCR image to local build for faster
deployment of frontend changes (self-service /settings/my-data).
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add a floating action button in the bottom-left corner that appears
when the sidebar is closed on mobile/tablet devices. Shows unread
message count badge.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Use _rooms.some() instead of getRoom() to check if the last selected
room exists, as the client's internal room cache may not be populated
yet at PREPARED state.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Changed sharedWithUserId and invitedBy from UUID to TEXT type
in calendar_shares table to match Mana Core Auth user ID format.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Save the last selected room ID to localStorage and automatically
restore it when the app loads and sync is prepared.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
All backends with setGlobalPrefix('api/v1') were registering routes
as /api/v1/api/v1/admin instead of /api/v1/admin. Changed all admin
controllers to use @Controller('admin') instead of @Controller('api/v1/admin').
Affected backends:
- calendar
- contacts
- picture
- presi
- todo
- zitare
- chat
Note: storage backend still uses @Controller('api/v1/admin') as it has
no global prefix.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add isSameSender and isLastInGroup props to fix type-check errors
when passing these values from Timeline.svelte.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Storage backend doesn't use setGlobalPrefix, so controller
needs full path @Controller('api/v1/admin')
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Photos, clock, storage backends use setGlobalPrefix('api/v1'),
so controller should use @Controller('admin') not @Controller('api/v1/admin')
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>