Commit graph

490 commits

Author SHA1 Message Date
Till-JS
c3dd7703b2 test(skilltree): add comprehensive test suite for web and backend
Add 91 tests covering the SkillTree application:

Web (Vitest - 53 tests):
- Level calculation and XP progress functions
- Branch validation and factory functions
- createDefaultSkill and createActivity helpers

Backend (Jest - 38 tests):
- SkillService CRUD operations
- XP system with level-up detection
- User stats aggregation
- Custom Drizzle ORM mock with thenable query builder
2026-01-29 12:43:19 +01:00
Till-JS
e145c642d7 📝 docs(devlog): add 2026-01-28 massive feature sprint devlog
Document 74 commits covering:
- SkillTree app (gamified skill tracking with XP system)
- Questions app (AI research assistant with mana-search)
- mana-search microservice (SearXNG meta-search)
- Matrix Client Phase 2 (file upload, message actions, room management)
- @manacore/bot-services shared package
- matrix-mana-bot unified gateway
- 4 new Matrix bots (Todo, NutriPhi, Zitare, Clock)
- OIDC Provider for Matrix SSO
- VictoriaMetrics + DuckDB monitoring upgrade
- Demo mode for Calendar, Todo, Contacts apps

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-29 12:19:38 +01:00
Till JS
5e92a52b8e
Merge pull request #28 from Memo-2023/claude/skill-tree-app-planning-CO4xH
Add SkillTree app with backend API and web frontend
2026-01-29 12:13:20 +01:00
Till JS
a930e285b2
Merge pull request #27 from Memo-2023/claude/plan-questions-app-UKqD5
Add Mana Search Service design document and architecture
2026-01-29 12:12:29 +01:00
Till JS
8692690f51
Merge pull request #26 from Memo-2023/claude/matrix-setup-documentation-Ketxw
feat: Add Matrix Mana Gateway Bot with unified bot architecture
2026-01-29 12:12:02 +01:00
Claude
076e5518cc
feat(skilltree): connect web app to backend API
- Add API client for backend communication
- Add skills and activities API modules
- Add auth store with Mana Core Auth integration
- Update skills store to use API when authenticated
- Keep IndexedDB as offline fallback
- Add hooks.server.ts for runtime env injection

https://claude.ai/code/session_015XCsTDS9aLZ64Zin4HU6ex
2026-01-29 11:05:32 +00:00
Claude
928cac6799
feat(questions): add production-ready pages and components
- Add forgot-password page with email recovery flow
- Add settings page with account, theme, notifications, privacy options
- Add collections management page with create/edit/delete functionality
- Add CollectionModal component for collection CRUD
- Add ErrorAlert component for consistent error handling
- Add loading skeletons (QuestionSkeleton, QuestionDetailSkeleton, AppLoadingSkeleton)
- Update layouts and pages to use skeletons and error handling

https://claude.ai/code/session_01Rk3YVJCU3nM8uvVPghRz6r
2026-01-29 00:43:59 +00:00
Claude
e96d76ab8e
feat(infra): integrate matrix-mana-bot into deployment
- Add matrix-mana-bot to docker-compose.macmini.yml
- Add setup-mana-bot.sh script for bot registration
- Add dev:matrix:* scripts to root package.json
- Add devlog entry documenting the new architecture

The gateway bot is now ready for deployment alongside
the existing standalone Matrix bots.

https://claude.ai/code/session_015bwcqVRiFmSydYTjvDJGTc
2026-01-29 00:37:38 +00:00
Claude
f93ca53dfb
feat(questions): implement SvelteKit web app
Complete web app implementation with Svelte 5 runes:

Features:
- Authentication: Login, register pages with mana-core-auth integration
- Question List: Filterable list with search, status, and collection filters
- Question Detail: View research results and sources
- New Question: Create questions with depth selection and auto-research
- Collections Sidebar: Navigate and organize questions by collection
- Dark Mode: Full theme support with toggle

Structure:
- src/lib/api/: API clients for all backend endpoints
- src/lib/stores/: Svelte 5 reactive stores (auth, questions, collections)
- src/lib/types/: TypeScript interfaces
- src/routes/(app)/: Protected app routes
- src/routes/(auth)/: Public auth routes

Configuration:
- Port: 5111
- Tailwind CSS with shared theme
- lucide-svelte icons

Also updated:
- CLAUDE.md: Added web app documentation
- package.json: Updated dev:questions:full to include web

https://claude.ai/code/session_01Rk3YVJCU3nM8uvVPghRz6r
2026-01-29 00:00:53 +00:00
Claude
7a0b26eb3d
feat(skilltree): add NestJS backend with Docker deployment
- Add NestJS backend with Drizzle ORM and PostgreSQL
- Implement skills CRUD API with XP/level progression system
- Add activities tracking endpoint
- Configure Docker containers for backend (port 3024) and web (port 5195)
- Add skilltree services to docker-compose.macmini.yml
- Add CI build jobs for skilltree-backend and skilltree-web

https://claude.ai/code/session_015XCsTDS9aLZ64Zin4HU6ex
2026-01-28 23:59:50 +00:00
Claude
c9f3d8ae47
feat(matrix): add Phase 2 features
File Upload & Media:
- Send images, videos, audio, and files
- Display media in timeline with thumbnails
- Download links for files
- Upload progress indicator

Message Actions:
- Reply to messages with quote preview
- Edit own text messages
- Delete (redact) own messages
- React with emoji (store only, UI pending)

Room Management:
- Create room dialog (DM or group)
- User search and invite
- Room settings panel with member list
- Leave room functionality

UI Improvements:
- German translations
- Message hover actions
- Reply/Edit preview in input
- Date separators in timeline

https://claude.ai/code/session_01RUrt2qN1D3nVh9HcGpwoby
2026-01-28 23:54:24 +00:00
Claude
ec96d4e952
feat(questions): implement questions app NestJS backend
Complete backend implementation for the AI-powered research assistant app:

Database Schema (Drizzle ORM):
- collections: Organize questions into folders with colors and icons
- questions: User questions with status, priority, tags, and research depth
- research_results: Results from mana-search service with summaries and key points
- sources: Extracted content from web search results
- answers: AI-generated answers with ratings and citations

NestJS Modules:
- QuestionModule: CRUD operations with filtering, pagination, and status management
- CollectionModule: Collection management with reordering and question counts
- ResearchModule: Integration with mana-search microservice for web search
- AnswerModule: Answer management with ratings and acceptance tracking
- SourceModule: Source content retrieval and management
- HealthModule: Health checks for database and search service

Features:
- Full JWT authentication via @manacore/shared-nestjs-auth
- Research depths: quick (5 sources), standard (15), deep (30)
- Automatic content extraction and summarization
- Follow-up question generation

Also updated:
- Root package.json: Added questions:* development scripts
- setup-databases.sh: Added questions database setup

https://claude.ai/code/session_01Rk3YVJCU3nM8uvVPghRz6r
2026-01-28 23:52:22 +00:00
Claude
5b291c1a17
feat(skilltree): add edit, level-up celebration, templates, and tree view
- Edit skill modal with delete confirmation
- Animated level-up celebration with particles
- Skill templates for quick onboarding (Web Dev, Fitness, Languages, etc.)
- Radial skill tree visualization (/tree)
- Export/import functionality for data backup
- Tree view link in header

https://claude.ai/code/session_015XCsTDS9aLZ64Zin4HU6ex
2026-01-28 20:38:49 +00:00
Claude
12ad8e83d5
feat(skilltree): add SkillTree MVP - gamified skill tracking app
- SvelteKit web app with Svelte 5 runes
- IndexedDB storage for offline-first experience
- 6 skill branches: Intellect, Body, Creativity, Social, Practical, Mindset
- XP system with 6 levels (Unbekannt -> Meister)
- Activity logging with timestamps
- Stats overview (total XP, skills, streak)
- Branch filtering and recent activities feed

https://claude.ai/code/session_015XCsTDS9aLZ64Zin4HU6ex
2026-01-28 20:32:05 +00:00
Claude
4e622a66de
feat(matrix): add SvelteKit Matrix client (Phase 1)
Implements a minimal self-hosted Matrix chat client with:
- matrix-js-sdk integration with Svelte 5 runes store
- Password login with homeserver discovery
- Room list (DMs and groups) with unread counts
- Message timeline with typing indicators
- Send messages with Enter key
- Responsive chat UI with Tailwind CSS

Project structure:
- apps/matrix/apps/web: SvelteKit client (port 5180)
- apps/matrix/packages/shared: Shared types

Commands: pnpm dev:matrix:web

https://claude.ai/code/session_01RUrt2qN1D3nVh9HcGpwoby
2026-01-28 20:21:13 +00:00
Till-JS
1e9169cb94 📝 docs(landing): add devlog for telegram/matrix bots integration 2026-01-28 16:13:24 +01:00
Till-JS
ff427b1625 📝 docs(todo): update commit hash in cleanup plan 2026-01-28 16:13:15 +01:00
Till-JS
111fc473d9 🐛 fix(auth): implement password reset email link handler
- Add GET /api/auth/reset-password/:token endpoint to handle email links
- Create password-reset-redirect store to track source app URLs
- Include callbackURL in reset emails for proper app redirection
- Add redirectTo parameter to forgotPassword in shared-auth
- Create /reset-password page in calendar app with DE/EN translations
- Update calendar authStore with resetPasswordWithToken method

Fixes 404 error when clicking password reset link from email
2026-01-28 15:49:33 +01:00
Till-JS
3389252d3a fix(todo-web): remove localhost fallbacks triggering local network permission
- Remove localhost:3018 pattern from service worker cache strategies
- Update auth store to only use localhost fallback in development mode
- Bump service worker cache version to v3 to force update

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 15:33:36 +01:00
Till-JS
c031540ef1 🚀 ci(nutriphi): add production deployment configuration
- Add backend Dockerfile with multi-stage build and health checks
- Add web Dockerfile with SvelteKit static env vars
- Add docker-entrypoint.sh for automatic DB migration
- Add nutriphi-backend and nutriphi-web to docker-compose.macmini.yml
- Add CI/CD detection and build jobs for nutriphi
- Update CORS origins in mana-core-auth to include nutriphi.mana.how
- Include nutriphi in deploy:landing:all script

Ports: Backend 3023, Web 5189
Domain: nutriphi.mana.how / nutriphi-api.mana.how
2026-01-28 15:29:43 +01:00
Till-JS
7138236046 feat(calendar): add runtime STT URL injection for production
- Add PUBLIC_STT_URL to hooks.server.ts runtime injection
- Update stt.ts to use runtime-injected URL with fallback
- Update .env.development to use production STT URL
- Update generate-env.mjs with STT URL mapping

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 15:25:39 +01:00
Till-JS
3ff8d3833b feat(nutriphi): prepare for production release with tests and improved UX
- Remove broken header links to non-existent settings/profile pages
- Replace header links with settings page link
- Remove TODO comments for credit system in analysis controller
- Add comprehensive error handling with German messages in meals store
- Add loading states, retry buttons, and error displays in UI components
- Create new settings page with daily goals editor
- Add 99 tests across backend, web, and shared packages:
  - Backend: MealService, GoalsService, StatsService, FavoritesService,
    RecommendationsService, nutrition.utils (Jest)
  - Web: API client tests with mocks (Vitest)
  - Shared: utility function tests (Vitest)
- Set up test infrastructure (Jest for NestJS, Vitest for SvelteKit)
2026-01-28 15:23:35 +01:00
Till-JS
437d612e81 ♻️ refactor(contacts): remove statistics, network view and session storage; implement demo mode
- Remove statistics feature (stores, routes, ~560 LOC)
- Remove network view with D3.js graph (~1,100 LOC)
- Remove session-based contact storage
- Add demo contacts for unauthenticated users (10 sample contacts)
- Add auth gate prompts for create/edit/delete/favorite actions
- Update layout with Demo-Modus banner and event handling
- ~1,760 lines of code removed for simpler, cleaner codebase

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 14:12:19 +01:00
Till-JS
1dc4f58edb feat(todo): prepare for production deployment
- Fix type-check errors (subtask id, duplicate currentLocale)
- Add complete Astro landing page with Hero, Features, Pricing, CTA
- Add production environment templates (.env.example, .env.production.example)
- Add docker-compose.prod.yml for production deployment
- Add deploy.sh script for server deployment
- Add /health endpoint for web app health checks
- Improve docker-entrypoint.sh with database wait logic
- Remove references to deleted statistics and session-tasks stores

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 14:04:27 +01:00
Till-JS
99fdf1d17f ♻️ refactor(todo): remove statistics, network view and session tasks; implement demo mode
Remove complex, low-usage features to simplify codebase:
- Statistics/Heatmap: ~1,900 LOC removed (charts, store, page)
- Network View: ~800 LOC removed (D3.js graph, store, API, page)
- Session Tasks: ~190 LOC removed, replaced with demo mode

Demo mode improvements:
- Static sample tasks instead of confusing sessionStorage behavior
- Auth gate shows when users try to create/edit/complete tasks
- Clear "Demo-Modus" banner for unauthenticated users
- Better UX: users can explore the app without frustration

Total estimated savings: ~2,800 LOC
2026-01-28 13:58:15 +01:00
Till-JS
54752d4dac 📝 docs(calendar): update cleanup plan with session events commit hash 2026-01-28 13:42:08 +01:00
Till-JS
cef8321667 ♻️ refactor(calendar): replace session events with demo mode
- Remove session-events.svelte.ts (~154 LOC)
- Add demo-events.ts with static sample events
- Simplify events.svelte.ts by removing session logic
- Update AuthGateModal for demo mode messaging
- Show auth gate when users try to create/edit events
- Update banner from "Gast-Modus" to "Demo-Modus"

First-time visitors now see realistic sample events instead of an
empty calendar. Clicking on events or trying to create new ones
prompts for login, providing a better UX than the previous session
storage approach where events would be lost on tab close.
2026-01-28 13:41:47 +01:00
Till-JS
a44664c691 📝 docs(calendar): update cleanup plan after network view removal 2026-01-28 13:31:42 +01:00
Till-JS
9a93ca0c89 🔥 refactor(calendar): remove Network View feature
Remove Network View (D3 event graph visualization) to reduce complexity:
- Delete NetworkView.svelte component (~416 LOC)
- Delete network.svelte.ts store (~371 LOC)
- Delete network.ts API client (~47 LOC)
- Delete view-mode.svelte.ts store (~76 LOC)
- Remove network tab from view switcher
- Simplify view switching logic

Also adds voice recording feature (separate work, included to fix build):
- Add VoiceRecordButton and VoiceRecordingModal components
- Add voice-recording store and audio utilities
- Integrate voice input into calendar layout

Add CLEANUP_PLAN.md documenting planned simplifications.

Total removal: ~910 LOC
2026-01-28 13:31:13 +01:00
Till-JS
2f3473b73f 🔥 refactor(calendar): remove statistics and heatmap feature
Remove unused statistics/heatmap functionality to reduce complexity:
- Delete statistics.svelte.ts and heatmap.svelte.ts stores
- Delete StatsSidebarSection.svelte and StatsOverlay.svelte components
- Remove heatmap toggle button from toolbar
- Remove "Statistiken" nav item and Cmd+3 shortcut
- Clean up heatmap CSS from all calendar views
2026-01-28 13:10:58 +01:00
Till-JS
2e71b5f1d9 feat(calendar): add Google/Apple Calendar sync module
Implement external calendar synchronization:
- CalDAV sync for Apple Calendar and generic CalDAV servers
- Google Calendar API integration with OAuth2 flow
- iCal URL import for read-only calendar feeds
- Bi-directional sync with configurable direction
- Scheduled background sync (every 5 minutes)
- Manual sync trigger via API

New endpoints:
- GET/POST /api/v1/sync/external - List/connect external calendars
- GET/PUT/DELETE /api/v1/sync/external/:id - Manage external calendar
- POST /api/v1/sync/external/:id/sync - Trigger manual sync
- POST /api/v1/sync/caldav/discover - Discover CalDAV calendars
- GET /api/v1/sync/google/auth-url - Get Google OAuth URL
- GET /api/v1/sync/google/callback - Handle OAuth callback
- GET /api/v1/calendars/:id/export.ics - Export calendar as iCal

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 12:41:32 +01:00
Till-JS
2e7378710f 🧹 chore(calendar): cleanup debug logs and stale comments
- Replace console.error with NestJS Logger in NetworkService
- Remove debug console.log statements from mana page and events store
- Remove stale TODO comment in ShareController (user.email already available)
- Update TODO comments to "Workaround" notes in EventContextMenu
- Fix port fallback in main.ts (3016 → 3014) for consistency
2026-01-28 12:31:43 +01:00
Till-JS
78ff102631 feat(calendar): add production launch features
- Email Service: Add email.service.ts with Brevo SMTP for reminders and
  calendar share invitations (German templates)
- Push Notifications: Add notification module with Expo Push API support,
  device token management, and notification.controller.ts endpoints
- Reminder Service: Integrate email and push notifications in reminder
  processing, add userEmail field to reminders schema
- Share Service: Send invitation emails when sharing calendars
- Unit Tests: Add jest.config.js and 63 tests for CalendarService,
  EventService, ReminderService, and ShareService with mock utilities
- Database Migrations: Add migrate.ts with advisory locks for safe
  production deployments
- Type-Checking: Enable type-check script for web app, fix all TypeScript
  errors including CalendarViewType completeness and optional field access

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 12:30:01 +01:00
Till-JS
cb130191ab 🔥 chore(picture): remove PostHog analytics for GDPR compliance
- Remove posthog-js dependency from picture web app
- Delete PostHog integration module and setup documentation
- Remove PostHog initialization from root layout
- Clean up environment variables from .env.example
- Update logger comments to remove Sentry references
- Update PROJECT_OVERVIEW.md to reflect Umami as analytics tool
2026-01-28 12:24:22 +01:00
Till-JS
e72f3b7865 🧑‍💻 feat(dx): improve local development experience
- Add dev credentials pre-fill on login page (dev@manacore.local)
- Add initialPassword prop to LoginPage component
- Add seed script for dev user (pnpm db:seed:dev in mana-core-auth)
- Add OLLAMA_URL to .env.development for Mac Mini connection
2026-01-27 16:58:11 +01:00
Till-JS
ca00672016 feat(chat): add model comparison feature
Add /compare route to test prompts against multiple Ollama models:
- CompareInput: prompt textarea with temperature/max tokens controls
- ModelResponseCard: displays response with status, metrics, markdown
- ModelResponseGrid: responsive grid layout for side-by-side comparison
- CompareProgress: progress bar with cancel functionality
- Svelte 5 runes-based store for state management
- Add Scales icon to shared-ui navigation
2026-01-27 16:57:56 +01:00
Till-JS
14c83cb4bd feat(shared-auth-ui): add GuestWelcomeModal for guest onboarding
Add a unified welcome modal for guest mode that displays:
- App icon, name, and description from shared-branding
- Feature list of what guests can do (localized DE/EN)
- Warning about local-only data storage
- Login, Register, Help, and "Continue as Guest" buttons

New files:
- GuestWelcomeModal.svelte - The modal component
- guestWelcome.ts - localStorage utilities for tracking seen state

Integrated into: contacts, chat, todo, calendar, and clock apps
2026-01-27 16:57:14 +01:00
Till-JS
876fd43a1c 🔥 chore: remove maerchenzauber from codebase
- Remove app definition from MANA_APPS and APP_URLS
- Remove AppId type entry and branding config
- Delete app icon SVG and StorytellerLogo component
- Remove StorytellerLogo export from logos/index.ts and main index.ts
- Delete maerchenzauber.css theme file
- Delete landing page content (maerchenzauber-de.md)
- Remove env generation config for backend/mobile/web
- Update CLAUDE.md archived projects list
2026-01-27 15:57:19 +01:00
Till-JS
d1e9c87b1c fix(todo): correct health check URL in startup log
The health endpoint is at /health (excluded from api/v1 prefix),
not /api/v1/health.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-27 03:39:32 +01:00
Till-JS
c4c00dc885 📝 docs: add devlog for 2026-01-26 monitoring, auth & AI updates
Document 54 commits covering Prometheus metrics, Brevo email service,
email verification flow, Ollama integration, Speech-to-Text service,
and two new Telegram bots.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-27 03:37:59 +01:00
Till-JS
aeabd21d4a feat(storage): add verified banner to login page
Add verification status query params to storage login page,
consistent with other apps.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-27 01:32:59 +01:00
Till-JS
cb3c1ffb93 ♻️ refactor(todo): replace edit modal with inline task editing
Redesign TaskItem to expand inline for editing instead of opening
a separate modal. Improves UX by keeping user context and reducing
visual interruption. Removes modal-related code from pages.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-27 01:32:14 +01:00
Till-JS
09b8d7b384 feat(auth-ui): show email verified banner on login pages
Add verified banner and email pre-fill to LoginPage component when
users are redirected after email verification. Updates all app login
pages to pass verification params from URL query string.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-27 01:31:55 +01:00
Till-JS
2ccd063628 feat(auth): redirect users to source app after email verification
Add sourceAppUrl tracking during registration to redirect users back
to the app they registered from after email verification. Includes
URL validation for security (only *.mana.how, mana.how, localhost).

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-27 01:31:31 +01:00
Till-JS
3df7157389 🐛 fix(calendar): fix app hanging and layout issues
- Fix $effect infinite loop causing app to hang after guest mode
- Track viewType and currentDate primitives instead of derived viewRange
- Fix root layout to use h-screen flex container for full height
- Fix guest banner offset using padding instead of margin
- Calendar now fills entire screen with UI floating on top
- Simplify i18n initialization
2026-01-26 21:20:29 +01:00
Till-JS
be365a0c1e feat(manacore): add email verification result pages
Add success and failure pages for email verification:
- /email-verified - shows success message with login button
- /verification-failed - shows error message with relevant actions

These pages are redirected to from mana-core-auth's verify-email endpoint.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-26 20:43:02 +01:00
Till-JS
def7249058 🚸 feat(todo): redesign homepage empty state and section visibility
- Remove "Meine Aufgaben" header (sections are self-explanatory)
- Add enhanced empty state with animated sparkle icon, motivational
  message, and clickable syntax examples that insert into input bar
- Implement smart section visibility (only show sections with tasks,
  but always show "Today" as primary workspace)
- Add onboarding tip for users with 1-3 tasks showing #tags and
  !priority syntax
- Add quick-input-set event listener to InputBar for example clicks
2026-01-26 16:29:42 +01:00
Till-JS
6f51f1a24c feat(chat-backend): integrate Ollama for local LLM inference
- Add OllamaService for local model inference via Ollama API
- Update ChatService to route requests based on model provider
- Support both 'ollama' (local) and 'openrouter' (cloud) providers
- Add Gemma 3 4B as default model (free, runs on Mac Mini)
- Add SQL migration script for existing databases
- Update CLAUDE.md with Ollama configuration docs

Environment variables:
- OLLAMA_URL: Ollama server URL (default: http://localhost:11434)
- OLLAMA_TIMEOUT: Request timeout in ms (default: 120000)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-26 16:03:03 +01:00
Till-JS
4973cf8cf9 feat(todo): consolidate bars using ExpandableToolbar pattern from Calendar app
- Refactor TodoToolbar to use ExpandableToolbar (FAB + sliding panel)
- Create TodoToolbarContent with filter, sort, and view options
- Move toolbar from page to layout (consistent with Calendar app)
- Add dynamic bottomOffset to QuickInputBar when toolbar expands
- Add isToolbarCollapsed state with localStorage persistence
- Remove auth redirects from kanban and settings pages for guest mode support

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-26 15:33:24 +01:00
Till-JS
5cf3c334fd fix(calendar): correct port to 3016 2026-01-26 10:37:49 +01:00