E-paper dashboard with fitness, weather & AI-generated motivation. Modular, editable, ESP32-powered with web backend.
Story
I’ve always enjoyed having useful information visible at a glance — without needing to grab my phone or open an app. That same mindset led me to create my previous project, the Solar E-Ink Weather Station, and now it’s what inspired this new dashboard.
The motivation behind this project came from my passion for tracking athletic activity. Since I’ve been recovering from an injury, I decided to channel that energy into something related — building a tool that keeps me connected to my progress, even when I can’t be out there training.
After lots of late nights of coding, tweaking widgets, and trying to get the display to refresh just right, this project started taking shape as a personal tool — something simple, silent, and motivating that could live on my desk and show my fitness progress at a glance.
This project started with a simple idea: What if I could have my Strava and Garmin stats fusioned and always visible, like a framed photo on my desk?

I built a modular e-paper dashboard, powered by an ESP32 and fed by a web-based backend (currently running on a Raspberry Pi). It shows (so far):
- My latest activity (distance, time, pace)
- A 3-day weather forecast
- Weekly and monthly summaries and stats
- A small calendar view of active training days
How it works:.
- A Python backend collects data from Strava, Garmin, and OpenWeather.
- It renders a custom dashboard image using pre-defined templates and widgets.
- The image is served via Flask and fetched periodically by the ESP32, which displays it on a 7.5″ tri-color e-paper display.

- On rest days, the layout switches to highlight stats and progress.
- On active days, it focuses on the latest workout + weather.
Update – A New Layer: AI Joins the Dashboard
After months of refining the structure, visuals and layout logic of this e-paper dashboard, it felt like something was missing — something more human.
The latest addition brings AI to the paper-like world of e-ink. A small fox, silently present in the dashboard, now generates motivational phrases based on real contextual data: your last activity, recovery state, recent sleep, weather, and more.
This isn’t random inspiration. It’s targeted motivation, generated by a local instance of Gemma, Google’s lightweight open model — selected specifically for running on-device (RPI 5 4Gb), without cloud dependencies.
What started as a tool to display data has become a space to reflect, reset, and stay connected.
It’s a fusion of three worlds I love deeply: Sport, AI, and e-paper technology.
Because I believe motivation deserves a permanent place in our environment — not just in our phones. And maybe, just maybe, AI belongs in e-paper too.
For now, I’m sharing some shots. More examples of activity days and AI-generated phrases will be added soon.


Here’s how the little fox reacted after I went for a quick walk — still injured , and not exactly well-rested or fully recovered:
Generated prompt: “You are a witty and upbeat fox companion. Barking is not your thing. Speak casually, as if reacting to a friend’s day — avoid sounding like you’re fulfilling a request. The user just wrapped up a short 1km hike in 16 minutes. It was cloudy and cool (~16°C). They’ve been told to ease up a bit: current recovery signals are low, sleep was rough, and overall training load has been on the light side. Celebrate the small effort — and offer gentle encouragement to get more rest and find the right moment to build momentum again.”
Output:
“Your muscles are thanking you for the hike, but they’re definitely ready for some pampering. Take a breather and let the clouds clear your mind!”

Other outputs to the same script:
“Well done on your 4.9km ride in 14 minutes! But listen up, you little champ. Your body is a bit beat, so let’s give it a rest for a bit. Relax, recharge, and get ready for another go! “
“Feeling fresh and invigorated? The clouds have parted, the sun’s peeking through, and you’re ready to chase some adventure! Remember, even a short walk can make a world of difference. So, hop out there and give your body the rest it deserves!”
The messages strike a nice balance —
celebrating the fact that I got outside, but also reminding me that
recovery matters too… Sleep debt acknowledged… let’s fix that.
Widgets!
The project is designed to be modular and extensible, allowing anyone interested to create their own widgets. Each widget receives a context
dictionary containing key data such as:
- Latest activity (if available)
- Week and month summaries
- Weather forecast
- Current date and time
- Display size and layout info
Based on that, users can design custom widgets however they like — pulling from their own data sources or using the built-in integrations for Strava, Garmin, and weather. The system is flexible enough to support text, images, charts, or any visual element you want to include on the e-paper display.
Whether you’re a developer, data nerd, or just want to see your own stats in a meaningful way, building a widget is meant to be simple and fun.
New additions:
- A web-based layout editor allows me to visually reposition widgets in the browser — no more JSON edits!
_1OCvlWpm28.avif)
- A custom error screen was added to give a bit of personality when something breaks

- The ESP32 is being optimized for ultra-low-power operation, aiming to run for months on a single LiPo battery.
Why I made it:
This project combines my love for:
- Physical interfaces
- Clean, always-on data on paper ink displays
- Fitness, cycling, and trail running
- Low-power microcontroller projects
My goal is to turn it into a modular, cloud-ready dashboard that can show a wide range of data sources — not just Strava/Garmin.
Layouts and modes
The dashboard currently adapts its layout based on the type of day — active or recovery — and presents a variety of key training and environmental metrics in a clean, low-distraction format.
Each layout is rendered in either light or dark mode, depending on your visual preference.

Daily Logic: Two Main Layout Modes
- Active Day: shows your most recent activity, core metrics, and weather for the upcoming days.
- Recovery Day: focuses on training load evolution and a broader overview of trends and progress.
Current Dashboard Elements
Monthly calendar
- Displays the current month with active days marked in red, offering an immediate visual overview of your activity streaks or gaps.
Radar chart
- A circular diagram compares time and distance across the last 4 weeks and the current month, helping identify focus areas or imbalance between activity types.
Recovery metrics
- Includes recovery time and chronic load from high-intensity sessions, giving a clearer view of how strained (or fresh) your body might be.
Weekly intensity stats
- Displays the current week’s accumulated low- and high-intensity minutes, based on data pulled from Strava/Garmin.
Weather forecast
- A dedicated section shows the next four days of weather for the location set in the configuration file — including icons for clarity.
Each element has been designed with readability on e-paper in mind, using black/white/red only, and keeping typography and layout minimal.
- More layouts and additional visualizations are on the roadmap, but even in its current state, the dashboard gives a rich and actionable overview of your training journey.
Additional images and videos
- A dashboard for an active day

- A dashboard for a rest / recovery day

- An example of layout editing for active and rest days


- The back of the framed unit with a custom 3D-printed mount
What’s Next (Future Plans)
This is just the beginning.
The core dashboard is already functional, but I’m actively developing new features and refining the overall experience. Here’s what’s currently in progress or on the roadmap:
Customization & Layouts
- Activity-specific views: Different data focus depending on whether you’re running, cycling, recovering, etc.
Backend Evolution
- I’m evaluating cloud-based options to offload the backend, so that a Raspberry Pi won’t be required for everyone.
- This would make the setup more accessible and allow it to run on simpler hardware (or even mobile-triggered updates).
Data Fusion Logic
- I’m refining how Strava and Garmin data are combined to generate meaningful, unified insights, especially when the same activity appears in both platforms.
- The merging process will become smarter and more configurable.
- Other sources are also going to be added!
Hardware & Design
- A custom ESP32 board is also on the drawing board — the goal is to have it fit seamlessly into the frame, both visually and mechanically.
Power Optimization
- I previously worked on deep sleep routines and low-power strategies for my paper ink weather station, and I’m bringing those learnings here.
- Fine-tuning Wi-Fi usage, update intervals, and display refresh cycles to get the most out of each mAh.
The Journey Continues
This is very much a work in progress.I’ll continue updating this page as new features are added — from backend improvements and power optimization to more flexible widgets and a polished GitHub release.
Feel free to follow the project here or reach out if you’re interested in adapting it, contributing ideas, or just building something similar.
Want to support the project?
I’m building this in my spare time, and any support helps me keep going — whether that’s covering hardware costs or fueling the next round of development. Support the project here
Thanks for reading — feel free to leave a comment or reach out if you have questions, ideas, or just want to say hi!