20 Commits

Author SHA1 Message Date
Claude e6b81bef3c wip: session paused — all tasks complete
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-20 12:40:52 +02:00
Claude 001bfb3a0c Clip search widget content overflow and set sane minimum height
Prevents form fields from overlapping the widget border when sized
small. Changed overflow from visible to hidden and set minH back to 5.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-20 12:31:28 +02:00
Claude 30316e2353 Fix search widget: remove stray border line, reduce height
- Remove header border-bottom for search widget in all states
- Fix 10 dead CSS references to widgetCardEditMode → widgetEditing
- Reduce minimum grid height from 5 to 3 rows
- Reduce default creation height from 12 to 7 rows

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-20 12:27:47 +02:00
Claude 80bd18a630 Load calendar data async so slow/failing sources don't block page load
Split loadDashboardData into two phases: core data (settings, widgets,
notes) renders immediately, then calendar events load in the background.
Uses Promise.allSettled so individual calendar source failures don't
affect other sources or the dashboard.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-20 12:19:44 +02:00
Claude 09a0e44b30 Use accent color for stopwatch buttons instead of hardcoded green/red
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-20 12:07:21 +02:00
Claude b82e0e68c5 Add stopwatch to API widget type validation and defaults
The API has its own WidgetType and normalizeWidgetType that were not
updated when the stopwatch widget was added, causing 'Widget-Typ ist
ungültig' on creation.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-20 12:03:35 +02:00
Claude 04d14b3aea Add stopwatch widget with lap functionality
- New StopwatchWidget component with start/stop/reset and lap tracking
- Display shows MM:SS.cc with tabular-nums for stable layout
- Lap table shows split time and cumulative total per lap
- Uses requestAnimationFrame for smooth centisecond updates
- Registered as 'stopwatch' widget type, min grid size 6x8

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-20 11:58:40 +02:00
Claude ca76bf315c Move drag handle to top center edge of widget card
- Move drag handle out of widgetHeader into widgetCard directly so it
  sits at the top edge of the card, centered horizontally
- Style as a small tab (36x14px bar) protruding from the top border
- Always visible in edit mode for all widget types
- Remove old inline-flex overrides that conflicted with the new layout

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-20 11:54:19 +02:00
Claude 88614b080a Center drag handle at top of all widgets and fix dead edit-mode CSS
- Position drag handle at left: 50% with translateX(-50%) instead of
  left: 6px so it appears centered at the top of every widget
- Fix widget-density.css referencing non-existent class widgetCardEditMode
  (the actual class is widgetEditing), which caused edit-mode header
  padding adjustments to never apply

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-20 11:45:42 +02:00
Claude d277789aa6 Add admin password reset for users
- Extend PATCH /api/users/[id] to accept optional password field
- Hash with bcrypt (cost 12), invalidate target user's sessions
- Add "Passwort" button and modal dialog in admin user management
- Validate password length (10-128 chars) via existing normalizePassword

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-20 11:22:11 +02:00
Claude a63c1069dd Fix Docker port mapping: container listens on 3130, not 3000
The PORT env var overrides the internal port to 3130, so the mapping
must forward to 3130 instead of the Dockerfile default 3000.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-20 11:17:22 +02:00
Claude 0db81aa715 Remove duplicate CSS rules and simplify z-index hierarchy in globals.css
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-20 11:04:11 +02:00
Claude ec00024615 Merge toolbar-fixes.css and user-theme.css into globals.css
Consolidate two override CSS files into globals.css to reduce the number
of separate stylesheets. Both files were primarily overriding rules
already in globals.css (81% and 55% overlap respectively).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-18 13:44:46 +02:00
Claude 2f3e1bff1b Extract shared types to src/types/dashboard.ts
Consolidate duplicated type definitions (User, Settings, Widget,
CalendarEvent, CalendarSource, NoteBoardItem, etc.) into a single
shared types file. Removes ~100 lines of duplicated type code across
page.tsx, settings/page.tsx, NoteWidget.tsx, and CalendarWidget.tsx.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-18 13:42:30 +02:00
Claude a22f1baf4d Extract NoteWidget and CalendarWidget from monolithic page.tsx
Split page.tsx from ~2370 to ~1600 lines by extracting:
- NoteWidget: Markdown editor/preview, toolbar, checkbox toggle, all
  formatting helpers (bold, italic, lists, links, code)
- CalendarWidget: Month grid, event tooltips, source selection,
  next-events list, month navigation

Both components are self-contained with their own state where appropriate
(calendar month navigation, local content edits) while receiving data
and callbacks from the parent.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-18 13:36:06 +02:00
Claude 1ef34445a9 Remove --accept-data-loss from Dockerfile prisma db push
This flag allows Prisma to drop columns/tables when the schema changes,
which risks data loss on production upgrades. Without the flag, Prisma
will error instead of silently destroying data.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-18 13:26:55 +02:00
Claude 21953178ff Remove dead CSS: delete unused compact-widgets.css, deduplicate globals.css
- Delete compact-widgets.css (378 lines, never imported anywhere)
- Remove duplicate singleNoteWidget block in globals.css (exact copy-paste)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-18 13:26:20 +02:00
Claude ac60e0ef3d Remove hardcoded encryption key from .env.example
The example file contained an actual key value. Replace with empty
placeholder and add key generation instructions to README.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-18 13:19:59 +02:00
Claude 91e5902020 Add responsive grid layout for mobile/tablet support
Switch from fixed 48-column grid to responsive breakpoints:
- lg (>=1200px): 48 columns, free positioning (unchanged desktop behavior)
- md (>=900px): 24 columns, vertical compaction
- sm (>=600px): 12 columns, vertical compaction
- xs (<600px): 6 columns, vertical compaction

Widgets automatically reflow and stack on smaller screens instead of
being squished. Layout changes are only persisted from the desktop
breakpoint. Drag/resize editing is desktop-only.

Also adds mobile CSS refinements for topbar, tabs, and workspace padding.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-18 10:32:59 +02:00
Claude a4051ae132 Initial commit: Personal Dashboard
Next.js 16 dashboard with configurable widgets (favorites, notes, calendar,
clock, calculator, search, domain-check), multi-tab support, user auth,
dark mode, and Docker deployment.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-18 10:02:05 +02:00