My 2026 Reading Challenge

I track my reading on Goodreads. The site has various challenges that you can track toward different goals.

The one I use is setting a goal for how many books I read over the year. For 2026, I set my goal at 30 books, which felt ambitious.

Today, I reached that goal.

A completed 2026 Goodreads Reading Challenge badge showing 30/30 books read (100%), with a congratulatory message confirming the goal has been met.


With my spine issues, I’m on my back a lot, and found myself having more time to read than I expected, so the yearly challenge was completed quite early in the year.

Another goal was reading all the Hugo and Nebula nominated novels so I’d have an opinion on the winners. There are 11 different novels due to the overlap.

I made a short video about my thoughts on the nominees.

2025 Hugo & Nebula novel finalists #booktok #hugo #nebula

Enjoy the videos and music you love, upload original content, and share it all with friends, family, and the world on YouTube.

After finishing the Hugo & Nebula nominees, I’m now reading through the Locus Science Fiction and Fantasy novel choices. That’s 14 additional novels beyond the books on the Hugo and Nebula lists. I have 8 more to go on that challenge.

After hitting the 30 book Goodreads milestone, I decided to run my goodread-tools script to create a graphic of the 30 books I read so far in the challenge.

Infographic titled 'Michael's Year in Books, January 2026 – August 2026' on a cream background with dark brown and rust-red accents. Top section, 'By the Numbers' (4 highlights): Peak Month — Apr '26, 6 books, the year's most prolific stretch. Books Read — 30, finished cover-to-cover this year. Longest Read — The Raven Scholar by Antonia Hodgson, 656 pages. Average Length — 412 pages per book, across 30 finished. Middle section, 'Books Read by Month' (peak: 6 in Apr '26): a bar chart for Jan–Aug 2026. Approximate values — Jan: 5, Feb: near 0, Mar: 2, Apr: 6 (highlighted in rust-red), May: 6 (highlighted in rust-red), Jun: 4, Jul: 4, Aug: 5 (partial/in progress, marked with an asterisk). Bottom section, 'What You Read' (all 30, listed chronologically, numbered 1–30 in two columns): Kingdom of Trash — Robert Macrae Flybot — Dennis E. Taylor Slow Gods — Claire North When the Moon Hits Your Eye — John Scalzi A Little Hatred — Joe Abercrombie The Golden Compass — Philip Pullman Stuck in Space: An Astronaut's Hope Th... — Barry "Butch" Wilmore When We Were Real — Daryl Gregory The Mote in God's Eye — Larry Niven Sunward — William Alexander The Incandescent — Emily Tesh A Drop of Corruption — Robert Jackson Bennett Death of the Author — Nnedi Okorafor Shroud — Adrian Tchaikovsky The Raven Scholar — Antonia Hodgson The Everlasting — Alix E. Harrow Katabasis — R.F. Kuang Wearing the Lion — John Wiswell The Buffalo Hunter Hunter — Stephen Graham Jones Sour Cherry — Natalia Theodoridou Picks and Shovels — Cory Doctorow Ancestral Night — Elizabeth Bear There Be Dragons Here — S.L. Rowland The Shattering Peace — John Scalzi Hemlock & Silver — T. Kingfisher This Vast Enterprise: A New History of ... — Craig Fehrman Nine Goblins: A Tale of Low Fantasy an... — T. Kingfisher Pride and Prejudice in Space — Alexis Lampley 36 Streets — T.R. Napper The Spellshop — Sarah Beth Durst


As you can see, I did fit in some books that aren’t award contenders, sometimes you need a little cozy fantasy to clear your head.

Some of the award winners aren’t what I would have chosen, mainly due to my tastes being developed on sci-fi/fantasy books from the 60s & 70s. My parents were big readers and I grew up with a large book collection at home.

Still, I’ve only read a few frustrating books this year that I really didn’t like.

Overall, I’ve enjoyed focusing on the nominees with a dash of booktok recommendations tossed in.

SportsCrawl.app

This post is for people on Bluesky, if you’re not on Bluesky, keep scrolling.

I built an app that sends you a daily DM with final scores and today’s game schedule for teams you follow.

Looks like this:

Sports scores widget for Thursday, August 6, showing final scores of Dodgers 6–Cubs 7 and Sparks 88–Sky 95, with an upcoming game of Sparks at Lynx at 6:00 PM.


MLB, NBA, WNBA, NFL, NHL, MLS, NWSL, Premier League, and tournaments.

Silence on days your teams don’t play.

No login, no app to install. Text only.

DM @sportscrawl.app on Bluesky to start.

SportsCrawl logo featuring a dark navy circle with colorful horizontal bar lines on the left, alongside the brand name with "Sports" in navy and "Crawl" in orange bold text.

Honey Gate Wrench

When harvesting honey I use several five gallon buckets. The buckets I use have small gates in them to allow honey to pour out.

The internal nut is hexagonal and can be a headache to tighten or loosen by hand. I remove them for cleaning and storage.

So I designed a simple 55mm honey gate wrench that I 3D printed.

The files are on Thingiverse.

ashlight – air quality monitor gadget

We have had a PurpleAir PA-II on our back porch for years. It works fine. The problem is that checking it requires going online to look at a map to find ours.

PurpleAir air quality map of the Los Angeles metropolitan area showing US EPA PM2.5 AQI 10-minute readings, with most sensors displaying yellow circles (moderate air quality, AQI 51-100) and one red circle near downtown LA showing a hazardous reading of 123.


What I wanted was a small device that is green when the air is fine and turns other colors when it’s worse. Here in LA between smog, wildfires, structure fires, and fireworks, the air quality is all over the place.

No specific numbers needed, just a color that gives us a good sense of what’s in the air.

So I built one. I called it Ashlight.

The details

The device is about as simple as it gets, a 16-LED WS2812B ring driven by an ESP32-C3 SuperMini, running ESPHome. It polls the PurpleAir over the home network every few minutes, computes the AQI, and shows the result as a color.

Nothing leaves the house. No cloud service, no API key. The PurpleAir has a local JSON endpoint that’s simple to query.

If the internet goes down, the light keeps working, good for a device whose job is to tell you about a wildfire.

Building it seemed pretty straightforward: Get parts, write a little code, test it, make an enclosure.

The parts are crazy cheap. The ESP32 was ~$4 and the LED ring was ~$5. A capacitor and resistor for the minimum of circuit board protection.

Wiring diagram showing an ESP32-C3 SuperMini connected to a 16x WS2812B LED ring, with 5V and GND power lines, a 1000μF capacitor across the ring's power supply, and GPIO3 connected to the ring's DI (data input) through a 330Ω resistor placed at the ring end.


My soldering is an abomination, mainly because I didn’t want to build it on a breadboard. The resistor and capacitor are just kind of floating in the air.

A small microcontroller PCB held in helping-hand clips with red, green, and black wires soldered to it, positioned in front of an X-Tronic 3020-XTS soldering iron controller displaying 417°C.


I leaned on Claude for the coding. After flashing the ESP32 with ESPHome, Home Assistant was able to see it easily.

We made the color a gradient, shifting into the next color as the AQI increased instead of six distinct steps: green -> yellow -> orange -> red -> purple -> maroon. I set it to shift to lowest brightness at night to avoid lighting up the room.

I did learn that the PurpleAir sensor is also running a tiny processor and doesn’t always respond to the HTTP request for JSON. Evidently, when it’s uploading every two minutes to the PurpleAir map, it ignores everything else. The code is set to be OK with this and retry as needed.

After getting it up and running, I found that the ESP32-C3 SuperMini’s onboard wifi antenna is bad. Not marginally bad, bad bad.

The signal strength was so bad the device was unusable when in the dining room.

I was pretty frustrated, but found Peter Neufeld’s blog on adding a small antenna.

The fix is a sweet hack: solder a 31 mm piece of wire to the existing antenna endpoints. 31 mm is a quarter wavelength of the 2.4 GHz wifi signal.

I tinned a wire, bent it into shape, and soldered it onto the ESP32.

Amazingly, it worked with the Ashlight residing in the dining room.

A small microcontroller PCB held in helping-hand clips with red, green, and black wires soldered to it, with a makeshift wifi antenna soldered to it.


If I were doing this over, I’d get an ESP32 with the U.FL connector for an external antenna and a small flexible patch antenna. Lesson learned.

For the enclosure, I couldn’t find something online that fit the bill, so I built something in Tinkercad.

A Tinkercad 3D design workspace displaying several orange cylindrical containers, a pink small box, two red rectangular shapes, and an orange torus (donut-shaped) object arranged on a blue grid workplane.


I wanted to use a translucent PLA, but the closest I had on hand was some glow-in-the-dark PLA. A little more finicky to print with, but it ended up working out. It’s a super simple enclosure with a hole for the USB-C cable to bring in power. Here are the STLs I designed.

The lid is just a friction fit, but holds together nicely.

A glowing green 3D-printed cylindrical object with a hollow toroidal top containing LED lights, sitting on a striped fabric surface in a dimly lit room beside a smart speaker.


Ashlight is in the dining room, glowing a pale yellow-green. In the morning, Michele and I read the paper and drink coffee there, so it tells us what to expect at a glance.

Here’s a short video about the process.

ashlight – air quality monitor gadget

An ambient lamp that shows outdoor air quality as a color. It polls a PurpleAir PA-II on the local network, computes AQI, and renders the result on a 16-LED ring. Code is on GitHub at github.com/cruftbox/ashlight.

Code is on GitHub at github.com/cruftbox/ashlight.

The README has the full wiring, AQI math, and considerably more detail than anyone needs but that Claude feels is essential.

orbis – another DIY smart home controller

I saw another inexpensive ESP32 device on Aliexpress and decided to see if it would work well as a smart home controller like Tessera.

The ESP32 display has wifi and Bluetooth, is about 1 3/4 inches in diameter, and has a roughly 240×240 screen.

The code conversion was fairly simple, mainly focused on the display and putting in swipe functionality. Claude did the heavy lifting.


Didn’t turn out as useful as the square panel Tessera I built previously.

The round form factor made designing a stand for it more difficult. When I did get something to work, it just didn’t have a good tactile feel and felt like a chore to use. Also, getting a stand design that allowed me to plug in and route a USB-C cable for power was a bit of a headache.

I made a short video about the controller.

Made another smart home controller #esp32 #smarthome #diy

Enjoy the videos and music you love, upload original content, and share it all with friends, family, and the world on YouTube.


Not every project is an amazing success. Some are just trying something new.

All the code is here: https://github.com/cruftbox/orbis