Skip to content

E-ink dashboard: TRMNL from cloud plugin to self-hosted byos

Phase 1 — cloud private plugin (worth documenting, then discarding): - Webhook: 2KB/request, 12/hour (free). We fit dithered 1-bit album art as a data-URI + queue into 2KB with progressive degradation. It worked. Barely.

Phase 2 — self-hosted byos_next (usetrmnl org, Next.js + postgres): - No rate/size limits, LAN-only, renders server-side at native grayscale. - BETTER_AUTH_URL must equal the public URL (origin checks). - Devices repoint via captive portal: Advanced → Custom Server (no trailing /). - Custom recipes = TSX with getData (server-side PULL — no pusher needed). Meta block + RecipeDefinition<params, data>; recipes compile in, so the compose flips from prebuilt image to build-from-source. - Our recipe: priority screen — HA timer countdown > MA now-playing (500px grayscale art, full queue via an ma-snapshot sidecar on the byos docker network) > byos native calendar+weather composed side-by-side. - Dual-mode params make it shareable: sidecar mode (full queue) or direct-HA mode (base URL + long-lived token; art inlined as data-URI). - Dynamic refresh: patched the display route (env-gated) to ask the sidecar's /mode — 15s timer / 30s music / 300s idle. - E-ink honesty: countdown shows "< N mins" (ceiling), end-time is the precise anchor; giant bold fonts blob — 150-170px at weight 400 with letter-spacing reads better than 210px bold.