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>
- 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>
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>
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>
- 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>
- 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>
- 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>
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>
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>
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>
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>
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>
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>
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>
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>