Commit graph

1284 commits

Author SHA1 Message Date
Till JS
09d5576f2a feat(memoro): integrate memoro web app into monorepo (phases 1-6)
Structure: apps/memoro/apps/web, package name @memoro/web
Web tooling: adapter-node, Tailwind v4 + @manacore/shared-tailwind, Vite v6, shared PWA/vite-config
Auth: createManaAuthStore() from @manacore/shared-auth-stores, removed Google/Apple OAuth
Local-first: memoroStore with 7 collections + guest seed data (memos, tags, spaces, etc.)
Service layer: memoService + tagService migrated from Supabase direct to local-store collections
Workspace: dev:memoro:* scripts in root package.json, memoro added to CLAUDE.md

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-31 17:19:20 +02:00
Till JS
019ad557d4 fix(shared-pwa): remove favicon.png from default include assets
No ManaCore app provides favicon.png (all use favicon.svg). The default
caused prerender 404 errors for any app with an /offline page.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-31 17:19:04 +02:00
Till JS
1b0c46e7a2 fix(inventar-web): suppress prerender 404 for missing favicon.png
App only provides favicon.svg; the PWA plugin's default includeAssets
list also includes favicon.png which triggers a prerender error.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-31 17:04:49 +02:00
Till JS
7bc4db7e63 fix(builds): repair inventar settings import and add skilltree storage service
- inventar-web: fix mangled icon import in settings page
- skilltree-web: create missing lib/services/storage.ts for export/import
- startup.sh: add umami/synapse DB creation + synapse user setup with C locale

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-31 16:56:37 +02:00
Till JS
e5ca208cd8 feat(contacts): add context menu to alphabet/grid views with icons, add icons to todo context menu
- Add right-click context menu to ContactAlphabetView (was missing entirely)
- Add icons to ContactGridView context menu items
- Wire up onDeleteContact through ContactList to both views
- Add icons to TaskList (todo) context menu: edit, complete, priority, delete

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-31 16:55:29 +02:00
Till JS
ab387b9b3d chore: remove all NestJS backend references, replace with Hono/Bun
- Delete nestjs-backend.md guideline (replaced by hono-server.md)
- Delete Dockerfile.nestjs-base and Dockerfile.nestjs templates
- Delete stale BACKEND_ARCHITECTURE.md doc (NestJS-era, obsolete)
- Update CLAUDE.md, GUIDELINES.md, authentication.md to Hono/Bun first
- Update all app CLAUDE.md files: backend/ → server/, NestJS → Hono+Bun
- Update all app package.json files: @*/backend → @*/server
- Update docs: LOCAL_DEVELOPMENT, PORT_SCHEMA, ENVIRONMENT_VARIABLES,
  DATABASE_MIGRATIONS, MAC_MINI_SERVER, PROJECT_OVERVIEW
- Update scripts: generate-env.mjs, setup-databases.sh, build-app.sh
- Update CI/CD: cd-macmini.yml backend → server paths
- Update Astro docs site: @chat/backend → @chat/server

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-31 16:52:25 +02:00
Till JS
ed9672ef2b refactor(todo): remove projects concept, unify views with Fokus/Übersicht/Matrix
- Remove LocalProject, projectId from all tasks, and project-related stores/queries
- Add 'fokus' layout mode to LocalBoardView; activeLayoutMode setting in settings store
- Build FokusLayout.svelte: scroll-snap paper sheets with cross-page DnD ('task-dnd')
- Inline column edit mode: ViewColumnHeader with color picker popup, rename, reorder, delete
- Add "Neues Board" placeholder as last column in all layout modes
- PillNav now state-based (Fokus/Übersicht/Matrix tabs) instead of route-based
- Unified filter strip: merge TagStrip + FilterStrip with "Tags:" and "Filter:" label pills
- Fix all 3 test files after project removal; 100/100 tests passing

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-31 16:34:51 +02:00
Till JS
d460c9ec07 feat(ecosystem-audit): add Tier 3 metrics (git activity, a11y, auth guard, docker)
Adds 4 new Tier 3 metrics to the ecosystem health audit script:
- Git Activity: % of apps with commits in the last 30 days (97%)
- A11y Indicators: alt-text coverage, role=dialog, focusTrap (36%)
- Auth Guard Coverage: AuthGate/authGuard presence per app (83%)
- Docker Readiness: Dockerfile present per app (80%)

Overall score updated from 74 → 72 (23 metrics, 135 total weight).
Dashboard at /manascore/ecosystem updated with new category rows.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-31 16:32:56 +02:00
Till JS
df1cd4bfa0 chore(calendar): remove showTasksInCalendar from localStorage migration
No existing users, so no need to clean up old localStorage keys.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-31 16:30:53 +02:00
Till JS
cea0c97889 fix(contacts): fix CSP blocking auth, broken contact detail modal, and missing click handler
- Add fallback URLs for connect-src in CSP (localhost:3001, :3015, :3050)
- Switch ContactDetailModal from HTTP API to IndexedDB (local-first)
- Add onclick handler to alphabet view contact cards
- Add stopPropagation on phone/email action links
- Accept non-UUID contact IDs in route regex for seed data

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-31 16:29:18 +02:00
Till JS
750a0c77ff refactor(calendar): remove todo integration entirely
Remove all todo/task-related code from the calendar web app:
- Delete todo API client, store, and all todo components
- Remove TodoSidebarSection, TodoDayCell, TodoRow, TaskBlock
- Remove useTaskDragDrop and useSidebarDrop composables
- Remove "Aufgaben" tab from PillNav and keyboard shortcuts
- Remove "Todo-Service ist nicht erreichbar" error banner
- Remove todo toggle from AgendaFilters, todo type from AgendaItem
- Remove PUBLIC_TODO_BACKEND_URL from server hooks
- Remove showTasksInCalendar from settings store
- Clean up i18n keys (priority, todo sections)
- Clean up help config (task shortcuts section)

Build passes successfully.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-31 14:25:34 +02:00
Till JS
201819280e feat(manascore): add Tier 2 ecosystem metrics
5 new metrics:
- Toast Consistency (100%) — all apps use shared toastStore
- Store Pattern (95%) — 176 Runes stores vs 9 old writable/readable
- Shared Types (62%) — shared-types imports vs local type files
- Dep Freshness (80%) — avg 37 deps per app
- Bundle Config (100%) — all apps have SvelteKit adapter

Ecosystem Health Score: 74/100 (19 metrics total)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-31 14:20:20 +02:00
Till JS
3fb1eddc04 feat(manascore): add security headers, skeleton loading, TODO count metrics
New metrics:
- Security Headers (76%) — apps with setSecurityHeaders() in hooks
- Skeleton Loading (76%) — apps with skeleton/loading state components
- TODO/FIXME Count (22 total) — technical debt info metric (not weighted)

Ecosystem Health Score: 72/100 (15 metrics total)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-31 14:13:04 +02:00
Till JS
f58a6d1d70 docs: document Ecosystem Health Score in about.md and CLAUDE.md
Add comprehensive documentation for the Ecosystem Health Score:
- 12 metrics explained with weights and measurement methods
- How each score is calculated
- How to improve each metric
- Script usage: node scripts/ecosystem-audit.mjs

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-31 14:09:14 +02:00
Till JS
0c89400b5b feat(manascore): add 5 new ecosystem metrics
Expand ecosystem-audit with:
- Error Boundaries (54%) — +error.svelte + offline page per app
- TypeScript Strict (100%) — strict mode in all apps
- Test Coverage (72%) — apps with at least one test (111 files total)
- PWA Support (2%) — manifest + service worker
- Maintainability (0%) — files under 500 lines (38 files exceed limit)

Dashboard shows file size top offenders and apps without tests.
Overall score adjusted from 76 to 70 with rebalanced weights.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-31 14:06:29 +02:00
Till JS
41ca11eddc feat(todo): inline "Neues Board" card as last column in all layouts
Replace the toolbar add-column button with an inline placeholder card
that appears as the last column/sheet in the board when in edit mode.
Styled with dashed border and + icon, matching each layout's aesthetic.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-31 13:58:01 +02:00
Till JS
dc4ba0a39c feat(todo): color picker popup on column dot instead of inline swatches
In edit mode, the color dot stays in its normal position but gets a
purple ring to indicate it's clickable. Clicking opens a popup with:
- 16 preset color swatches in a 4x4 grid
- Native color picker for custom colors
- Click outside to dismiss

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-31 13:49:16 +02:00
Till JS
1926c6b1f2 feat(todo): inline column editing in board headers, remove separate editor
Move column editing (color, name, reorder, delete) directly into each
column/sheet header. In edit mode, ViewColumnHeader shows color dots,
name input, and action buttons inline. Add column button in toolbar.

- ViewColumnHeader: edit mode with color picker, name input, move/delete
- Props flow: page → BoardViewRenderer → Layout → ViewColumn → Header
- Remove separate column-editor bar from page
- Narrower Fokus sheet widths (360/480/640/840px)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-31 13:43:47 +02:00
Till JS
c3bee2607b refactor(todo): extract shared useTaskForm composable
Extract 16 duplicated $state declarations, form initialization logic,
and save/buildUpdateInput from TaskItem and TaskEditModal into a shared
useTaskForm.svelte.ts composable. Uses getter/setter pattern for
Svelte 5 bind:value compatibility.

Eliminates ~200 lines of duplicated form state management.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-31 13:34:52 +02:00
Till JS
4f8209fd5a feat(todo): add inline layout editor to homepage
When the Layout pill is toggled, an inline editor appears above the board:
- View name input, groupBy selector, page width (S/M/L/XL)
- Column editor with color picker, name input, reorder, delete, add
- Changes apply live to the board below
- Escape exits edit mode

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-31 13:33:30 +02:00
Till JS
27cd84ca90 feat(todo): inline layout editor replacing ViewEditorModal
Replace the modal-based view editor with an inline editor that appears
directly on the page when the Layout pill is toggled:

- Edit toolbar: view name input, groupBy selector pills, page width (S/M/L/XL)
- Column editor: color picker, name input, reorder arrows, delete, add column
- Changes are applied live and visually reflected in the board below
- Escape key exits edit mode
- Remove ViewEditorModal from layout (no longer needed)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-31 13:31:33 +02:00
Till JS
d8b6178549 refactor(calendar): extract CalendarManagement into shared component
Extract duplicated calendar CRUD logic (state, functions, UI, styles)
from settings page and settings modal into a shared CalendarManagement
component. Removes ~500 lines of duplication. Modal now uses i18n
strings instead of hardcoded German.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-31 13:27:34 +02:00
Till JS
b3541957bd refactor(contacts): apply getErrorMessage helper to remaining files
Replace inline `e instanceof Error ? e.message : '...'` pattern
with getErrorMessage() in ContactList (3x) and ContactDetailModal (6x).
All contacts error handling now uses the shared utility.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-31 13:15:31 +02:00
Till JS
84653837a0 refactor(todo): replace Mehr dropdown with inline project pills, add Filter label
- Add "Filter:" label pill before priority filter pills
- Replace Mehr dropdown with inline project pills (colored, toggleable)
- Add dividers between sections (tags | filter/priorities | projects | sort)
- Remove unused dropdown code and DotsThree import

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-31 13:14:57 +02:00
Till JS
4872bc0007 refactor(contacts): extract error helper, field labels, match type labels
- Create lib/utils/error-helpers.ts with getErrorMessage() utility
  (replaces inline `e instanceof Error` pattern in archive + data pages)
- Create lib/constants/contact-fields.ts with CONTACT_FIELD_LABELS,
  COMPARISON_FIELDS, and getMatchTypeLabel()
  (deduplicated from MergeModal + duplicates page)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-31 13:14:18 +02:00
Till JS
3211878ae0 feat(todo): add clickable Tags label pill linking to /tags management
Add a "Tags:" label pill before tag chips in the filter strip that
navigates to the tag management page. Shows even with no tags so
users can discover the feature.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-31 13:11:57 +02:00
Till JS
bc1788941f refactor(contacts,todo): extract shared utilities, eliminate duplication
Contacts:
- Extract getDisplayName() + getInitials() to lib/utils/contact-display.ts
  (was duplicated across 7 files)
- Export UNKNOWN_CONTACT_NAME constant

Todo:
- Extract getSubtaskProgress() to lib/utils/task-helpers.ts
  (was duplicated in TaskItem + KanbanTaskCard)
- Add formatDateForInput() + dateInputToISO() to date-display.ts

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-31 13:10:55 +02:00
Till JS
52e09e4ac0 refactor(todo): merge TagStrip into unified filter strip
Combine the separate TagStrip and FilterStrip into one unified filter
bar. Tag chips now appear as colored pills alongside priority filters,
sort options, and completed toggle — all toggled by a single Filter pill.

- Add showTags prop + tag chip rendering to TaskFilters strip variant
- Remove TagStrip component usage and Tags pill from PillNav
- Remove showKanbanNav (dead /kanban reference)
- One pill, one strip, no duplication

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-31 13:07:34 +02:00
Till JS
101f20ec34 refactor(todo,calendar): extract duplicated constants and utilities
Todo:
- Extract priority colors to lib/constants/priority.ts (was in TaskItem + KanbanTaskCard)
- Extract formatDueDate to lib/utils/date-display.ts (was in TaskItem + KanbanTaskCard + task-parser)
- Extract withErrorHandling to lib/stores/store-helpers.ts (was in 3 stores)

Calendar:
- Extract formatTime, snapToGrid, getDayFromX, getMinutesFromY to lib/utils/drag-helpers.ts
  (was duplicated across 4 drag/drop composables)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-31 13:01:00 +02:00
Till JS
74ff066050 simplify(todo): single view with edit mode, remove ViewSelector
Replace multi-view system with a single active board view. The Layout
pill in PillNav now opens the ViewEditorModal to edit columns/grouping
directly. No more ViewSelector strip or view switching — just one
clean view with an editable layout.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-31 12:51:44 +02:00
Till JS
25e39620ec refactor(apps): final SVG-to-Phosphor pass for photos, clock, mukke, inventar
Replace remaining inline SVG icons in photos (25 SVGs), mukke player
controls, clock world-clock, and inventar settings. All remaining
inline SVGs are now exclusively spinners, brand logos, or dynamic
icon rendering via {@html}.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-31 12:41:43 +02:00
Till JS
59e535af94 refactor(todo): move ViewSelector behind Layout pill, simplify homepage
- Move board view management (ViewSelector, activeViewId, ViewEditorModal)
  from +page.svelte to +layout.svelte
- Layout pill in PillNav now toggles ViewSelector strip visibility
- +page.svelte reduced to minimal BoardViewRenderer with context-provided view
- Provide activeView via Svelte context from layout
- Fix broken import in TaskItem.svelte (linter artifact)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-31 12:41:28 +02:00
Till JS
504e7756a7 refactor(apps): automated SVG-to-Phosphor migration across all apps
Script-based migration of inline SVG icons to Phosphor components.
Covers todo, manacore, mukke, chat, zitare, times, citycorners,
inventar, uload, playground, presi, picture, moodlit, storage, news,
wisekeep, clock, matrix, manadeck, skilltree, and photos.

~190 SVGs replaced across 115 files. Remaining SVGs are spinners,
brand logos, or decorative/chart SVGs that don't map to Phosphor.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-31 12:35:17 +02:00
Till JS
f58d58ff99 refactor(apps): replace inline SVGs with Phosphor icons across 19 apps
Migrate inline SVG icon paths to Phosphor components in chat, zitare,
times, citycorners, inventar, manacore, todo, playground, presi, and
more. Part of repo-wide icon unification effort.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-31 12:18:20 +02:00
Till JS
3f2e6a3ee5 feat(todo): unify view modes into single route with Fokus/Übersicht/Matrix layouts
Consolidate the two separate view systems (homepage paper pages + /kanban board)
into one unified system on `/`. All three layout modes (Fokus, Übersicht, Matrix)
share the same LocalBoardView data model and BoardViewRenderer, with layout
switching via PillNav tabs instead of route navigation.

- Add FokusLayout component (scroll-snap paper sheets with DnD)
- Add activeLayoutMode setting (fokus/uebersicht/matrix)
- Add layoutOverride prop to BoardViewRenderer
- Rewrite homepage to use BoardViewRenderer + ViewSelector
- Unify DnD type to 'task-dnd' across all layouts
- Convert PillNav from route-based to state-based view switching
- Delete /kanban route (redirect to / with uebersicht mode)
- Update PWA shortcuts, settings, onboarding, help content

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-31 12:03:58 +02:00
Till JS
9f6e463eae refactor(calendar,contacts): replace inline SVGs with Phosphor icons
Migrate all inline SVG icon paths to Phosphor components from
@manacore/shared-icons across 38 files. Only spinners (loading
animations) and brand logos (Google) remain as inline SVGs.

Calendar: 0 inline icon SVGs remaining
Contacts: 6 remaining (3 spinners, 1 spinner, 2 Google logos)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-31 12:01:18 +02:00
Till JS
a545bb6d2f refactor(todo): move edit button from FAB to PillNav, share state via context
- Remove floating edit FAB from +page.svelte
- Add "Layout" pill (grid icon) to PillNav, only visible on homepage
- Share editMode state between layout and page via Svelte context
- Label toggles between "Layout" and "Fertig" when active
- Escape key exits edit mode

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-31 11:02:19 +02:00
Till JS
69915a7ca0 feat(todo): horizontal paper pages with inline edit mode
- Each section (priority/date) is its own paper sheet, scrollable horizontally
- Edit FAB (pencil icon, bottom right) toggles inline page editor
- Edit mode: rename pages, configure icon/filters/priorities per page,
  reorder with arrow buttons, add/remove pages
- Three page modes: priority (Eisenhower), date, custom
- Page width selector (S/M/L/XL) visible only in edit mode
- 10 configurable page icons
- Settings stores pageMode, pageWidth, customPages in localStorage
- Fix structuredClone error with Svelte proxies (use JSON round-trip)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-30 22:39:46 +02:00
Till JS
2783cc3cd8 fix(inventar): import ThemePage from @manacore/shared-theme-ui
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-30 22:09:11 +02:00
Till JS
9df8b5945b fix(inventar): import HelpPage from @manacore/help, not shared-ui
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-30 22:05:52 +02:00
Till JS
0d6005dbcc fix(inventar): import FeedbackPage from @manacore/feedback, not shared-ui
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-30 21:56:19 +02:00
Till JS
b737240ec1 feat(auth): add access tier system for phased app releases
Introduces a tiered access control system so apps can be released
gradually (founder → alpha → beta → public) without extra infrastructure.
Users are gated at the AuthGate level based on their tier vs the app's
requiredTier. All apps remain deployed and reachable, but only users
with sufficient tier can enter.

- Add accessTier enum + column to users schema (default: 'public')
- Add tier claim to JWT payload in better-auth config
- Add requiredTier field to ManaApp interface + all 25 apps
- Add hasAppAccess(), getAccessibleManaApps(), ACCESS_TIER_LABELS
- Update AuthGate with tier check + access denied screen
- Update getPillAppItems + Home page to filter by user tier
- Update all 22 app layouts to pass user tier to PillNav
- Add admin API: GET/PUT /api/v1/admin/users/:id/tier
- Document access tier system in CLAUDE.md

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-30 21:50:06 +02:00
Till JS
4a5fe3bee8 feat(ux): notepad design, keyboard navigation, contenteditable across todo/calendar/contacts
Todo: Notepad redesign (A4 width, lined paper, red margin), contenteditable titles,
Arrow/Tab navigation between tasks, circular navigation with QuickInputBar,
debug borders (Ctrl+Shift+D), removed hover effects, collapsed completed section.

Calendar Agenda: contenteditable event titles, Arrow/Tab navigation, circular
navigation with InputBar, removed hover effects, separate detail button.

Contacts Alphabet: contenteditable contact names, Arrow/Tab navigation, circular
navigation with InputBar, removed card hover, avatar as detail button.

Guidelines: new sections for list navigation, contenteditable patterns, debug borders.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-30 21:37:56 +02:00
Till JS
b9232438cf fix: nested button in inventar list view, uload-server port 3041→3070
- inventar-web: second nested <button> in list view also converted to
  <div role="button"> to fix Svelte 5 HTML validation
- uload-server: port changed from 3041 to 3070 to avoid conflict with
  Forgejo which also binds port 3041

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-30 21:37:18 +02:00
Till JS
df19d3acc4 fix: Docker build failures for mana-media and inventar-web
- mana-media: strip workspace devDep before bun install (shared-drizzle-config
  is only needed for drizzle-kit, not at runtime)
- inventar-web: replace nested <button> with <div role="button"> to fix
  Svelte 5 HTML validation error during build

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-30 21:31:52 +02:00
Till JS
aa26ae12ad fix(manadeck): switch web adapter from adapter-auto to adapter-node
adapter-auto does not produce a build/ directory for node deployments,
causing Docker builds to fail. Switch to adapter-node like all other apps.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-30 19:48:39 +02:00
Till JS
9de71c4be3 fix(citycorners): declare searchQuery and searching as $state
Both variables were used with bind:value but not declared.
Svelte 5 requires bind targets to be declared with $state().

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-30 19:39:14 +02:00
Till JS
8049a53a2b fix(todo): fix DnD reorder flicker and remove project dot indicator
- Replace key-based sync with ID-set comparison to prevent $effect from
  reverting drag-and-drop reorders; use dropInProgress flag with 1s timeout
- Add proper dnd-shadow-placeholder div instead of filtering SHADOW_PLACEHOLDER_ITEM_ID
- Remove project dot from TaskItem (redundant visual indicator)
- Reduce content-wrapper padding (1rem → 0.5rem mobile, 1.5rem → 1rem desktop)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-30 19:37:42 +02:00
Till JS
79c6ab10ea fix(citycorners): move @const outside HTML element to satisfy Svelte 5 rules
{@const} must be immediate child of {#each}/{#if}/etc, not nested
inside HTML elements.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-30 19:35:33 +02:00
Till JS
ff19c7f062 feat(times): add NL time entry parser with multi-entry and quick-input
Create entry-parser.ts with duration extraction (2h, 30min, 1h30m),
time range parsing (9-12, 14:00-16:30), project (@), tags (#), billable
($), and date recognition. Multi-entry splitting via semicolons with
context inheritance. Integrate quick-input bar into EntryForm — type
"Meeting 2h @Client $; Review 1h" and press Enter to create multiple
entries at once.

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