Commit graph

2338 commits

Author SHA1 Message Date
Till JS
78e726ce1b fix(docker): add local-llm package to Docker build context
Add @manacore/local-llm to both sveltekit-base and manacore web
Dockerfile so pnpm can resolve the workspace dependency.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 12:07:36 +02:00
Till JS
82516e9ba3 fix(manacore/web): fix build errors for production deployment
Remove deleted PlaygroundLogo export, migrate onclick|stopPropagation
to Svelte 5 syntax, fix @const placement, and increase PWA max file
size to 8 MiB for unified app bundle.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 12:05:49 +02:00
Till JS
3bef29b9c8 feat(local-llm): add generate utilities and reactive Svelte status
Add generate.ts with streaming chat completions, JSON extraction, and
text classification helpers. Add status.svelte.ts with Svelte 5 runes
reactive wrapper for LLM engine state.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 11:57:50 +02:00
Till JS
91d61e5428 refactor: remove leaflet dependency, replace with OSM embeds
Remove leaflet, leaflet.markercluster, and @types/leaflet from
citycorners. Replace interactive Leaflet maps with zero-dependency
OpenStreetMap iframe embeds on both map and location detail pages
(standalone citycorners + manacore integrated). Add filtered location
list below map as replacement for interactive markers.

Also removes remaining bauntown files missed in previous commit.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 11:56:26 +02:00
Till JS
c3c02c6a22 feat(manacore/web): add benchmark, compare history, markdown & cache status to LLM test
- Benchmark tab: run same prompt N times against loaded model, show
  avg/min/max/median for latency and tok/s with per-run table and bars
- Compare history: save results to localStorage (max 20), restore or
  delete previous comparisons via History panel
- Markdown rendering: use marked for assistant responses in chat tab
  and compare outputs with proper code blocks, lists, headings
- Model cache status: check browser Cache API via WebLLM hasModelInCache,
  show cached/uncached per model with size badges
- Add marked dependency

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 11:50:23 +02:00
Till JS
348b6ff231 chore: remove playground, reader, bauntown, voxelava, and worldream apps
These apps were either stubs (voxelava, worldream), planning-stage
(reader), dev-tools (playground), or inactive (bauntown). Removing
to reduce monorepo surface area. All recoverable from git history.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 11:47:54 +02:00
Till JS
e5a6946d8b feat(manacore/web): add model comparison tab to LLM test page
Add a "Compare" tab that sequentially runs the same prompt against all
available models (currently Qwen 2.5 1.5B and 0.5B), showing results
side-by-side with a stats table (latency, tok/s, token counts) and
streaming preview during inference. Also includes fixes from earlier:
$derived.by for statusText, removed unused generateText import, added
chat auto-scroll with max-height.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 11:25:44 +02:00
Till JS
a658822a40 fix(manacore/web): fix LLM test page derived rune, unused import, and auto-scroll
- Change $derived(() => ...) to $derived.by(() => ...) for statusText
- Remove unused generateText import
- Add auto-scroll to chat container on new messages and streaming
- Add max-height with overflow-y-auto to prevent chat from growing unbounded

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 11:17:06 +02:00
Till JS
249cbc97a0 feat(manacore/web): add calendar event parser/estimator and LLM test page
Add natural language event parser and duration estimator utilities for calendar
module. Add /llm-test page for testing local LLM inference.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 11:13:22 +02:00
Till JS
9c0613d920 feat(manacore/web): add spiral module with activity collection and page
Add spiral module (stores, components, data collection) and /spiral route
to ManaCore web. Wire up navigation entry and command palette shortcut.
Add spiral-db workspace dependency.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 11:13:15 +02:00
Till JS
1cbd9a25a6 feat(spiral-db): add mana activity schema for cross-app unified spiral
Add createManaActivitySchema() for storing activity highlights from all apps
in a single spiral, with compact app index (23 apps) and event type mappings
(created, completed, favorited, milestone, streak, etc.).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 11:13:06 +02:00
Till JS
f408d70461 feat(manacore/web): refactor todo page into modular components with i18n
Extract the monolithic todo page into reusable components (TaskList, TaskItem,
TaskEditModal, QuickAddTask, TodoToolbar, etc.), add new stores (reminders,
contacts, settings, minimized-pages), composables (useTaskForm), board view
components, skeleton loading states, and a settings page. Add todo i18n strings
for de/en/es/fr.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 11:12:57 +02:00
Till JS
3b5f77dd86 feat(manacore/web): port calendar UI components from standalone app
Extract the monolithic calendar page into proper component architecture
ported from the original calendar app. Adds WeekView, MonthView,
AgendaView, EventCard, EventDetailModal, EventForm, CalendarHeader,
and MiniCalendar as separate components. Includes composables for
drag-to-create, event drag & drop, resize, current time indicator,
and keyboard shortcuts. Adds desktop sidebar with mini calendar and
calendar list.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 11:05:49 +02:00
Till JS
071d2178ea fix(guides/web): add missing supportedLocales export to i18n
The layout imported supportedLocales but it was never exported from the
i18n module, breaking the build.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 10:45:19 +02:00
Till JS
82abde6cd5 fix(wisekeep/landing): add missing TalkGrid and QuoteCollection components
The simon-sinek speaker page imported these components but they were
never created during the wisekeep migration.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 10:45:14 +02:00
Till JS
ef538245d1 feat(local-llm): add client-side LLM inference package with WebLLM
New shared package for browser-based LLM inference using Qwen 2.5 1.5B
via WebLLM. Includes Svelte 5 reactive stores, engine management, and
type definitions for local AI features without server roundtrips.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 01:53:54 +02:00
Till JS
4116715db0 feat(manacore/web): add todo kanban board components and view grouping
Add KanbanTaskCard, QuickAddTaskInline components, task-parser utility,
settings store with view/layout preferences, and a pure-function view
grouping engine for board views (by status, date, priority).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 01:53:48 +02:00
Till JS
970dc8b260 feat(manacore/web): add leaflet dependency for map views
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 01:53:42 +02:00
Till JS
982629f507 feat(manacore/web): add subdomain-to-path routing for all apps
Redirect app subdomains (e.g. todo.mana.how) to their path equivalent
(mana.how/todo) so each app is reachable via its own subdomain while
running as a single SvelteKit app.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 01:53:36 +02:00
Till JS
c4b8a16740 fix(manacore/web): fix Docker build and healthchecks
Add missing shared-uload package copy and zitare content build step to
Dockerfile. Replace wget/httpx healthchecks with bun fetch and stdlib
urllib to remove external dependencies in containers.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 01:53:31 +02:00
Till JS
06107f6a52 feat(mana-video-gen): add AI video generation service with LTX-Video
New GPU service for fast text-to-video generation using LTX-Video (~2B params)
on the RTX 3090. Generates 480p clips in 10-30 seconds, uses ~10GB VRAM.
Includes Cloudflare Tunnel route, Prometheus monitoring, and health checks.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 01:17:47 +02:00
Till JS
28b953255b feat(manacore/web): add search providers for picture, presi, mukke, zitare, clock
Extends cross-app spotlight search from 6 to 11 providers:
- Picture: images (by prompt), boards
- Presi: decks, slides (title/body/bullets)
- Mukke: songs (title/artist/album), playlists, projects
- Zitare: quote lists
- Clock: alarms, timers, world clocks (by label/city)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 23:05:25 +02:00
Till JS
14701a973d feat(shared-uload): add password protection and expiration to ShareModal
Adds collapsible "Erweiterte Optionen" section with:
- Password protection toggle with text input
- Expiration date toggle with datetime-local picker
- Footer badges showing active protection/expiry on created links

Both fields are passed through to createShortLink and stored in IndexedDB.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 23:03:49 +02:00
Till JS
ae73f70ad0 feat(manacore/web): add share via uLoad to mukke playlists and presi decks
Adds ShareNetwork button and ShareModal to:
- Mukke: playlist detail header (between play all and delete)
- Presi: deck header actions (next to add slide)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 22:59:29 +02:00
Till JS
eeb38275bd feat(manacore/web): add share via uLoad to todo, cards, and chat
Adds ShareNetwork button and ShareModal to:
- Todo: task detail expanded view
- Cards: deck header actions
- Chat: conversation header (between pin and delete)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 22:58:06 +02:00
Till JS
2105cc6cc4 feat(manacore/web): add share via uLoad to calendar events and contacts
Adds ShareNetwork button and ShareModal to calendar event detail and
contact detail views for creating short links via shared-uload.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 22:33:40 +02:00
Till JS
23b5b8b084 feat(uload/web): add source field tracking and filter for cross-app links
Links created from other apps (calendar, contacts, etc.) now carry a source
field. Added source filter dropdown and source badges in the link list.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 22:33:34 +02:00
Till JS
8050da31ea feat(shared-uload): add shared package with ShareModal and cross-app link creation
Provides ShareModal component and initSharedUload/createShortLink utilities
for other apps to create uLoad short links with source tracking.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 22:33:25 +02:00
Till JS
98ca01f466 feat(manacore/web): add cross-app search engine with IndexedDB providers
Search registry with providers for todo, calendar, contacts, cards, chat,
and storage. Integrated into layout via contentSearcher prop on GlobalSpotlight.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 22:29:59 +02:00
Till JS
f797d70a9e feat(shared-ui): add content search support to GlobalSpotlight
Add ContentSearcher interface, debounced cross-app search with AbortController,
loading indicators, and content result rendering to the spotlight component.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 22:29:51 +02:00
Till JS
d51ee49967 fix(manacore/web): add dexie as direct dependency for Docker build
dexie is imported in 62 files but was only available as transitive dependency
via @manacore/local-store. In Docker builds with isolated node_modules it
wasn't being resolved — add it explicitly.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 22:19:49 +02:00
Till JS
6ac71535a4 fix(manacore/web): replace svelte-sonner with local toast store
svelte-sonner is not a dependency of the unified app — replace all 4 imports
in moodlit and uload modules with the local $lib/stores/toast.svelte store.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 22:03:13 +02:00
Till JS
7fe4662dbc fix(manacore/web): add app-specific packages to Dockerfile for production build
The unified app depends on @calc/shared, @clock/shared, and @zitare/content
which live under apps/*/packages/ and aren't included in the sveltekit-base image.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 21:55:20 +02:00
Till JS
76ae64a4d6 fix(manacore/web): build fixes for unified app — toast store, Svelte 5 syntax, icon imports
Add missing toast.svelte.ts store for zitare module, fix onclick|stopPropagation
to Svelte 5 syntax in calendar, replace non-existent StarFill with Star weight="fill"
in contacts, fix calc skins import path, add app-specific shared packages to vite config,
and improve login error handling for invalid credentials.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 21:52:16 +02:00
Till JS
709e781ecd feat(manacore): add DnD tag support to calendar and contacts modules
Calendar:
- Add tagIds field to LocalEvent and CalendarEvent types
- Add updateTagIds() to eventsStore
- Add dropTarget on agenda view events, tag badge display
- Register tagDropHandler for passive event→tag drops

Contacts:
- Add tagIds field to LocalContact and Contact types (alongside existing tags)
- Add updateTagIds() to contactsStore
- Add dropTarget on contact list items, tag badge display
- Register tagDropHandler for passive contact→tag drops

Both modules now support:
- Drag tag from TagStrip onto item (Layer 1: pointer events)
- Drag item onto tag in TagStrip (Layer 2: passive overlay)
- Tag badges shown inline on items

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 21:38:33 +02:00
Till JS
4f8c3d680c feat(shared-ui, todo): BottomStack notification system + PillNav bottomOffset
- Add NotificationBar shared component for in-stack notifications
- Add BottomNotification type and top snippet slot to BottomStack
- Add bottomOffset prop to PillNavigationProps for flexible positioning
- Remove pillNavCollapsed from todo settings (PillNav now always visible,
  toggled by layout FAB that hides all bottom bars)
- Replace floating GuestRegistrationNudge with integrated NotificationBar

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 21:32:35 +02:00
Till JS
c81b636f2f feat(todo/web): add page maximize/minimize/close controls and default todo page
- Show "To Do" page by default on app load
- Add fullscreen (maximize) button to TodoPage with centered content
- Consistent button order across all states: Minimize → Fullscreen → Close
- Add maximize/restore/close buttons to minimized page tabs
- Use ArrowLineUp icon for restore in tabs to differentiate from minimize
- Larger tap targets for tab action buttons (24px)
- Centered empty state when no pages are open with "Seite hinzufügen" button
- Wire maximize through MinimizedPagesContext for tab-to-fullscreen flow

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 21:31:04 +02:00
Till JS
bd67e8d20b feat(manacore, shared-ui): integrate cross-type DnD into unified app
- Shared TagStrip: add dragSource on tag pills + passiveDropZone for item→tag
  drops. New onTagDrop and dropAccepts props. DnD CSS for hover/success states.
- Unified app layout: add DragPreview, context-based tagDropHandler so child
  pages can register their own drop logic.
- Todo module: add updateLabels() to tasks store (with metadata merge).
- Todo page: add dropTarget on task items, tag badge display via getTaskTags(),
  register tagDropHandler for passive task→tag drops.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 21:30:40 +02:00
Till JS
3bf40fc61f docs: migration plan complete — all 7 phases done
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 21:21:20 +02:00
Till JS
a3a472ce39 feat(manacore): Phase 7 — unified sync manager for multi-app DB
Create sync infrastructure for the single-DB multi-app architecture:

sync.ts — Unified Sync Manager:
- One sync channel per appId (todo, calendar, contacts, etc.)
- Push: collects _pendingChanges tagged with appId → POST /sync/{appId}/push
- Pull: fetches server delta per collection → applies field-level LWW
- WebSocket: connects to /sync/{appId}/ws for real-time push notifications
- Online/offline handling with automatic reconnect
- Uses SYNC_APP_MAP from database.ts for table→appId routing

change-tracker.ts — Write tracking helper:
- trackChange(): records writes to _pendingChanges with auto-appId lookup
- trackFieldUpdate(): field-level LWW tracking for partial updates
- trackDelete(): soft-delete tracking

The _pendingChanges table now includes appId as an indexed field,
and _syncMeta uses compound key [appId+collection] for per-app cursors.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 21:21:01 +02:00
Till JS
59e1e8e833 feat(shared): Phase 6 — update app URLs and navigation for unified app
mana-apps.ts:
- Change all APP_URLS from subdomains to internal paths
  (e.g., https://todo.mana.howhttps://mana.how/todo)
- Keep separate subdomains only for games (arcade) and matrix

PillNavigation, AppDrawer, GlobalSpotlight:
- Detect internal URLs and navigate directly instead of window.open
- External URLs (games, matrix) still open in new tab

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 21:19:14 +02:00
Till JS
8fe16b20f4 feat(infra): Phase 5 — consolidate to single web container
Remove 20 standalone web containers, simplify tunnel and auth config:

docker-compose.macmini.yml (-579 lines):
- Remove chat-web, todo-web, calendar-web, clock-web, contacts-web,
  zitare-web, storage-web, presi-web, cards-web, nutriphi-web,
  skilltree-web, photos-web, mukke-web, citycorners-web, picture-web,
  inventar-web, calc-web, times-web, uload-web, memoro-web
- Keep: mana-web (unified), element-web, matrix-web, arcade-web, manavoxel-web
- Update mana-web with all backend API URLs, increase mem_limit to 256m

cloudflared-config.yml (-60 lines):
- Remove all *.mana.how web subdomains (now served at mana.how/*)
- Keep backend API subdomains (*-api.mana.how)

mana-auth trustedOrigins (30 → 8 origins):
- Only mana.how + games/matrix subdomains that remain separate

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 21:17:38 +02:00
Till JS
0b460c5c8d docs: update plan — Phase 3 + 4 complete (split-screen + widgets)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 21:08:21 +02:00
Till JS
fe052cc291 feat(manacore): Phase 4 — cross-app dashboard widgets
10 new widgets using direct Dexie queries on the unified database:

- TasksTodayWidget: overdue + today's tasks with completion toggle
- UpcomingEventsWidget: next 7 days of calendar events
- RecentContactsWidget: recently updated contacts
- QuoteOfTheDayWidget: daily rotating quote from zitare
- ActiveTimerWidget: running time tracker with live elapsed time
- RecentChatsWidget: last 3 AI conversations
- NutritionProgressWidget: calorie progress ring + macros
- PlantWateringWidget: plants due for watering
- QuickActionsWidget: new task/event/contact/note shortcuts
- WidgetGrid: responsive 3-column grid with error boundaries

All widgets query the shared IndexedDB directly — no cross-origin
hacks, no iFrame postMessage, just normal Dexie liveQuery.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 21:08:03 +02:00
Till JS
954923334f feat(manavoxel): clean up dead code, add portal keys, fix triggers, implement gold economy
Remove unused multiplayer protocol types, script/wasmBinary/capabilities fields,
and onNearItem trigger. Implement portal requiresKey gate, fix onDayNight and
onTouch triggers to fire for all inventory items, and add gold-based trading
economy with NPC kill rewards and merchant purchasing.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 21:04:25 +02:00
Till JS
e94775de25 fix(todo): persist labelIds on task creation and merge metadata on label update
- createTask: store labelIds in metadata when provided (was silently ignored)
- updateLabels: read existing metadata first and merge, instead of overwriting
  the entire metadata object (was destroying assignee, storypoints, etc.)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 21:03:56 +02:00
Till JS
8409f8a8a2 feat(shared-ui, todo): add cross-type drag & drop system with tag enrichment
Implement a two-layer DnD system in @manacore/shared-ui/dnd that coexists
with svelte-dnd-action (same-type reordering):

- Layer 1 (Pointer Events): dragSource + dropTarget actions for cross-type
  drags (e.g. Tag → Task). Mobile-first with long-press (300ms) and haptic
  feedback.
- Layer 2 (Passive Overlay): passiveDropZone action detects when
  svelte-dnd-action drags hover over external targets (e.g. Task → Tag pill,
  Task → Trash zone).
- DragPreview: floating pill that follows the finger/cursor during Layer 1
  drags.
- ActionZone: auto-appearing drop zones (trash, archive) during any drag.

Integrate into Todo app:
- TagStrip pills: draggable (dragSource) + accept tasks (passiveDropZone)
- TaskList items: accept tags (dropTarget) + register drags for passive layer
- ViewColumn + FokusLayout: register svelte-dnd-action drags for passive layer
- Layout: DragPreview + ActionZone (trash) added, tasks enriched with resolved
  label objects from shared tags so tag badges actually render on TaskItem.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 21:00:25 +02:00
Till JS
6dc259d743 feat(manacore): Phase 3 — component-based split-screen system
Replace iFrame-based split-screen with native Svelte components:

Infrastructure (6 files):
- registry.ts: lazy-import registry for all 25 app modules
- store.svelte.ts: Svelte 5 runes state (app, position, localStorage)
- SplitPaneLayout.svelte: dual-panel layout with dynamic widths
- ResizeHandle.svelte: draggable divider with mouse/touch support
- PanelHeader.svelte: app name + close button
- index.ts: barrel exports

AppView.svelte for all 25 modules — compact self-contained views:
- todo: task list with filters + quick add
- calendar: mini week strip + today's events
- contacts: searchable list with avatars
- chat: conversation list with previews
- And 21 more...

Benefits over iFrame approach:
- Shared IndexedDB — both panels see the same data
- Svelte reactivity across panels
- No CORS/CSP issues
- Code-split via dynamic imports

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 20:58:34 +02:00
Till JS
9a6aa12c63 docs: Phase 2 complete — all 26 modules migrated to unified app
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 20:49:06 +02:00
Till JS
9b614cdfbc feat(manacore): migrate contacts, todo, calendar, picture, chat, mukke, memoro — Phase 2 complete
All 25 modules now migrated to the unified same-origin app (25/25):

- Contacts: contact list with alphabet grouping, detail/edit (3 routes)
- Todo: task management with inbox/today/upcoming views, subtasks (2 routes)
- Calendar: week/month/agenda views, event CRUD (4 routes)
- Picture: gallery with favorites, AI generation, moodboards (6 routes)
- Chat: conversation list, AI chat, templates, archive (5 routes)
- Mukke: music library, playlists, projects, audio player (6 routes)
- Memoro: voice memos, transcripts, memories, tags (5 routes)

Phase 2 of the unified app migration is now complete.
Total: 26 modules, ~120 routes, 250+ files.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 20:48:30 +02:00