A synthwave dashboard for an ultrawide secondary display on macOS (Apple Silicon). Big clock + Vietnamese lunar calendar, weather, real CPU / GPU / RAM / power stats, touch-friendly app launcher buttons, and rotating wallpapers — running as a native kiosk app, configurable from a built-in Settings panel.
Originally built for the Corsair Xeneon Edge (14.5" 2560×720), but works on any secondary display.
English UI with a built-in Vietnamese lunar calendar (can be turned off in Settings).
- 🕐 Large clock (12/24h, optional seconds) + date
- 🌙 Vietnamese lunar calendar (Hồ Ngọc Đức algorithm)
- 🌦️ Weather via Open-Meteo (no API key) — auto-locate or manual
- 📊 Real system stats: CPU, GPU, RAM, and total power draw (Watts) — read locally via
vm_stat/ioreg/ a tiny SMC reader, nosudorequired - 🎛️ 6 touch buttons → open apps / websites / URL schemes
- 🖼️ Auto-rotating wallpapers (add your own) over a procedural synthwave background
- ⚙️ Settings UI (gear icon): location, clock format, buttons, wallpapers, effects — saved in
localStorage - 🖥️ Native macOS app (WKWebView kiosk) + auto-start at login
- macOS 12+ on Apple Silicon (M1/M2/M3/M4…)
- Xcode Command Line Tools:
xcode-select --install - Python 3 (ships with the Command Line Tools)
git clone https://github.com/<you>/edge-dashboard.git
cd edge-dashboard
./install.shThis builds the app + SMC reader and installs three LaunchAgents (local web server, stats feed, the app) that auto-start at login. The app opens full-screen on the secondary display named like a Corsair Xeneon (falls back to the main display).
Open Settings with the gear icon (top-right) to set your city, clock format, button shortcuts, wallpapers, and effects.
Uninstall: ./uninstall.sh
Ships with 14 free-license synthwave/neon wallpapers (from Pexels,
Pexels License: free to use and redistribute, no attribution required) in dashboard/bg/,
rotating on a timer over the procedural synthwave background.
Add your own: drop ultrawide images into dashboard/bg/, then list them in
Settings → Backgrounds (e.g. bg/mine.jpg). Set rotation interval or turn it off there.
Each button has an emoji icon, a label, a color, and a target URL:
- Website:
https://example.com - macOS app:
file:///Applications/Safari.app - URL scheme:
music://,x-apple.systempreferences:
The native app opens these via NSWorkspace, so app/website buttons work even though
the dashboard itself stays on screen.
macOS does not treat the Xeneon Edge as a touchscreen out of the box. To turn touches into clicks, use a community user-space driver such as ymlaine/TouchscreenDriver (MIT). It needs Accessibility + Input Monitoring permission. Not required for the dashboard itself — only for touch input.
EdgeDashboard.app (WKWebView, fullscreen kiosk)
│ loads
▼
http://127.0.0.1:8787 (python -m http.server, localhost only)
│ serves
▼
dashboard/index.html ◀── reads stats.json (refreshed every ~3s by stats.py)
dashboard/stats.py— writesstats.jsonwith CPU/GPU/RAM/power. RAM matches Activity Monitor ("Memory Used" = app + wired + compressed). Power is the SMCPSTRsensor.dashboard/smc/smc.swift— minimal SMC reader for total system power.app/EdgeDashboard.swift— native kiosk window + app menu (change wallpaper / reload / quit).
- The local web server binds to 127.0.0.1 only — stats are never exposed to your LAN.
- No accounts, no telemetry, no API keys, no analytics.
- Outbound requests: weather (
api.open-meteo.com, sends lat/lon), IP geolocation (ipapi.co, only in auto location mode — switch to manual to avoid), and Google Fonts. That's all.
- Fonts: Orbitron, Chakra Petch (Google Fonts, SIL OFL)
- Wallpapers: Pexels (Pexels License)
- Weather: Open-Meteo
- SMC reading approach inspired by beltex/SMCKit
- Touch driver: ymlaine/TouchscreenDriver
MIT — see LICENSE.

