For whatever reason, our youngest child finds it hilarious to ask if there’s school tomorrow. He knows the days of the week and which days have school, but that doesn’t stop him from asking. For my part, I’ve always liked the idea of e-ink displays as a personal dashboard. They’re unobtrusive, don’t need frequent charging, and I enjoy tinkering with hardware.
So, using his questions as an excuse, I spent some time last weekend configuring an e-ink display to definitively answer the question, “Is there school tomorrow?” It didn’t stop the questions, but it was a fun project and has become something the whole family can use.
Choosing the Hardware
I love the idea of reusing an old Kindle for an e-ink display, but unfortunately, I didn’t have the time to really dive into that. Instead, I settled on TRMNL, a customizable e-ink display that’s easy to set up while still giving you full access to the device.
The device itself measures about 17 cm x 12 cm. It doesn’t feel quite as sturdy as a Kindle, but it’s meant to be displayed somewhere, not held in your hand.
The front is mostly covered by the e-ink screen, and the back has:
- An on/off switch
- A refresh button
- A collapsible stand
- A hook to hang the display
Because it’s an e-ink display, it can run on battery for a long time between recharges. I haven’t drained it yet, but they claim you can get about 80 days per charge if you set the screen to refresh every 15 minutes.
Configuring the Display
There are several ways you can operate the TRMNL display, but the easiest is to configure it through their web interface. There are a number of pre-made plugins you can enable, including Google Calendar, the weather, and (of course) Shopify sales data. Once configured, your device will periodically ping the TRMNL servers and pull down the latest content to display.
Setting these up just takes a few clicks. It takes a few minutes for the data to sync, but then it will appear on your device.
Building a Custom Plugin
After setting up the Google Calendar and weather plugins, I wanted to build a custom plugin to answer the all-important question, “Is there school tomorrow?” To build a custom plugin you need two things:
- A web service that returns dynamic JSON data
- HTML/Liquid code to control the look and feel
Once these are in place, TRMNL will periodically poll your web service, merge the returned data with the HTML/Liquid template, and display it on your device.
My first version of the web service is simple. It just returns the following JSON:
{
"day_of_week": "Thursday",
"date": "March 6, 2025",
"has_school": true
}
This felt like a perfect use case for a Cloudflare Worker. It’s free, you don’t need to manage a server, and just a few lines of JavaScript can take care of the logic. To speed things up, I also asked ChatGPT to write the initial code for the Worker. The logic is simple: to determine if there’s school or not, it checks if tomorrow is a weekday that’s not in a list of hard-coded school holidays.
On the HTML/Liquid we have some code like this:
<div class="content">
{% if has_school %}
<span class="value value--tnums">Yes</span>
{% else %}
<span class="value value--tnums">No</span>
{% endif %}
<span class="label">School tomorrow</span>
</div>
All together, this took about 30 minutes to set up, including the Cloudflare configuration.
Putting It All Together
We hung the display on the side of the fridge in our kitchen, where it’s easy to see when you enter the room. It not only answers the important question but also shows the weather and upcoming events from our family’s Google Calendar.
My son still asks if there’s school tomorrow but I’m very happy with how it turned out. It was a fun weekend project - I finally got an e-ink display, and I already have several ideas for new plugins to add.