A minimal, touch-friendly dashboard for Raspberry Pi 3 Model B+ with a 4.3" 800×480 display - designed as a drop-in replacement for a Xiaomi Mi Smart Clock (x04g)
Swipe between pages to access the clock, weather, to-do list, and alarms. No cloud account, no subscription, no tracking.
Clock 12h/24h format, optional seconds, configurable timezone. Clean, full-screen display optimized for e-paper-style readability at a glance. Shows next alarm time and system notifications (library scan progress, errors) as a live banner. When a scheduled alarm is marked to be skipped, the clock indicator reflects that state visually.
Weather Powered by Open-Meteo (free, no API key required). 5-day forecast with caching to minimize network calls.
Pomodoro timer Multi-session focus timer with configurable cycle lengths. Supports short breaks between sessions and a long break at the end of each cycle. Visual progress shown as an animated hourglass SVG or a pie-chart arc (selectable from Settings). Controls: play/pause, skip to next phase, reset.
To-do list Simple, persistent task list backed by SQLite. Add, check off, and delete tasks with touch-friendly controls.
Alarms Scheduled with node-schedule, plays audio files in a loop from a local folder. Configurable snooze (1, 5, or 10 minutes). The alarm modal takes over the full screen when triggered, with Stop and Snooze buttons. Stopping an alarm automatically navigates to the Weather page.
Alarms support per-weekday scheduling — set an alarm to ring only on specific days of the week, or leave all days unselected for a daily alarm. Each alarm also has a Skip next button: one tap silently skips the next occurrence and automatically resets afterward, so no manual follow-up is needed.
Song Highlights Uses ffmpeg (ebur128 loudness analysis) to detect the most intense moment of each audio file. Alarms start from that highlight instead of the beginning — so you wake up to the best part of the track. The library is scanned asynchronously at boot; progress is streamed live via SSE.
Auto theme Light/dark mode that follows actual sunrise and sunset times, calculated with the NOAA solar formula from your configured coordinates.
Internationalisation Full EN/IT interface, persisted in SQLite. Easily extensible to other languages by adding keys to src/i18n/translations.ts.
Remote control A lightweight companion page at /remote, reachable from any phone or device on the same local network. Lets you switch the page shown on the main display and control whatever's currently active — start/pause the Pomodoro timer, refresh the weather, add or edit alarms and to-dos — without touching the Pi itself. No extra app or server: same backend, same origin.
The interface is a horizontal swipe carousel — four pages, all navigable by touch or mouse drag.
| Layer | Technologies |
|---|---|
| Frontend | React 19, TypeScript, Vite, Tailwind CSS, shadcn/ui, Zustand |
| Backend | Express 5, better-sqlite3 |
| Navigation | react-swipeable |
| Weather | Open-Meteo API |
| Audio playback | mpg123 / aplay (Linux/Pi) |
| Audio analysis | ffmpeg (ebur128 loudness) |
| Real-time events | SSE (Server-Sent Events) — single multiplexed /api/events stream |
git clone https://github.com/patreekp/piclock.git
cd piclock
npm installThen open two terminals:
# Terminal 1 — backend
npm run server
# Terminal 2 — frontend
npm run devOpen http://localhost:8080 in your browser.
For full setup, Raspberry Pi deployment, and configuration details, see INSTALLATION.md.
MIT








