Skip to content

Hubertoink/dashbo

Repository files navigation

DashbO

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.

Funktionsumfang

  • 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
  • Konfigurierbares Daten‑Refresh‑Intervall per ENV (DASHBO_DATA_REFRESH_MS)

Architektur (Kurz)

  • frontend/: SvelteKit (adapter-static) → statisches Build, ausgeliefert via nginx
    • nginx proxy’t /api/* an das Backend (siehe frontend/nginx.conf)
  • backend/: Node.js/Express API + Auth (JWT) + Postgres
    • DB-Migrationen laufen idempotent beim Start
    • Uploads werden im Volume unter /data/uploads gespeichert
  • db: Postgres 16

Quick Start (Docker Compose)

Voraussetzungen: Docker Desktop (oder Docker Engine) + Docker Compose.

  1. Konfig anlegen
  • .env.example nach .env kopieren und Werte anpassen (mindestens JWT_SECRET und POSTGRES_PASSWORD).
  1. Stack starten
  • docker compose up --build
  1. Öffnen

Erster Admin (Bootstrap)

Beim allerersten Start (solange noch keine User existieren) kann ein Admin automatisch angelegt werden:

  • In .env setzen: BOOTSTRAP_ADMIN_EMAIL, BOOTSTRAP_ADMIN_PASSWORD (optional BOOTSTRAP_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

Konfiguration (ENV)

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.

Wichtig (Production)

  • JWT_SECRET: unbedingt ändern
  • POSTGRES_PASSWORD: unbedingt ändern
  • CORS_ORIGIN: muss zur finalen Frontend‑Domain passen (z.B. https://dashbo.example.com)

Wetter

  • Standard: Open‑Meteo (kein Key nötig)
  • Optional OpenWeatherMap:
    • OWM_API_KEY setzen → OpenWeatherMap wird genutzt
    • OWM_LANG / OWM_UNITS steuern Sprache/Einheiten

Hinweis: Der Wetter‑Ort wird pro User in den Settings gespeichert (z.B. weather.location).

Outlook / Google Kalender (optional)

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_ID
    • OUTLOOK_CLIENT_SECRET
    • OUTLOOK_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_ID
    • GOOGLE_CLIENT_SECRET
    • GOOGLE_REDIRECT_URI
    • optional GOOGLE_SCOPES

Wichtig:

  • Bestehende Outlook-Verbindungen aus aelteren Versionen muessen einmal getrennt und neu verbunden werden, damit Calendars.ReadWrite wirklich 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.

Spotify (optional, Now Playing)

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_token erzeugen (Authorization Code Flow).
  • Empfohlene Scopes: user-read-currently-playing, user-read-playback-state
  • ENV:
    • SPOTIFY_CLIENT_ID
    • SPOTIFY_CLIENT_SECRET
    • SPOTIFY_REFRESH_TOKEN

Endpoint (auth‑geschützt): GET /api/spotify/now-playing

Refresh‑Intervall

  • DASHBO_DATA_REFRESH_MS (Default 60000) steuert, wie oft das Dashboard Daten nachlädt.

Persistenz (Volumes)

Compose legt Volumes an:

  • db_data: Postgres Daten
  • backend_data: Uploads/Medien unter /data/uploads

Backup & Restore

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

Development (ohne Docker)

Voraussetzungen: Node.js 20+, lokale Postgres‑Instanz.

Backend

  • cd backend
  • backend/.env.example nach backend/.env kopieren
  • npm install
  • npm run dev

Frontend

  • cd frontend
  • npm install
  • npm run dev

API (Kurzüberblick)

Siehe auch backend/src/routes/README.md. Typische Endpoints:

  • GET /health
  • GET /events?from=ISO&to=ISO
  • POST /events, PUT /events/:id, DELETE /events/:id
  • GET /weather
  • GET /holidays?from=ISO&to=ISO

Deployment

Für Mittwald (Container Hosting) gibt es eine Schritt‑für‑Schritt Anleitung: DEPLOY_MITTWALD.md.

About

Dashbo a simple calendar webapp

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages