
Custom embedded system
Runner's E-Paper Dashboard
A four-color, always-ready training command center built for one useful glance—not another screen demanding attention.
One screen, six purposeful layers
The hierarchy follows the decisions a training day actually asks you to make—from the next workout to the conditions outside, then the quieter signals that keep the day on track.

- 1
Next workout
Runna surfaces the prescription, duration, best or scheduled weather window, and actual-versus-planned weekly mileage.
- 2
Training load
Monday–Sunday Strava progress shows completed runs, sessions still ahead, and current-year running mileage—all in miles.
- 3
Race-day motivation
The TCS New York City Marathon countdown sits beside live Team for Kids fundraising progress.
- 4
Conditions now
A large 12-hour clock and current weather cover temperature, rain, wind, humidity, UV, and air quality.
- 5
Time and tools
Day, month, and year progress share the lower rail with Claude Code's five-hour and seven-day usage windows.
- 6
E-paper lifecycle
Seam-safe partial updates, three-hour de-ghosting, offline fallbacks, and a 10:30 PM–7:00 AM powered-down quiet period keep it dependable.
What I owned
Product design, interface architecture, Raspberry Pi integration, display-driver engineering, data integrations, and reliability testing.
Problem
Put the training plan, current conditions, race motivation, and daily context in view without opening a phone or accepting the visual noise of a conventional monitor.
Built
Designed a native 1360 × 480 interface around Runna, Strava, the New York City Marathon, weather, time progress, and Claude Code usage, then built a safe partial-refresh driver for the panel's two-controller architecture.
Outcome
A calm, runner-first surface that stays useful throughout the day, updates only the regions that changed, and powers the display hardware down overnight while the last image remains visible.
The conditions that shaped the system
The 10.85-inch glass is one visual canvas driven by two controller dies split exactly at x=680.
Four-color particles need a deliberate waveform; localized updates reduce disruption but do not turn e-paper into an LCD.
Personal API credentials must stay off the display, out of the repository, and recover cleanly when a service is unavailable.
Tradeoffs made explicit
Runner first
Runna owns the largest region, with the next prescription and Monday–Sunday mileage visible before secondary system information.
Design to the silicon
Every widget is clipped to a controller-safe zone, so frequent updates never straddle the physical x=680 seam.
Conserve the panel
Localized updates handle the day, a full refresh clears accumulated ghosting every three hours, and one static night summary precedes hardware power-off.
The finished system combines a physical product, a purpose-built interface, live service integrations, custom display control, and verified on-glass behavior.