ideas.
July 06, 2026 3 min read hardwaresolo-devproductivity

E-ink desk dashboard for calendar, weather, and one task

An ESP32-powered e-ink display that shows today's calendar, weather, and a single priority task, refreshed a few times a day with zero phone pickups.

The idea

A small e-ink panel that sits on a desk and shows exactly four things: today's date, the next two calendar events, the weather forecast, and the one task you told it matters most. It refreshes every 15–30 minutes over Wi-Fi, draws almost no power, and never buzzes, pings, or pulls you into a phone screen to check it. You configure it once from a tiny web form on your local network, and after that it just sits there being glanceable.

Why build this

Checking a phone for "what's next" reliably turns into checking three other apps first. E-ink displays solve the ambient-glance problem that phones and even smartwatches don't: no backlight, readable at any angle, and dead simple because there's nothing else on the screen to tap. ESP32 boards with e-ink shields (Waveshare, GxEPD2-compatible panels) have gotten cheap and well-documented over the last couple of years, and pairing one with a self-hosted backend instead of a vendor cloud app means the device owner controls the data source and refresh logic instead of being locked into a single calendar provider's app ecosystem.

Stack sketch

  • Display hardware: ESP32 dev board + a 4.2" or 7.5" Waveshare e-ink panel (SPI), powered over USB-C or a small LiPo with deep-sleep between refreshes for battery builds
  • Firmware: Arduino framework with GxEPD2 for panel drawing, plus a minimal HTTP client that fetches a pre-rendered layout from the backend rather than doing layout on-device
  • Backend: a small self-hosted service (FastAPI or a lightweight Go binary) that pulls from a CalDAV feed (Google Calendar, Fastmail, Nextcloud) and a weather API (Open-Meteo, no key required), composes the day's data, and renders it server-side as a 1-bit bitmap sized to the panel
  • Task source: a single flat text file or a tiny local web form — deliberately not a full task manager integration, since the display only ever needs the one thing you're prioritizing
  • Config UI: one local HTML page served by the backend for setting the CalDAV URL, weather location, and refresh interval — no app, no account system
  • Deployment: backend runs as one more container alongside an existing self-hosted stack, fronted internally; the ESP32 just needs the LAN address

Scope for v1

  • Fixed four-zone layout: date, next two events, weather, one task line
  • One CalDAV calendar source, one weather location, hardcoded refresh interval (configurable via the local web form)
  • Server-side bitmap rendering — the ESP32 only fetches and draws, no on-device layout logic
  • Manual task entry via the web form, overwritten each time (no task history or completion tracking)
  • Out of scope for v1: multiple calendars, multi-device fleets from one backend, e-ink color panels, battery-only operation with deep sleep tuning

Where it could go

The most requested addition for anything like this is always multiple zones users can rearrange — letting someone swap the weather panel for a stock ticker, a habit streak counter, or a "days until" countdown, which argues for a simple zone-and-widget config format in the backend rather than a fixed layout, once the core loop is proven. A second natural step is a small fleet mode: one backend serving several panels (kitchen, desk, hallway) each with their own zone config, which mostly falls out of adding a device ID to the existing render endpoint.

Battery-only operation is the more interesting hardware expansion — tuning ESP32 deep sleep and panel refresh timing to get a device that runs for months on a small LiPo, at which point it stops being "a thing plugged into a desk" and becomes something you could mount anywhere in a house.

Watch out for

E-ink panels have a limited full-refresh lifespan and visible ghosting if you refresh partial regions too aggressively — budget for occasional full clears rather than only partial updates, and don't be tempted to refresh more often than the content actually changes just because you can.