From 640ba8bfff3274e7be8a0ca5565e29c69601256d Mon Sep 17 00:00:00 2001 From: Andrew Marder Date: Mon, 6 Apr 2026 05:51:22 -0400 Subject: [PATCH 1/3] First draft --- src/content/post/trmnl/index.md | 35 +++++++++++++++++++++++++++++++ src/content/post/trmnl/umami.png | Bin 0 -> 50994 bytes 2 files changed, 35 insertions(+) create mode 100644 src/content/post/trmnl/index.md create mode 100644 src/content/post/trmnl/umami.png diff --git a/src/content/post/trmnl/index.md b/src/content/post/trmnl/index.md new file mode 100644 index 00000000..abf4e99b --- /dev/null +++ b/src/content/post/trmnl/index.md @@ -0,0 +1,35 @@ +--- +title: "TRMNL: My New ePaper Dashboard" +description: "" +publishDate: "2026-04-06" +--- + +
+ +
+ +Recently, I've been eyeing the [TRMNL X](https://youtu.be/D0wQ8gCxCvw?si=YwOn7qDHiALbWdZM) - it looks like some sweet hardware. As, I've read up on it, I learned that I could transform an old Kindle (which I had) into a TRMNL. I used TRMNL's open source code to transform my Kindle into a TRMNL, code [here](https://github.com/usetrmnl/trmnl-kindle). I also self-hosted [Terminus](https://github.com/usetrmnl/terminus) - TRMNL's "flagship" Bring Your Own Server (BYOS). I was disappointed with both open source offerings: + +1. When running TRMNL's code on my Kindle, the clock would be drawn over my dashboard. Not great. So, I modified their code using AI to make it more reliable. I've posted the results [here](https://github.com/amarder/trmnl-kindle). + +2. After spinning up Terminus, I discovered that it does not currently support plugins (one of TRMNL's main features). Not great. I moved over to using [LaraPaper](https://github.com/usetrmnl/larapaper), which supports plugins. + +Following the common tradition of blogging about blogging, I wanted disply my web analytics on my new dashboard. Building on a plugin created by [Nick Winans](https://nick.winans.io/), I put together [trmnl-umami](https://github.com/amarder/trmnl-umami). + +There are some big TODOs left on the software I've posted: + +1. trmnl-kindle crashes when I try to start it via KUAL. +2. trmnl-kindle has not been optimized to extend battery life. +3. trmnl-umami only supports full layout (not half or quadrant layouts). + +![A screenshot of trmnl-umami](umami.png) + +If you're curious about turning an old Kindle into a TRMNL, let me know. The current open source solutions are a quite rough so it might help to have a companion to go down this rabbit hole. \ No newline at end of file diff --git a/src/content/post/trmnl/umami.png b/src/content/post/trmnl/umami.png new file mode 100644 index 0000000000000000000000000000000000000000..02de165d615fa6255965b2e891170296bd5c141f GIT binary patch literal 50994 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 c@rYZWrU Date: Mon, 6 Apr 2026 06:31:17 -0400 Subject: [PATCH 2/3] Second draft --- src/content/post/trmnl/index.md | 34 ++++++++++++++++++++++++++------- 1 file changed, 27 insertions(+), 7 deletions(-) diff --git a/src/content/post/trmnl/index.md b/src/content/post/trmnl/index.md index abf4e99b..aebd55a4 100644 --- a/src/content/post/trmnl/index.md +++ b/src/content/post/trmnl/index.md @@ -16,20 +16,40 @@ publishDate: "2026-04-06" > -Recently, I've been eyeing the [TRMNL X](https://youtu.be/D0wQ8gCxCvw?si=YwOn7qDHiALbWdZM) - it looks like some sweet hardware. As, I've read up on it, I learned that I could transform an old Kindle (which I had) into a TRMNL. I used TRMNL's open source code to transform my Kindle into a TRMNL, code [here](https://github.com/usetrmnl/trmnl-kindle). I also self-hosted [Terminus](https://github.com/usetrmnl/terminus) - TRMNL's "flagship" Bring Your Own Server (BYOS). I was disappointed with both open source offerings: +I've been eyeing the [TRMNL X](https://youtu.be/D0wQ8gCxCvw?si=YwOn7qDHiALbWdZM) -- it looks like some sweet hardware. But I'm cheap. When I learned it was possible to transform an old Kindle into a TRMNL, I had to try it before shelling out for the real thing. I had an old Kindle sitting on a shlef, so off I went. Here's how it went. -1. When running TRMNL's code on my Kindle, the clock would be drawn over my dashboard. Not great. So, I modified their code using AI to make it more reliable. I've posted the results [here](https://github.com/amarder/trmnl-kindle). +**Things That Didn't Work Well** -2. After spinning up Terminus, I discovered that it does not currently support plugins (one of TRMNL's main features). Not great. I moved over to using [LaraPaper](https://github.com/usetrmnl/larapaper), which supports plugins. +I tried a few approaches before landing on a setup I was happy with: -Following the common tradition of blogging about blogging, I wanted disply my web analytics on my new dashboard. Building on a plugin created by [Nick Winans](https://nick.winans.io/), I put together [trmnl-umami](https://github.com/amarder/trmnl-umami). +1. **[Terminus](https://github.com/usetrmnl/terminus)** -- TRMNL's open source Bring Your Own Server (BYOS). After spinning it up, I discovered it doesn't currently support plugins, which is one of TRMNL's main features. -There are some big TODOs left on the software I've posted: +2. **[TRMNL's trmnl-kindle code](https://github.com/usetrmnl/trmnl-kindle)** -- This code kind of works, but the Kindle OS was still drawing its clock over my dashboard. + +3. **[Nick Winans' Umami plugin](https://github.com/Nicell/trmnl-umami)** -- Following the common tradition of blogging about blogging, I wanted to display my web analytics on the dashboard. Nick's plugin was a helpful starting point, but it didn't seem to work with Umami Cloud. + +**What I Landed On** + +After some tinkering, I settled on three open source tools that now power my setup: + +1. **[LaraPaper](https://github.com/usetrmnl/larapaper)** -- A TRMNL BYOS alternative that actually supports plugins. This replaced Terminus. + +2. **[trmnl-kindle](https://github.com/amarder/trmnl-kindle)** -- My modified version of TRMNL's Kindle code, tweaked with the help of AI to be more reliable. + +3. **[trmnl-umami](https://github.com/amarder/trmnl-umami)** -- A custom Umami analytics plugin, built on Nick Winans' work. + +![A screenshot of trmnl-umami](umami.png) + +**A Word of Warning** + +The software I've posted still has some rough edges: 1. trmnl-kindle crashes when I try to start it via KUAL. 2. trmnl-kindle has not been optimized to extend battery life. 3. trmnl-umami only supports full layout (not half or quadrant layouts). -![A screenshot of trmnl-umami](umami.png) +If you're interested in using any of this, please reach out. Knowing someone else wants to use it would motivate me to fix these issues. + +**Overall** -If you're curious about turning an old Kindle into a TRMNL, let me know. The current open source solutions are a quite rough so it might help to have a companion to go down this rabbit hole. \ No newline at end of file +I'm very happy with my new dashboard. It gives me a dedicated place to glance at things I'd otherwise pull out my phone to check -- weather, web analytics, finances. Now I can see all of that without getting sucked into my phone. \ No newline at end of file From e27553a348fac527cdf9974acaddc7a93c609349 Mon Sep 17 00:00:00 2001 From: Andrew Marder Date: Mon, 6 Apr 2026 09:03:29 -0400 Subject: [PATCH 3/3] Proofreading --- src/content/post/trmnl/index.md | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/content/post/trmnl/index.md b/src/content/post/trmnl/index.md index aebd55a4..0df1d3e8 100644 --- a/src/content/post/trmnl/index.md +++ b/src/content/post/trmnl/index.md @@ -16,33 +16,33 @@ publishDate: "2026-04-06" > -I've been eyeing the [TRMNL X](https://youtu.be/D0wQ8gCxCvw?si=YwOn7qDHiALbWdZM) -- it looks like some sweet hardware. But I'm cheap. When I learned it was possible to transform an old Kindle into a TRMNL, I had to try it before shelling out for the real thing. I had an old Kindle sitting on a shlef, so off I went. Here's how it went. +I've been eyeing the TRMNL X - it looks like some sweet hardware. But I'm cheap. When I learned it was possible to transform an old Kindle into a TRMNL, I had to try it before shelling out for the real thing. I had an old Kindle sitting on a shelf, so off I went. Here are my notes on the process. **Things That Didn't Work Well** -I tried a few approaches before landing on a setup I was happy with: +I tried a few things that didn't work for me: -1. **[Terminus](https://github.com/usetrmnl/terminus)** -- TRMNL's open source Bring Your Own Server (BYOS). After spinning it up, I discovered it doesn't currently support plugins, which is one of TRMNL's main features. +1. **[Terminus](https://github.com/usetrmnl/terminus)** -- TRMNL's open source Bring Your Own Server (BYOS). After spinning it up, I discovered it doesn't currently support plugins, which was a dealbreaker for me. -2. **[TRMNL's trmnl-kindle code](https://github.com/usetrmnl/trmnl-kindle)** -- This code kind of works, but the Kindle OS was still drawing its clock over my dashboard. +2. **[TRMNL's trmnl-kindle code](https://github.com/usetrmnl/trmnl-kindle)** -- This code kind of works, but the Kindle OS was still drawing its clock over my dashboard, another dealbreaker. -3. **[Nick Winans' Umami plugin](https://github.com/Nicell/trmnl-umami)** -- Following the common tradition of blogging about blogging, I wanted to display my web analytics on the dashboard. Nick's plugin was a helpful starting point, but it didn't seem to work with Umami Cloud. +3. **[Nick Winans' Umami plugin](https://github.com/Nicell/trmnl-umami)** -- Following the longstanding tradition of blogging about blogging, I wanted to display my web analytics on my dashboard. Nick's plugin was a helpful starting point, but it didn't seem to work with Umami Cloud. **What I Landed On** After some tinkering, I settled on three open source tools that now power my setup: -1. **[LaraPaper](https://github.com/usetrmnl/larapaper)** -- A TRMNL BYOS alternative that actually supports plugins. This replaced Terminus. +1. **[LaraPaper](https://github.com/usetrmnl/larapaper)** -- A TRMNL BYOS alternative that supports plugins. This replaced Terminus. -2. **[trmnl-kindle](https://github.com/amarder/trmnl-kindle)** -- My modified version of TRMNL's Kindle code, tweaked with the help of AI to be more reliable. +2. **[trmnl-kindle](https://github.com/amarder/trmnl-kindle)** -- My modified version of TRMNL's Kindle code, tweaked so the Kindle OS doesn't draw on my dashboard. -3. **[trmnl-umami](https://github.com/amarder/trmnl-umami)** -- A custom Umami analytics plugin, built on Nick Winans' work. +3. **[trmnl-umami](https://github.com/amarder/trmnl-umami)** -- A custom Umami Analytics plugin, built on Nick's work. ![A screenshot of trmnl-umami](umami.png) **A Word of Warning** -The software I've posted still has some rough edges: +The software I've posted still has many rough edges: 1. trmnl-kindle crashes when I try to start it via KUAL. 2. trmnl-kindle has not been optimized to extend battery life. @@ -52,4 +52,4 @@ If you're interested in using any of this, please reach out. Knowing someone els **Overall** -I'm very happy with my new dashboard. It gives me a dedicated place to glance at things I'd otherwise pull out my phone to check -- weather, web analytics, finances. Now I can see all of that without getting sucked into my phone. \ No newline at end of file +I'm very happy with my new dashboard. It gives me a dedicated place to glance at things I'd otherwise pull out my phone to check: weather, web analytics, finances. Now I can see all of that without getting sucked into my phone. \ No newline at end of file