Lab · shipped · August 6, 2026

Retro Clock - wallpaper & screensaver for Mac

Needed a new wallpaper and screensaver, so I designed and built my own.

Needed a new wallpaper and screensaver for my MacBook, so instead of paying for one I designed and built my own - a retro clock and calendar chassis synced live to the system time and date, now with a live weather widget and an ambient pomodoro timer. Runs fully offline as a single HTML file, no dependencies. The screensaver reuses that exact file inside a native Swift wrapper.

Wallpaper (via Plash)
  1. Download the file and place it in its own folder.
  2. Install Plash from the Mac App Store.
  3. Plash menu bar icon → Add Website → toggle Local website → select the folder.
  4. Turn off Browsing Mode so clicks pass through to the desktop.
Screensaver
  1. Download and unzip RetroClock.zip.
  2. Open Terminal, cd into the unzipped folder.
  3. Run bash build.sh (requires Xcode Command Line Tools).
  4. System Settings → Wallpaper → Screen Saver → Show All → pick "Retro Clock".

Built in vanilla HTML/CSS/JS with Claude Code - no frameworks, no build step. The screensaver wraps that same file in a native ScreenSaverView using WKWebView. Weather comes from Open-Meteo (no API key), with location resolved automatically (IP-based, falling back to a fixed city) - no setup needed. The pomodoro timer runs automatically in the background (25 min focus / 5 min break, on a repeating cycle) rather than needing clicks, since the wallpaper surface can’t reliably receive them.

Each condition gets its own day and night icon, classified from the forecast’s temperature and time of day rather than a 1:1 weather-code mapping.

Two rows of weather cards for Bangalore, India, cataloguing every icon state the widget can show. Daytime: hot sunny (38°C), warm partly cloudy (30°C), cloudy (26°C), light rain (24°C), heavy rain (22°C), cool (18°C), cold (12°C). Nighttime: clear (24°C), moonlit (22°C), warm (26°C), cloudy (20°C), cool (16°C), cold (10°C) - each card showing its high and low.