Commit graph

217 commits

Author SHA1 Message Date
Till JS
2d11ba6248 refactor(auth): remove all Google/Apple social login code
No external auth providers to keep authentication fully self-sovereign
and avoid dependency on third-party services. Removes Google Sign-In,
Apple Sign-In components, utilities, endpoints, translations, and
mobile dependencies across all apps and shared packages.

Google/Apple integrations for data sync (Contacts import, Calendar sync)
are intentionally preserved as they serve a different purpose.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 09:12:30 +01:00
Till JS
3500ac5e23 fix(citycorners): replace @const with direct function calls in templates
Svelte 5 restricts {@const} to block contexts only. Use direct
isOpenNow() calls in {#if} conditions instead.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-25 16:05:37 +01:00
Till JS
b9a9052ae5 feat(manascore): add extended codebase metrics to all app audits
Add LOC, source files, size, commits, contributors, first commit date,
TODO count, API endpoints, stores, and max file size metrics to all 20
ManaScore audit files with real measured data from the monorepo.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-25 15:12:15 +01:00
Till JS
3376b044bc fix(auth): resolve hardcoded localhost in user-settings across all web apps
The createUserSettingsStore was receiving a static auth URL evaluated at
module load time, before window.__PUBLIC_MANA_CORE_AUTH_URL__ was
injected by hooks.server.ts. In production this caused CSP violations
as settings API calls went to localhost:3001 instead of auth.mana.how.

Changes:
- Accept string | (() => string) for authUrl in shared-theme config
- Resolve authUrl lazily at fetch time instead of module load
- Fix fallback to empty string in non-dev environments (was localhost)
- Pass getAuthUrl as getter function in all 17 web apps

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-25 12:40:30 +01:00
Till JS
59c8974af8 refactor(manacore): use STORAGE_KEYS in all remaining localStorage calls
Replace hardcoded localStorage key strings in +layout.svelte,
welcome/+page.svelte, and onboarding store with centralized
STORAGE_KEYS constants. Completes the storage-keys refactor.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-25 11:55:49 +01:00
Till JS
0519440705 refactor(manacore): centralize localStorage keys in storage-keys config
Extract hardcoded localStorage key strings into a central STORAGE_KEYS
constant to avoid key collisions and improve maintainability.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-25 10:36:40 +01:00
Till JS
7077c0a397 feat(help): add help pages to 10 remaining web apps
Add bilingual (DE/EN) help content and help page routes for Clock,
Context, ManaCore, ManaDeck, NutriPhi, Photos, Planta, Presi,
Questions, and SkillTree. Uses shared-help-types and shared-help-ui
packages consistent with already-committed help pages in other apps.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-25 10:36:22 +01:00
Till JS
73d5529495 fix(manacore): fix white screen when toggling todo completion in dashboard
Task links pointed to non-existent /task/{id} route in Todo app, causing
navigation to a 404 page. Replace passive checkbox div with interactive
button that toggles completion via API, and fix links to open Todo app root.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-25 10:21:44 +01:00
Till JS
7da67febd1 feat(manacore): nice-to-have UX polish
Onboarding auto-save (#18):
- Profile name auto-saved via profileService when clicking "Weiter"
- Non-blocking: save failure doesn't block onboarding flow
- Name synced to parent via bindable prop

Widget auto-refresh (#19):
- New useAutoRefresh() utility with visibility-aware polling
- Pauses refresh when tab is hidden, resumes on focus
- Credits: every 60s, Tasks: every 30s, Calendar: every 60s
- Silent refresh: doesn't show loading spinner on subsequent loads

Remove debug logs (#24):
- Removed console.log from AppSlider and auth SSO flow
- Kept console.warn for API retry (useful for debugging)

Dark mode on login (#20):
- Sun/moon toggle button on auth pages (top-right corner)
- Users can switch theme before logging in

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-25 10:20:12 +01:00
Till JS
12b3c4f0f3 feat(analytics): add custom event tracking to Context, SkillTree, Planta, Questions
Add app-specific Umami event helpers and integrate tracking into:
- Context: 6 events (document create/delete/pin, space create/delete, AI generated)
- SkillTree: 3 events (skill create/delete with branch, XP added with level-up)
- Planta: 4 events (plant analyzed/created/deleted, plant watered)
- Questions: 5 events (question create/delete, research started, collection create/delete)

Updates ManaScore analytics from 3/5 to 4/5 for all four apps.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-25 10:13:05 +01:00
Till JS
623ce1f051 feat(manacore): add UX improvements across dashboard
Breadcrumbs:
- New Breadcrumbs component for hierarchical navigation
- Added to Settings > My Data page

Keyboard shortcuts:
- Press ? anywhere to open shortcuts modal
- Shows Ctrl+1-8 nav, Esc, and ? shortcuts

Session timeout warning:
- Yellow banner appears when session expires in < 5 minutes
- "Sitzung verlangern" button to refresh token

Pagination:
- Admin users table now paginated (20 per page)
- Page controls with Zuruck/Weiter buttons
- Resets to page 1 on search

Better error messages:
- German HTTP status messages (401, 403, 404, 429, 500, 502, 503)
- "Sitzung abgelaufen" instead of "Authentication failed"
- "Keine Berechtigung" instead of generic 403

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-25 10:00:27 +01:00
Till JS
3075e515bd feat(analytics): add custom event tracking to Photos app
Add PhotosEvents helper (8 events) and integrate tracking into:
- Photos store: favorite toggle, delete, filters applied
- Albums store: create, delete, add/remove photos
- Upload page: photo uploaded

Updates ManaScore analytics from 3/5 to 4/5 (customEvents: true).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-25 09:59:42 +01:00
Till JS
bade0a17db feat(analytics): add custom event tracking to Storage app
Add StorageEvents helper (11 events) and integrate tracking into:
- Files store: download, delete, favorite, view mode toggle
- Shared page: share link copy/delete
- Trash page: restore, empty trash
- Search page: search performed with results count

Updates ManaScore analytics from 3/5 to 4/5 (customEvents: true).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-25 09:34:07 +01:00
Till JS
23261aab51 fix(manacore): address critical production readiness issues
1. Admin role gate: Nav link only shows for admin role users, admin
   layout redirects non-admins to /home with access denied message
2. Profile update: Replace stubbed setTimeout with real API call to
   profileService.updateProfile(), add empty name validation
3. Error boundaries: Wrap each dashboard widget in svelte:boundary
   with error UI showing widget name, error message, retry button
4. Payment page: Replace alert() with toast notification for
   unfinished payment integration (no more browser alerts)
5. Form validation: Add name validation in profile update

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-25 09:25:47 +01:00
Till JS
d2264f5360 feat(analytics): add Analytics Maturity metric to ManaScore and custom event tracking to 4 apps
Add new "Analytics Maturity" extended metric to ManaScore schema with 5 checks:
pageViewTracking, customEvents, authTracking, landingTracking, publicDashboard.
Populate analytics data across all 20 audit files. Document the metric in about.md.

Add app-specific Umami custom event helpers and integrate tracking into:
- ManaCore: 13 events (nav, onboarding, dashboard widgets, credits, settings)
- Presi: 12 events (deck/slide CRUD, presentation start/exit, sharing)
- Zitare: 9 events (quotes, favorites, categories, search, lists, language)
- Mukke: 12 events (upload, library, playlists, projects, editor export)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-25 09:20:59 +01:00
Till JS
979103b962 fix(manacore): re-add missing shared packages to Dockerfile
The generate-dockerfiles script overwrote the manual fix. Re-adding
shared-feedback-types, shared-help-content, shared-help-types, and
shared-help-ui.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-25 09:09:11 +01:00
Till JS
aeca35ee2b feat(observatory): add rivers, leaderboard, compare, and trends tabs
Four new tabs on the observatory page:

- Flusse: Horizontal scroll of all 6 data flow rivers with animated
  SVG preview, from/to labels, speed and width stats
- Rangliste: Sortable table of all 20 apps with score, trend, status
  dot, and mini bar charts for all 8 categories. Click any column
  header to sort, click row for detail panel
- Vergleich: Select up to 4 apps via chip selector, see overlaid
  radar charts and side-by-side category bar comparison
- Trends: Slope chart showing score evolution with hover highlight,
  trend annotations for big movers (+29 Storage, +16 Todo, +15
  Calendar), average score summary card

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-25 09:02:42 +01:00
Till JS
37b061f7e6 perf(infra): stagger Docker health check start periods
Distribute start_period values across service groups to prevent
thundering herd of simultaneous health checks. Backends: 40-60s,
web: 20-45s, bots: 15-35s, monitoring: 10-30s.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-25 08:31:00 +01:00
Till JS
31af413b77 fix(manacore): add missing shared packages to Dockerfile
Add shared-feedback-types, shared-help-content, shared-help-types,
and shared-help-ui to Docker COPY statements.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-25 08:26:48 +01:00
Till JS
80beef252c feat(observatory): add tabbed gallery views for plants and lakes
Three tabs on the observatory page:
- Seenplatte: the main interactive landscape (existing)
- Pflanzen: horizontal scroll gallery of all 20 apps as plant cards,
  grouped by status (Mature/Production/Beta/Alpha), each with SVG
  preview, score, type label, trend indicator. Click opens detail panel.
- Seen: horizontal scroll of all 6 infrastructure lakes with gradient
  preview, description, clarity and fill level stats.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-25 08:24:29 +01:00
Till JS
a432c77286 docs: add devlog for evening session 2026-03-24
41 commits: PWA icons for all apps, Mac Mini port exhaustion fix,
Todo UX overhaul (inline edit, drag fix, long press), Dashboard
widget shows all tasks, Dockerfile validator, auth improvements.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-25 08:20:44 +01:00
Till JS
f2488f86fe feat(infra): add workspace dependency audit script
New script scans source imports vs package.json deps to catch missing
workspace dependencies that work locally but break in Docker.
Fixed: manadeck-web and presi-web missing shared-stores.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-24 22:36:11 +01:00
Till JS
90c438e267 feat(infra): auto-generate Dockerfile COPY statements from package.json
New script generates COPY blocks between marker comments, eliminating
manual maintenance. All 17 web Dockerfiles updated with markers.
Supports --check flag for CI validation.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-24 22:33:07 +01:00
Till JS
23dac3272e feat(observatory): add tooltips, detail panel, radar chart, and atmosphere
Phase 5 - Interactivity:
- Hover tooltip with score, status, category bars on every plant
- Click opens slide-in detail panel with 8-axis radar chart
- Panel shows all category scores, app links, ManaScore link
- Escape key and backdrop click close the panel
- Pan vs click distinction (no panel on drag)

Phase 6 - Atmosphere:
- Dynamic sky that follows real time of day (sunrise/noon/sunset/night)
- Stars with twinkling animation at night
- Sun glow during golden hour
- Birds flying across the scene (daytime)
- Dragonflies circling over lakes
- Butterflies near plants
- Fireflies at night (glowing, drifting)
- Time updates every minute

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-24 22:21:04 +01:00
Till JS
5c2a8d07e3 fix(manacore): add date-fns to package.json for Docker build
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-24 21:28:54 +01:00
Till JS
02db49175a fix(observatory): use inline styles to ensure SVG renders correctly
Replaced Tailwind utility classes with inline styles for the container
and SVG element to prevent CSS purging issues in production build.
Added explicit preserveAspectRatio and xmlns attributes.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-24 21:24:25 +01:00
Till JS
47dbe00d3d fix(manacore): show all open tasks in dashboard widget, not just today
The tasks widget only showed tasks with dueDate=today, so tasks without
a date appeared as "no tasks". Now fetches all open tasks via GET /tasks,
sorted by due date (today/overdue first, then future, then no date).

- Add getAllOpenTasks() to todo service
- Update widget to use getAllOpenTasks()
- Show due date label next to task title (with overdue highlighting)
- Update i18n: "Aufgaben heute" → "Aufgaben"

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-24 21:22:36 +01:00
Till JS
04f5afe671 feat(landing): replace simple footer with rich mega footer
4-column categorized footer showcasing the entire Mana ecosystem:
- Ecosystem: All 15 apps with status dots and expandable list
- Platform: Dashboard, Observatory, Playground, monitoring, community
- Insights: Devlog, ManaScore, Release Plan, Blueprints, landing pages
- Legal: Privacy, DSGVO, AI models, Impressum

Responsive: 4 cols desktop, 2 cols tablet, 1 col mobile.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-24 21:13:46 +01:00
Till JS
764843772a feat(manacore): add Seenplatte ecosystem observatory visualization
Interactive SVG lake landscape that visualizes all ManaCore apps as plants
around interconnected lakes. Plant type and health reflects ManaScore:
- Oaks/Birches for mature/production apps (85+)
- Young trees and reeds for beta apps
- Sprouts for alpha/prototype apps
- Animated water (waves, river flow particles)
- Pan & zoom navigation
- 6 lakes representing infrastructure (Auth, Redis, MinIO, 3x PostgreSQL)
- 20 apps with real ManaScore data

Accessible at /observatory in the ManaCore web dashboard.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-24 20:01:49 +01:00
Till JS
233a3c0732 docs: add devlog for morning session 2026-03-24
Credits cost tab, dashboard grid fix, PostgreSQL backup, port exhaustion
debugging, SkillTree achievements, Calendar i18n, CityCorners features.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-24 19:28:31 +01:00
Till JS
9431af656d docs(manascore): update scores for storage, todo, and calendar
- Storage: 82 → 84 (Dockerfile fix, offline prerender)
- Todo: PWA icons + offline prerender documented
- Calendar: PWA icons + offline prerender documented

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-24 19:18:53 +01:00
Till JS
6d231ee8bf docs: document ManaScore extended metrics and add to root CLAUDE.md
Update about page with Score Trend, Lighthouse, Dependency Health,
API Conformity, and Cross-App Consistency documentation. Add
ManaScore section to root CLAUDE.md for discoverability.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-24 12:30:58 +01:00
Till JS
06694eac19 feat(manascore): add API conformity and cross-app consistency checks
- API Conformity: 7 checks (responses, errors, pagination, versioning,
  docs, health, validation) with checklist UI
- Cross-App Consistency: track shared package usage (auth, ui, theme,
  branding, i18n, error-tracking + optional storage, llm)
- Both shown as compact badges on overview, detailed cards on detail page

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-24 12:24:45 +01:00
Till JS
61c23d5e79 fix(manacore): improve dashboard layout polish
- Remove unnecessary wrapper div in WidgetContainer
- Increase grid gap from gap-4 to gap-5 for breathing room
- Add auto-rows-fr for equal row heights
- Add min-h on widget content so empty widgets aren't tiny
- Change default layout to 3 equal columns (small)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-24 12:21:51 +01:00
Till JS
02215dfb12 feat(skilltree): add achievement system with 26 achievements + monetization report
Full-stack achievement system for SkillTree with backend (NestJS) and frontend (SvelteKit):
- 26 achievements across 7 categories (XP, Skills, Levels, Activities, Streak, Branches, Special)
- 5 rarity tiers (Common → Legendary) with distinct styling
- Auto-unlock after XP gain, skill creation, and activity logging
- Celebration animation on unlock with sparkle effects
- Achievements page with category filters and progress tracking
- IndexedDB offline support with local condition evaluation
- Backend seeds achievements on startup, checks conditions after mutations
- Stats overview extended with achievement counter
- i18n translations (DE + EN)

Also adds docs/MONETIZATION_REPORT.md with ranked analysis of all apps.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-24 12:17:43 +01:00
Till JS
e3115b302d feat(infra): add Cloudflare fallback plan + self-hosted landing pages
Two infrastructure improvements for tech independence:

1. Cloudflare Fallback Documentation (docs/CLOUDFLARE_FALLBACK.md):
   - Plan B: WireGuard + Caddy on Hetzner VPS (€3.79/mo)
   - Complete Caddyfile with all 30+ subdomains
   - Step-by-step failover checklist (~15 min to switch)
   - Plan C: Direct IP with ISP

2. Self-Hosted Landing Pages (eliminates Cloudflare Pages dependency):
   - Nginx container (mana-infra-landings) on port 4400
   - Multi-site config: each subdomain → separate dist/ folder
   - Build script: scripts/mac-mini/build-landings.sh
   - Cloudflare Tunnel ingress rules for 10 landing page domains
   - Storage: /Volumes/ManaData/landings/ on external SSD
   - Domains: it, chats, pics, zitares, presis, clocks,
     manadeck, nutriphi, citycorners, docs

Migration path: Build landings locally, set Cloudflare DNS to
tunnel instead of Pages, then decommission CF Pages projects.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-24 12:07:40 +01:00
Till JS
954b204bac fix(manacore): fix dashboard grid layout - widgets were col-span-1
The animate:flip wrapper div in DashboardGrid was not passing through
the col-span classes, causing all widgets to render at minimum width.
Moved size classes from WidgetContainer to the grid wrapper div.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-24 11:49:12 +01:00
Till JS
986f168d32 feat(manascore): add Lighthouse score integration
Add optional lighthouse scores (performance, accessibility, best
practices, SEO) to schema. Display as inline badges on overview
and circular gauges on detail page with average score.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-24 11:46:16 +01:00
Till JS
d3ae3841d9 feat(manascore): add score trend visualization with sparkline charts
Add history array to schema for tracking score changes over time.
Index page shows inline sparkline + delta, detail page shows larger
area chart with score labels on each data point.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-24 11:35:12 +01:00
Till JS
c21347351a fix(credit-operations): export TypeScript source directly
Allows Vite/SvelteKit to import the package without a prior build step,
matching the pattern used by other shared packages like shared-credit-ui.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-24 11:31:20 +01:00
Till JS
3c6253a84b fix(manacore): use --ignore-scripts in Dockerfile install step
Prevents postinstall from triggering premature builds before shared
packages are compiled.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-24 11:28:42 +01:00
Till JS
817ad841c6 fix(manacore): build credit-operations package in web Dockerfile
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-24 11:26:31 +01:00
Till JS
c4cc8529e3 fix(manacore): add credit-operations package to web Dockerfile
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-24 11:21:31 +01:00
Till JS
979564540a fix(manacore): fix @const syntax error in ContextDocsWidget
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-24 11:17:45 +01:00
Till JS
57a2841168 fix(manacore): fix syntax error in LandingEditor bind:value
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-24 11:15:39 +01:00
Till JS
357fbb3d50 feat(manacore): rename audits to ManaScore + add methodology page
Rename content collection, pages, and routes from "audits" to
"manascore" for clearer branding. Add comprehensive about page
explaining the 8 scoring categories, weights, and methodology.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-24 10:43:07 +01:00
Till JS
0ddbad9aed docs: update calendar and todo production readiness audits
Calendar: 94 → 97 (PWA, i18n complete, focus trapping, context menus,
ThrottlerGuard, error page, security headers, meta tags)

Todo: 94 → 96 (5 languages, PWA, focus trapping, context menus,
auto-save, notepad design, QuickInputBar, meta tags)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-24 10:37:07 +01:00
Till JS
44a9e02525 feat(manacore): add costs overview tab to credits page
Adds a "Kosten" tab showing all 40+ credit operations across all apps,
grouped by app with category filters (AI, Productivity, Premium) and
color-coded cost badges.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-24 10:10:44 +01:00
Till JS
52e9aa5889 docs: add devlog for evening session 2026-03-23
Context menus in 12 apps, shared-llm package, onboarding for 16 apps,
todo redesign, QuickInputBar rollout, and dashboard widgets.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-24 09:47:54 +01:00
Till JS
421ef55457 feat(manacore): implement mukke, presi, and context dashboard widgets
Add the 3 missing widget components that were registered but not implemented:

- MukkeLibraryWidget: shows library stats (songs, playlists, favorites),
  recent songs with artist/duration
- PresiDecksWidget: shows recent presentations with public/private
  indicator, descriptions, and update dates
- ContextDocsWidget: shows recent documents grouped by type (text,
  context, prompt) with space names, falls back to space list

All widgets follow the established pattern: APP_URLS for links,
WidgetSkeleton/WidgetError for loading/error, auto-retry on failure.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-23 22:34:56 +01:00