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
2026-06-18 10:02:05 +02:00
2026-06-18 10:02:05 +02:00
2026-06-18 10:02:05 +02:00
2026-06-18 10:02:05 +02:00
2026-06-18 10:02:05 +02:00

Personal Dashboard

Ein selbst gehostetes persönliches Dashboard mit konfigurierbaren Widgets, Multi-Tab-Support und Benutzerverwaltung.

Features

  • Widgets: Favoriten/Links, Notizen (Markdown), Uhr, Taschenrechner, Suche, Kalender (ICS + Exchange EWS), Domainprüfung
  • Dashboard-Tabs: Mehrere Dashboards pro Benutzer
  • Drag & Drop: Widgets frei im Raster positionieren und skalieren
  • Dark Mode und anpassbares Branding (Logo, Farben, Hintergrundbild, Custom CSS)
  • Benutzerverwaltung: Admin- und User-Rollen, Session-basierte Authentifizierung
  • Kalender: Mehrere Quellen pro Widget, ICS-URLs und Exchange EWS mit verschlüsselten Zugangsdaten

Tech Stack

  • Frontend: Next.js 16, React 19, react-grid-layout
  • Backend: Next.js API Routes, Prisma ORM
  • Datenbank: SQLite
  • Deployment: Docker

Schnellstart mit Docker

cp .env.example .env
# .env anpassen (mindestens CALENDAR_ENCRYPTION_KEY setzen)
docker compose up -d

Das Dashboard ist dann unter http://localhost:3130 erreichbar.

Entwicklung

npm install
npx prisma generate
npx prisma db push
npm run dev

Umgebungsvariablen

Variable Beschreibung Standard
DATABASE_URL SQLite-Pfad file:/data/dashboard.db
INITIAL_ADMIN_EMAIL E-Mail des initialen Admins admin@example.local
INITIAL_ADMIN_PASSWORD Passwort des initialen Admins (muss gesetzt werden)
CALENDAR_ENCRYPTION_KEY 32-Byte-Hex-Key für Kalender-Passwörter (muss gesetzt werden)
CALENDAR_ALLOWED_HOSTS Erlaubte Kalender-Hosts (kommasepariert) (leer = alle)
SESSION_TTL_DAYS Session-Lebensdauer in Tagen 30
S
Description
Selbst gehostetes persönliches Dashboard mit konfigurierbaren Widgets
Readme 208 KiB
Languages
TypeScript 69.5%
CSS 29.6%
JavaScript 0.6%
Dockerfile 0.3%