Files
personal-dashboard/README.md
T
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

1.8 KiB

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

CALENDAR_ENCRYPTION_KEY generieren (32 Byte, Base64 oder Hex):

# Base64 (empfohlen)
openssl rand -base64 32

# oder Hex
openssl rand -hex 32

Den generierten Wert in .env eintragen, dann starten:

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-Key (Base64 oder Hex) für Kalender-Passwörter (muss generiert werden, siehe oben)
CALENDAR_ALLOWED_HOSTS Erlaubte Kalender-Hosts (kommasepariert) (leer = alle)
SESSION_TTL_DAYS Session-Lebensdauer in Tagen 30