a4051ae132
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>
50 lines
1.7 KiB
Markdown
50 lines
1.7 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
|
|
# .env anpassen (mindestens CALENDAR_ENCRYPTION_KEY setzen)
|
|
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-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` |
|