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

64 lines
1.8 KiB
Markdown

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