Featured Community Plugin - Ham Radio Solar Weather

Featured Community Plugin - Ham Radio Solar Weather

This post is part of a series, featuring the incredible work of plugin authors who grow the TRMNL plugin ecosystem with every contribution. The TRMNL team has individually selected these plugins and authors to be featured.

Ham Radio Solar Weather

Community member Leo Herzog (Discord: leoherzog) created the Ham Radio Solar Weather plugin; here are their words on how it was created.

Why did you want this plugin to exist?

Ham radio (amateur radio) is a hobby where licensed operators talk to each other over the airwaves — sometimes across town, sometimes across the planet — without any internet or cell network involved. Because the Earth is curved, to make the long-distance part work, radio signals must be bounced off the ionosphere and come back down. The ionosphere's "bounciness" changes constantly based on what the sun is doing: solar flares, sunspots, and streams of charged particles can make worldwide contacts easy one day and impossible the next. Hams check "space weather" the way surfers check the surf report. Hams loooooove themselves an old looking, information dense, hard-to-parse web design. I saw TRMNL as a nice opportunity to make the current solar weather conditions pretty and parse-able.

Why were you the person to make it?

I'm a licensed ham (K9ZOG). I don't do a lot of "contesting" (long-range radio contact)... I mostly use my local radio net for severe weather spotting, but it's a hobby I keep an eye on. I'm also a web developer and have already built several TRMNL plugins, including one for National Weather Service severe weather alerts, so I had the muscle memory for how the platform fetches data and renders it. Space weather turned out to be a natural sequel to regular weather: same idea, different layer of the atmosphere. There's a wonderful free current conditions data feed maintained by a fellow ham (N0NBH) that condenses all the solar readings and band-by-band forecasts into a simple XML format, so it was a natural fit.

Were you inspired by any other recipes or plugin creators?

I've kept up with TRMNL since the Kickstarter. I'm an eInk enthusiast, and TRMNL is doing everything right; BYOD, BYOS, open-sourcing everything, their approach to server-side rendering and client polling... I had two other homegrown dashboard projects that used similar approaches, but way clunkier implementations, that I've now discontinued in favor of TRMNL. I'm inspired by that. As far as the design of this plugin specifically, I was inspired by other information-dense-yet-readable-and-pretty dashboards such as Extended Weather Dashboard by Bastronautik.

How did you balance look vs functionality?

I prioritized look for this one. The raw data is a wall of cryptic numbers—solar flux, A-index, K-index, proton flux—and the whole point was to make conditions legible in a half-second glance from across the room. The band conditions table won the prime real estate, because "is 20m open right now?" is the question a ham actually asks; The raw solar numbers became supporting detail for people who want to know why.

What was your process for creating the plugin?

Right before I started making this plugin, TRMNL released their Agent Skill for AI Agents. I threw away my homegrown skill and installed theirs. I described the layout I was imagining, curl'd a local copy of the data XML, described the look layout I wanted and file structure I preferred (minimal template files in the four layouts + everything possible contained in shared.liquid), and within a few back-and-forth prompts in Claude Code, the plugin was done.

Did you learn anything that you want to apply to future or past recipes?

When laying out a TRMNL plugin, remember the root .layout clips instead of scrolling — and crops the top when content overflows — so design to fit the fixed screen rather than forcing height with h--full. Use the real stretch class (not a Tailwind-style min-h--0) when you need an element to grow and shrink into leftover space. Keep grid grid--cols-N as a direct child of .layout; nesting it inside a col--span cell collapses it, so build sub-columns from side-by-side flex flex--col stacks instead — which also align cleaner, since flex--row items with grow center their contents and visually zig-zag.

Make sure your col--span values add up to 12, and know that flex--center-x/flex--center-y are direction-aware (they resolve to justify vs align based on a sibling flex--row/flex--col), so pair them accordingly or centering lands on the wrong axis. Above all, verify that all class names against the actual framework CSS rather than assuming a familiar Tailwind name exists — the design guide shows intent, but the compiled CSS is ground truth.

Is there a tip you would give to a new plugin developer?

Think about things that you glance at often on another device: Smartphone homescreen widget, persistent notification, pinned desktop browser tab, etc. Then, consider if that app/site/data has an API. If you create something you're interested in and fills an actual need, it'll be more fun to make and more useful when complete!

What part of the TRMNL Framework, Liquid filters, or other documentation was most helpful?

The new TRMNL agent skill and published Framework v3.1.1 CSS files, for sure.

What is your favorite plugin that someone else created and why?

I have had a Weatherflow Tempest weather station for a few years, and I love that TRMNL selected them as their main weather provider. I was going to have to build something custom if they hadn't!

How could TRMNL plugin sharing be improved?

The recipe system is already one of TRMNL's best ideas, but right now the catalog is the only path to distribution, which makes the TRMNL team the bottleneck for every niche idea that wants an audience. I'd love to see a model closer to what Home Assistant has with HACS: let a recipe live in any public git repo with a small manifest, and let users install it by pasting a URL. The official catalog stays as the curated, quality-reviewed storefront, but the long tail of weird, wonderful, six-user plugins gets a frictionless path that doesn't require anyone's time or approval.

Mario Lurig

Developer Relations Manager