PartsSetupStatus

Build a Hearth.

Start with the software on any machine you have, and use it in a browser. When you want it on the wall, add a small host and a framed e-paper panel.

The key decision

Two devices, two power budgets.

Don't treat “the frame” as one device. The host runs the whole stack — the web app and eleven small services — and can live in a closet or on a shelf anywhere on your network.

The frame client is a small Raspberry Pi mounted behind the panel. It fetches a finished image, pushes it to the e-paper and listens for button presses. That's all — so the thing on your wall stays at well under a watt.

The Night frame theme: white and yellow type on black.
What to buy

The parts list.

Product lineups and prices drift — check the current listings before ordering. The hardware guide explains every choice.

Panel

Pimoroni Inky Impression 13.3"

E Ink Spectra 6 — six inks at 1600 × 1200, about 150 PPI. Includes the driver board, four buttons along one edge, and a header the Pi plugs straight onto.

Frame client

Raspberry Pi Zero 2 W

The “WH” version, with a pre-soldered header. Idles around 0.6 W. A Pi 4 works too (that's what it's being developed on), plus a microSD card and a 5 V USB supply.

Host

Raspberry Pi 4/5 or a mini PC

Anything that runs Docker: a Pi with 4–8 GB, or an Intel N100-class mini PC. Prefer an SSD over microSD — many services write to SQLite all day.

Enclosure

A deep shadow-box frame

Deep enough for the panel, driver board and Pi. No glass in front — glare is exactly what e-paper avoids. Leave the buttons reachable and a path for the power cable.

Four buttons, no app needed

The Inky's buttons cover the quick actions; your phone handles everything else. The planned starting mapping:

ARefresh now
BAmbient ↔ Daily
CColor ↔ black & white
DShow status
Run it

From clone to dashboard.

You'll need Docker Engine 25+ with Compose v2.22+. The README has the full details.

  1. Get the code

    Clone the repository onto the machine that will be your host.

    git clone https://github.com/lrv1668-gif/Hearth.git
    cd Hearth
  2. Tell it where home is

    Services that need a location or an API key read a small .env file. Create one for each service listed in the README — Compose expects them all to exist, but you can leave the keys blank for integrations you don't use. Tasks, quotes and news need nothing.

    # src/Weather/.env
    LATITUDE=40.7128
    LONGITUDE=-74.0060
  3. Start the stack

    Docker Compose builds and starts everything behind Caddy. Then open the host in a browser.

    docker compose -f docker-compose.yml up --build
  4. Make it yours

    In Settings, pick a theme and typeface, choose which widgets show and where, connect any integrations below, and design the frame with a live preview.

Optional

Connect what you use.

Every integration is optional. Each lives in its own service, caches what it fetches, and keeps showing the last good data if the outside world goes quiet.

FeatureSourceNeeds
Tasks & countdownsBuilt inNothing
Almanac & moonComputed on the hostLocation, time zone, frost dates
WeatherOpen-MeteoLocation
Daily quoteZenQuotesNothing
NewsAny RSS or Atom feedFeed URLs, added in Settings
PhotosYour uploads, or UnsplashAn Unsplash key for live photos
CalendarGoogle Calendar & TasksGoogle OAuth client
Now playingSpotifySpotify app credentials
Birds nearbyeBirdFree eBird API key
Trains & busesTransitlandTransitland API key
Where it stands

Honest progress.

Hearth is a work in progress. Here's what's real today and what's next.

PieceStatus
Web dashboard, calendar, ambient slideshow, settingsBuilt
Frame layouts — Ambient and Daily, 13 palettes, B&W, portraitBuilt; viewable in any browser at /frame
Shared frame settings with a live previewBuilt, in the Display service
Frame client (inkypull)Written and tested off-hardware
Host-side capture and dithering to the six inksNext up
Mode schedule, buttons, presence-aware refreshPlanned
Plant careOn the wish list
Under the hood

Small services, one quiet page.

Each concern — tasks, weather, photos, the calendar — is its own small ASP.NET Core service with its own SQLite file, so one flaky upstream can't take the rest down. CI publishes amd64 and arm64 images, and a host can update itself on a timer.

Read the software design and the product vision for the full picture.

FrontendSvelteKit 2, Svelte 5, Tailwind CSS 4
Services.NET 10, ASP.NET Core Minimal APIs
StorageSQLite, one file per service
ProxyCaddy 2
DeployDocker Compose, multi-arch images
Frame clientPython on Pimoroni's inky

Questions, ideas, a frame of your own?

Open an issue or follow along on GitHub.