A minimalist dashboard designed for wall-mounted displays. Shows the time, weather, and upcoming calendar events at a glance. Intended to be singular and private, not exposed to the web. Calendar feed pulls from Google Calendar.
This project is meant to be a one-off for my personal use. It isn't designed for anyone else to use it, but you are welcome to. However, you are on your own. There are small to low security risks which I may not bother to fix. My use for it is pretty unique so at the moment since it fits that use currently, changes will be small, infrequent and at my whim. If you really want to use it, I suggest forking it and adapting it to your needs.
- Live Clock — Current time and date, updates every second
- Weather — Temperature, conditions, and daily high/low from Open-Meteo
- Calendar — Upcoming events from Google Calendar (via ICS feed)
- Offline-First — Caches data locally; gracefully handles network issues
- Kiosk Ready — Designed for fullscreen display on dedicated screens
Weather icons provided by Basmilius https://github.com/basmilius/weather-icons
- Node.js 18+
- A Google Calendar (or any calendar with an ICS URL)
npm installCreate a .env file in the project root:
GOOGLE_ICAL_URL=https://calendar.google.com/calendar/ical/.../basic.ics
PORT=3000Finding your ICS URL:
- Open Google Calendar Settings
- Select your calendar → Integrate calendar
- Copy the Secret address in iCal format . That is the link that goes above.
Development:
node server.jsProduction:
npm run build
NODE_ENV=production node server.jsThe app will be available at http://localhost:3000.
For a wall-mounted display, run in fullscreen kiosk mode:
chromium --kiosk --noerrdialogs --disable-infobars http://localhost:3000Create a startup script or systemd service to launch both the server and browser on boot.
| Layer | Technology |
|---|---|
| Frontend | React, TypeScript, Tailwind CSS |
| Backend | Express, node-ical |
| Build | Vite |
├── server.js # Express server + API
├── src/
│ ├── components/
│ │ ├── ClockDisplay.tsx
│ │ ├── WeatherDisplay.tsx
│ │ └── AppointmentsList.tsx
│ └── pages/
│ └── Index.tsx # Main dashboard layout
└── .env # Configuration
MIT