# 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 ```bash cp .env.example .env ``` `CALENDAR_ENCRYPTION_KEY` generieren (32 Byte, Base64 oder Hex): ```bash # Base64 (empfohlen) openssl rand -base64 32 # oder Hex openssl rand -hex 32 ``` Den generierten Wert in `.env` eintragen, dann starten: ```bash docker compose up -d ``` Das Dashboard ist dann unter `http://localhost:3130` erreichbar. ## Entwicklung ```bash 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` |