DashbO ist ein Touchscreen‑optimiertes Familien‑Dashboard mit Kalender, Aufgabenliste und Wetter. Es ist als Self‑Hosted Web‑App gedacht und läuft standardmäßig als Docker‑Compose Stack aus Postgres + Node/Express Backend + nginx Frontend.
- Dashboard‑Ansicht für große Displays (Kalender/Termine, Aufgaben, Wetter)
- Benutzerverwaltung (Login, mehrere Accounts)
- User‑gebundene Daten:
- Personen
- Tags (inkl. frei wählbarer Hex‑Farbe)
- Einstellungen (z.B. Wetter‑Ort, Anzeige‑Optionen)
- Hintergrundbilder/Uploads (pro User getrennt)
- Termine
- Einmalige Termine (mit/ohne Endzeit)
- Wiederholungen (je nach UI/Backend‑Unterstützung in der aktuellen Version)
- Outlook‑Kalender (optional)
- OAuth‑Login pro User
- Read‑only Anzeige zusätzlicher Termine
- Wetter (optional)
- Mit
OWM_API_KEY: OpenWeatherMap - Ohne API Key: Fallback auf Open‑Meteo
- Mit
- Konfigurierbares Daten‑Refresh‑Intervall per ENV (
DASHBO_DATA_REFRESH_MS)
frontend/: SvelteKit (adapter-static) → statisches Build, ausgeliefert via nginx- nginx proxy’t
/api/*an das Backend (siehefrontend/nginx.conf)
- nginx proxy’t
backend/: Node.js/Express API + Auth (JWT) + Postgres- DB-Migrationen laufen idempotent beim Start
- Uploads werden im Volume unter
/data/uploadsgespeichert
db: Postgres 16
Voraussetzungen: Docker Desktop (oder Docker Engine) + Docker Compose.
- Konfig anlegen
.env.examplenach.envkopieren und Werte anpassen (mindestensJWT_SECRETundPOSTGRES_PASSWORD).
- Stack starten
docker compose up --build
- Öffnen
- Frontend: http://localhost:8080
- Backend Health: http://localhost:3000/health (oder via Proxy: http://localhost:8080/api/health)
- Settings UI: http://localhost:8080/settings
Beim allerersten Start (solange noch keine User existieren) kann ein Admin automatisch angelegt werden:
- In
.envsetzen:BOOTSTRAP_ADMIN_EMAIL,BOOTSTRAP_ADMIN_PASSWORD(optionalBOOTSTRAP_ADMIN_NAME) - Dann Backend neu starten (oder nur Backend rebuilden):
docker compose up -d --build backend
Der Bootstrap-Admin (BOOTSTRAP_ADMIN_EMAIL) ist gleichzeitig der Mainadmin/Superadmin:
- nur dieser darf weitere Admins einladen
- jede Admin-Einladung erzeugt einen eigenen Familienkalender
- eingeladene normale User bleiben im Kalender des einladenden Admins
Alle Compose‑relevanten Variablen sind in .env.example dokumentiert.
Eine vollständige Übersicht inkl. Erklärung, Defaults und Beispielen findest du in docs/docker-variablen.md.
JWT_SECRET: unbedingt ändernPOSTGRES_PASSWORD: unbedingt ändernCORS_ORIGIN: muss zur finalen Frontend‑Domain passen (z.B.https://dashbo.example.com)
- Standard: Open‑Meteo (kein Key nötig)
- Optional OpenWeatherMap:
OWM_API_KEYsetzen → OpenWeatherMap wird genutztOWM_LANG/OWM_UNITSsteuern Sprache/Einheiten
Hinweis: Der Wetter‑Ort wird pro User in den Settings gespeichert (z.B. weather.location).
In /settings kann jeder User Outlook und optional Google Calendar verbinden. Der Webcal/ICS-Feed ist fuer abonnierende Kalender-Apps gedacht; der Sofort-Sync schreibt Termine direkt in einen eigenen Dashbo-Kalender beim jeweiligen Provider.
Outlook:
- Redirect URI (Docker/nginx):
http://localhost:8080/api/outlook/callback - API Permissions (delegated):
Calendars.ReadWrite,offline_access,User.Read - ENV:
OUTLOOK_CLIENT_IDOUTLOOK_CLIENT_SECRETOUTLOOK_REDIRECT_URI- optional
OUTLOOK_SCOPES
Google Calendar:
- Redirect URI (Docker/nginx):
http://localhost:8080/api/google/callback - OAuth Scope:
https://www.googleapis.com/auth/calendar - ENV:
GOOGLE_CLIENT_IDGOOGLE_CLIENT_SECRETGOOGLE_REDIRECT_URI- optional
GOOGLE_SCOPES
Wichtig:
- Bestehende Outlook-Verbindungen aus aelteren Versionen muessen einmal getrennt und neu verbunden werden, damit
Calendars.ReadWritewirklich im Token enthalten ist. - Fuer Outlook/Google Web sollte beim ICS-Abo die
https://...ics-URL verwendet werden.webcal://ist eher fuer Apple Calendar und lokale Kalender-Apps gedacht.
Wenn du möchtest, dass das Musik‑Widget auch Spotify‑Wiedergabe (z.B. am PC) anzeigen kann, kann das Backend optional den aktuellen Spotify‑Player‑Status abfragen.
- Spotify Developer App anlegen und einen
refresh_tokenerzeugen (Authorization Code Flow). - Empfohlene Scopes:
user-read-currently-playing,user-read-playback-state - ENV:
SPOTIFY_CLIENT_IDSPOTIFY_CLIENT_SECRETSPOTIFY_REFRESH_TOKEN
Endpoint (auth‑geschützt): GET /api/spotify/now-playing
DASHBO_DATA_REFRESH_MS(Default60000) steuert, wie oft das Dashboard Daten nachlädt.
Compose legt Volumes an:
db_data: Postgres Datenbackend_data: Uploads/Medien unter/data/uploads
Siehe docs/backup-restore.md.
Hinweis: docker-compose.yml enthält optional einen automatischen DB-Backup-Service (db_backup).
Aktivieren: docker compose --profile backup up -d
Voraussetzungen: Node.js 20+, lokale Postgres‑Instanz.
cd backendbackend/.env.examplenachbackend/.envkopierennpm installnpm run dev
cd frontendnpm installnpm run dev
Siehe auch backend/src/routes/README.md. Typische Endpoints:
GET /healthGET /events?from=ISO&to=ISOPOST /events,PUT /events/:id,DELETE /events/:idGET /weatherGET /holidays?from=ISO&to=ISO
Für Mittwald (Container Hosting) gibt es eine Schritt‑für‑Schritt Anleitung: DEPLOY_MITTWALD.md.