A lightweight family dashboard designed for 7-inch displays. Built with React, Vite, and Tailwind CSS.
- Clock with current time and date (French locale)
- Weather: current conditions + 4-day forecast (OpenWeatherMap)
- Google Calendar: upcoming events from a shared family agenda
- Plex: recently added movies with cover art and watched indicator
- Radarr: download progress and missing movies
- Devices: online/offline status (HP Deskjet printer via CUPS)
dashboard → Static React app served by nginx (port 3000)
api → Python Flask backend for printer, calendar, Plex & Radarr (port 5100)
cp .env.example .env| Variable | Default | Description |
|---|---|---|
VITE_WEATHER_API_KEY |
— | OpenWeatherMap API key (required) |
VITE_WEATHER_CITY |
Paris |
City name |
VITE_WEATHER_UNITS |
metric |
metric / imperial |
VITE_WEATHER_LANG |
fr |
Language for weather descriptions |
VITE_API_URL |
http://localhost:5100 |
Backend API URL (use LAN IP for remote access) |
VITE_DEMO |
— | Set to true to use mock data (no API needed) |
CALENDAR_ID |
— | Google Calendar ID |
PLEX_TOKEN |
— | Plex authentication token |
PLEX_PUBLIC_URL |
http://localhost:32400 |
Plex URL accessible from browsers (LAN IP) |
RADARR_API_KEY |
— | Radarr API key (Settings > General) |
- Create a Google Cloud project and enable the Google Calendar API
- Create a service account and download the JSON key
- Share your calendar with the service account email (read-only)
- Place the key at
credentials/service-account.json
docker compose up -d --buildThe dashboard will be available at http://localhost:3000.
Start the API service in Docker, then run Vite's dev server directly:
docker compose up -d api
npm install
npm run dev -- --hostThe dashboard will be available at http://<your-ip>:5173 with hot reload.
Printer, calendar and Plex features require the api service running.
To develop without the API, enable demo mode with mock data:
# Add to .env
VITE_DEMO=trueOnce done, deploy to production:
docker compose up -d --build dashboard