Position DateStrip fixed above PillNav with glass blur effect.
Remove MiniCalendar sidebar to give calendar view full width.
Restore @clock/shared package from archive (needed by clock module).
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- mana-image-gen: change default port from 3025 to 3026 to avoid conflict with mana-llm
- Dashboard widgets (12): replace APP_URLS.{app}.dev/prod with internal route paths (/todo, /calendar, etc.)
and remove target="_blank" since all apps are now internal routes in the unified app
- Home page: use goto() for internal apps, keep window.open() only for external apps (matrix, arcade)
- AppRow: remove unused APP_URLS import
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Port the horizontal scrolling DateStrip from the standalone calendar
app with all features: event indicator dots, moon phases, weekend
highlighting, month dividers, lazy-loading virtual scroll, smart
today button, and view range highlighting.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Bring back the custom pages system from the old standalone todo app:
- Edit FAB (pencil icon) toggles inline edit mode on the homepage
- Custom pages with configurable filter rules (priority, date range, completed)
- Inline PageEditBar with icon picker (10 icons), filter pills, reorder arrows
- Width pills (S/M/L/XL) visible in edit mode to resize all sheets
- Custom pages persisted to todoSettings.customPages
- Auto-enable edit mode when creating a new custom page
- PagePicker now includes "Eigene Seite" creation option
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Includes todo page edit bar, minimized pages store, times shared
types, manacore data layer cleanup, and dashboard widget updates.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Activate sync for the unified manacore IndexedDB by adding automatic change tracking
via Dexie hooks on all 120+ tables. This replaces the unused manual trackChange() approach
and eliminates the need for 12 separate cross-app IndexedDB reader instances.
Key changes:
- database.ts: Dexie hooks auto-record _pendingChanges for every write, TABLE_TO_SYNC_NAME mapping
- sync.ts: rewritten with correct backend URLs, auth token, table name translation, server change guard
- layout: unified sync engine replaces per-app manacoreStore/tag/link sync + 12 cross-app readers
- cross-app-queries.ts: rewritten to query unified DB directly instead of via cross-app-stores
- legacy-migration.ts: one-time migration from old per-app DBs (manacore-todo etc.) to unified DB
- local-store.ts: refactored to use unified DB with collection wrappers instead of createLocalStore()
- Deleted cross-app-stores.ts (383 lines) and change-tracker.ts (80 lines)
- Updated ActivityFeed, TasksTodayWidget, CalendarEventsWidget, ContactsFavoritesWidget, spiral/collect.ts
- Updated CLAUDE.md with unified IndexedDB architecture documentation
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Move hasModelInCache to local-llm package with dynamic import wrapper
so the browser-only dependency doesn't break server-side builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@mlc-ai/web-llm is browser-only (WebGPU) and cannot be resolved
during SSR build in Docker. Setting ssr: false for the page.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
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>
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>
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>
- 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>
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>
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>
- 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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
- 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>
- 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>
- 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>
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>
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>
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>
- 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>
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>
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>