One Monday evening in July, I found myself taping an old kindle e-reader to the wall of my apartment and somehow thinking it was a good idea.


To understand why I thought it was worth doing, we need to go back even further. The idea behind this originally came to me when I was hanging out at my friend Brooke’s place earlier this year. She has a display on her wall for transit times and weather, and I decided I wanted something like it. At the time, I was about to move closer to Boston, where the transit part would be more useful, but the move kept me too busy to really work on it.
After my move, I started on the project in earnest. I decided that it should have some sort of e-ink screen so as to not be overly bright and distracting. Since refreshes are slow on e-ink, it needed to be decently-sized to fit a decent amount of information at a time. Loose e-ink development boards are annoyingly expensive, but my friend Hunter suggested a jailbroken kindle. Used kindles are very cheap, and developments a few months earlier made any kindle that hadn’t been turned on for a while usable for homebrew code.
After much thought about what to display, I sketched out a (kinda ugly) design that I thought would be easy to build. As you can see in the pictures, I didn’t end up straying far from it.

I traded my friend Mia a roll of film for an old kindle she had laying around (she probably got the better in the trade) and set to work jailbreaking it. The jailbreak turned out to be pretty easy (just had to make sure the kindle was registered, which requires enabling two-factor authentication for kindles this old) and I quickly started turning my sketch into an actual webpage. I chose to develop this as a webapp running in Mesquito, since it looked easy at the time.
As you can see from the page you’re reading this on, I am not very good at web development, so this was something of a slow process. The browser on the kindle is roughly equivalent to Safari 5 from 2010, and I spent a lot of time checking MDN and then cursing as Can Mesquite Use told me the useful feature I found wouldn’t work.


With something that looked pretty close to how I wanted it, it was time to write some code to fetch and display information and actually make this whole thing do something.
I took inspiration from IKEA’s corporate structure. While they go to great lengths to avoid taxes, I went to great lengths to avoid writing javascript. I implemented as much as possible in PHP running on a webserver, with only some logic to refresh the page every minute running on the kindle itself (this proved a pain to debug; more on that later). The actual details of how my code gets the stuff to display are boring, but I wrote a bit about them over with the code.
After all this, I had something that almost worked, apart from the kindle’s habit of turning off every few minutes. Nowadays, there’s a javascript API to request that the screen stay on, but that doesn’t exist in the ancient browser on the kindle, so I had to find another solution. A stranger on reddit pointed me in the direction of Helper+, which has a button to keep the screen on and neatly solved my problem, except that it’s somewhat annoying to turn this feature off.

With the kindle ready to run its battery into the ground, I moved on to adding another feature stolen from Brooke’s display: 11:11 make a fish. makea.fish has become an obsession among my friends, and I wanted to get in on it by making my dashboard display a fish at 11:11am and 11:11pm. At Mia’s suggestion, I used LingDong-’s fishdraw, since its line drawings fit the æsthetic of the kindle nicely and generated an entire school of fishes to display.
I was finally able to tape the kindle to the wall, but I soon found a few bugs that made the display nearly useless by randomly crashing or not refreshing. I knew they were caused by my old foe, javascript, but I had no idea how to fix them. I flailed, adding code to display cryptic text at the bottom of the screen (modern javascript debugging tools not having been invented yet), but I couldn’t figure out why it wasn’t refreshing.


r! undefined
meant, but now noöne does.I got so frustrated that I ended up turning the kindle off for the better part of a month until my friend Ari was in town and could be nerdsniped into helping me. She knows enough javascript to think that my attempts at it are very funny (apparently making the page overwrite itself isn’t a normal way of reloading) and had a few ideas of how to make it less of a mess. We changed a bunch of small things and used a different way of making the page overwrite itself that uses less memory, which fixed all the bugs I’d run into.
With the fixed code, the kindle’s been happily sitting on my wall for the past month, reliably telling me useful information.

If you’re interested in looking at the sins that make this run, the code is on giþub.
Thank you to Brooke (inspiration), Hunter (kindle suggestion), Mia (the kindle and fish suggestions), and Ari (javascript criminal and proofreader). Thank you also for reading!