The Weather Gnome Has a Coloring Book Now (and an Album)

I have written about the Weather Gnome before: the little watercolor mascot who sits on your Home Screen and tells you if you need a coat. What I did not expect, when I started, is that he would end up living in three different places at once.

But over the last few weeks he picked up two more jobs.

The Coloring Book

The first is a coloring book. Forty plates of the same gnome, drawn in the same classic storybook style as the app’s characters in the first place, now sitting on paper instead of a screen. It shipped on Amazon this month.

Dawn to night, four of the forty plates inside.

The Weather Gnome Coloring Book cover
Forty cozy cottagecore scenes to color.

The Record

The second is a record. Under the name “The Weather Gnome,” the single “Rain on the Window” went live on Spotify last week, and a full fourteen-track album follows on September 4th.

None of this was the plan when I shipped the app. It is what happens when a character is good enough to keep finding new rooms to stand in. If the app tells you rain is coming, that is your cue: play the album while you color a page.

He is still on your phone. That part has not changed: five stars, four reviews, still free, still no ads, still no accounts. If you have not met him yet, here is where to start:

Weather Gnome app iconDownload on the App Store

Weather Gnome: Cozy Forecast, free on the App Store.


As an Amazon Associate I earn from qualifying purchases.

QSO Globe: Vibe-Coding, Round Four

The Idea

Amateur radio is a hobby about distance. You sit in a room with a wire in the air, you say your callsign into the noise, and sometimes a stranger seven thousand kilometers away says it back. That is the entire magic trick, and it has not gotten old in a hundred years.

The strange part is that logging that moment, the thing every operator does after every contact, is almost universally a spreadsheet. A row. Callsign, frequency, time, signal report. The most romantic hobby in the world, recorded like an invoice.

So that is the app: QSO Globe. You log a contact in one line, and a golden arc launches from your station and lands on theirs, across a 3D globe that shows the real day and night, with the greyline creeping across the planet exactly where it actually is right now.

QSO Globe main screen: contact arcs flying across a 3D globe of North America with band chips and a one-line log bar
Log a contact and watch the arc fly. The terminator is real and moving.

The Greyline Is Not Decoration

Here is the part that made me want to build it. The greyline, that band of twilight between day and night, is not just pretty. It is a genuine propagation phenomenon. Along that line, the ionosphere’s absorbing layer is fading out while the reflecting layer is still up, and signals can travel absurd distances for a little while. Old-timers have chased it forever: get on twenty meters at your sunrise, point at someone else’s sunset, and work the world on the power of a light bulb.

Almost no logger shows you this. You are supposed to keep it in your head, or check a separate propagation site, and then go back to your spreadsheet.

If the globe already knows where the sun is, and it has to in order to draw the planet honestly, then it can show you the greyline for free. The feature that would be a whole product somewhere else is a side effect of drawing the earth correctly.

Scratching My Own Itch

If you have read the earlier posts in this series, you know the setup: I am not a programmer. I build these by describing what I want to Anthropic’s Claude Code and iterating stubbornly until the thing exists.

This one exists for a simple reason: it is the logger I wished I owned. I wanted to see my operating from a global perspective — not a spreadsheet row that says “Japan,” but an arc leaving my backyard and landing on the other side of the planet, on a globe that shows day and night where they actually are right now. Radio is a hobby about distance, and I wanted the log to feel like the distance.

And I wanted it to work off the grid. Parks on the Air activations happen precisely where there is no signal — so the app carries an offline country file, needs no account and no server, and keeps the entire log on the phone. A logger that only works with bars of LTE fails at the exact moment the hobby gets good.

So the feature list was never a roadmap. It was a wish list, written by the operator who has to live with it.

The Real Work Was the Conventions

The recurring lesson of this series is that the code is the fast part and something else is the real work. For the weather app it was personality. For the math app it was curriculum. For the bedtime app it was sound.

For a ham radio logger, it is a hundred years of conventions that the computer does not know and cannot guess.

Signal reports are two or three digits and the digits mean specific things. Times are UTC, always, no exceptions, because the hobby is global and local time is a parochial fiction. Duplicate contacts are not simply repeats. For Parks on the Air, a dupe means the same callsign on the same band and mode within the same UTC day, and that definition is load-bearing for whether an activation counts. ADIF, the log interchange format, is older than most of the people using it and has to round-trip exactly or you cannot upload to Logbook of the World.

None of that is hard to implement once you know it. All of it is invisible if you do not, and every single piece of it is the difference between a logger a ham will actually use and a pretty toy that gets deleted in ninety seconds. You cannot vibe-code your way to domain knowledge. You have to either have it or go get it.

QSO Globe session log listing five contacts with bands, modes, distances and times (callsigns redacted)
One line in, one contact logged. W1AW 14.243 57 55 is enough.

What It Actually Does

Log a contact by typing it the way you would say it: free-order tokens, callsign first, the rest optional. Tap a band chip and the frequency prefills. Signal reports default to the ones you were going to type anyway.

For Parks on the Air, activation mode makes your park the origin of every arc, live spots show up as pins you can tap to prefill the log bar, and park-to-park contacts resolve to the actual park. ADIF imports and exports round-trip the POTA fields properly. There is an offline country file so the app still knows where a prefix lives when you are somewhere with no signal, which is precisely where activations happen.

At the end of a session you can replay it, arc by arc, and generate a share card that only claims what you actually did. It says four countries on two continents when you worked four countries on two continents, and not otherwise.

No account. No tracking. Free.

QSO Globe session share card: 5 QSOs, 10,798 km longest contact, 5 DXCC. Worked the world
The share card tells the truth, or it says nothing.

The Honest Gaps

Version 1.0 is iPhone-only. The globe needs verifying on real iPad hardware before I claim it works there.

Logbook of the World is export-only. You export and upload with TQSL like always; I have not built a signing integration. QRZ and eQSL push work, but with your own credentials, because I am not going to be a middleman for anybody’s logbook.

And it has not yet been beaten up by strangers. It has been tested by exactly one operator, me, which is one more than zero and far fewer than it needs.

The Wait

Then Apple reviewed it, and for a good while nothing at all seemed to be happening — which is exactly what is happening inside a review queue, because queues are unordered.

The lesson from earlier rounds still holds. App Review is a conversation, not a verdict. But this round taught a duller companion lesson. Sometimes it is not a conversation. Sometimes it is just a wait, and the only correct move is to go build the next thing and let the clock run.

It is approved now. It is on the App Store, it is free, and it is on my phone in the shack where it belongs. For a logger, that is the only review that was ever going to matter.

If you are a ham and you take it out on an activation, I would genuinely value the punch list. That is not a marketing line: v1.0 is one operator’s opinion about what a logger should be, and the only way that becomes right is other operators telling me where it is wrong.

73 de KE2BQI.

Download QSO Globe free on the App Store

The Rogue Echo Bike’s Screen Is the Worst Part: So I Built the App It Should Have Had

Bottom line up front: ZoneCycle reads watts, cadence, calories, and heart rate off your Rogue Echo Bike over Bluetooth and puts them on your phone in big, easy-to-read type, with color-coded heart-rate zones and a voice coach that calls your intervals for you. It is free, with no ads and no subscription.

Download ZoneCycle on the App Store
ZoneCycle dashboard showing 377 watts with a red heart-rate zone
Mid-interval: watts, cadence, and heart rate in big type, with the zone flashing red when you are working hard.
ZoneCycle dashboard showing 118 watts with a green heart-rate zone
Recovery: the same readout, now green, so you can see when it is time to go again.

Fourth in a series on building small iOS apps by describing them to Claude Code, one stubborn idea at a time. Previously: Weather Gnome, Times Table 400, and Softly.

My doctor is the reason there is a bike in my basement

At a checkup last winter, my doctor made the case for high-intensity interval training (short, hard bursts with recovery in between) as one of the most time-efficient things I could do for my heart. So I did what any reasonable person does: I went down an internet rabbit hole and came out having bought a Rogue Echo Bike and a Rogue Echo Rower, and set them up in the basement for a winter of HIIT.

The bike is a beast. Fan-driven, nearly indestructible, the kind of machine you could hand down to your grandkids. There is exactly one bad thing about it.

The Rogue Echo Bike’s screen is the worst part

The stock console is a small, dim, no-backlight LCD. In a bright gym it is merely dated; in a basement, at 6am, mid-interval, with sweat in your eyes, it is nearly useless. You are supposed to be pushing to a target, and instead you are squinting at a gray readout hunting for your heart rate. Search “rogue echo bike display” or “rogue echo bike screen hard to read” and you will find the same complaint on repeat: incredible bike, console from 2005.

Does the Rogue Echo Bike have Bluetooth?

This is the question that decides everything. The newer Echo Bikes (roughly the current console, ~2023 onward) broadcast your ride data over Bluetooth and ANT+ using the standard FTMS (Fitness Machine Service) protocol. Older ones (2017–2023) do not. Rogue sells the M2 monitor upgrade to add it. If your bike broadcasts, any app that speaks FTMS can read your live watts, cadence, calories and heart rate straight off the machine. Which means the display problem is really a software problem. And software problems I can do something about.

So I built the app I wanted

I am not a programmer. I build these apps by describing what I want to Anthropic’s Claude Code and iterating stubbornly until they exist. This time the itch was personal and specific: I wanted the basement bike to have the screen it deserved.

So I built ZoneCycle. It reads watts, cadence, calories and heart rate off the bike over Bluetooth and puts them on your phone in big, readable type, the numbers you are actually chasing, legible from the saddle. Pair a Bluetooth chest strap and it does the thing the stock console never could: it colors the whole screen by heart-rate zone. Green means recover. Orange means work. You know where you are with a glance, not a stare.

Why heart rate, not watts (and why you don’t need the $200 M2)

Here is a thing the fitness-tech world does not love to say out loud: on a fan bike, the watts are a guess. There is one sensor reading the fan’s RPM, and power and calories are estimated from a curve. It is a perfectly fine number to glance at, but it is not the precise, trainable power a road cyclist gets from a crank meter. Chasing “exact watts” on an air bike is chasing fake precision. Your heart rate, though, is real, and it is the number that actually tells you how hard you are working. So ZoneCycle leads with the honest metric: your heart, in color.

There is a second thing worth knowing. Rogue sells a $200 monitor upgrade (the M2), and one of the things it unlocks is on-bike interval coaching. But if you have the current console, your bike is already broadcasting everything over Bluetooth. You do not need a $200 add-on to get coached intervals; you need an app that reads what your bike is already saying. That is the whole idea: ZoneCycle is the free coaching layer for the console you already own.

Training by zones, not by guessing

Here is where ZoneCycle stops being “a nicer screen” and starts being a coach. It sorts your effort into five heart-rate zones based on a percentage of your maximum heart rate, and it estimates that max with the Tanaka formula (208 − 0.7 × your age), which the research finds more accurate for adults than the old 220-minus-age rule. Tell it your fitness level and it shifts the zone bands to match, so “orange” means the right thing for you, not for a 25-year-old athlete.

The workouts are deliberately simple interval structures: a two-minute warm-up, then repeated pushes and recoveries (10 seconds on / 40 off, or 20 on / 60 off) for 5, 10, or 15 minutes, then a cool-down. A voice coach calls the pushes and recoveries on the clock, so you never have to look down. It scores your time in the hard zones, and at cool-down it measures how fast your heart rate drops in the first minute, a genuine marker of fitness that improves as you get fitter. None of this is hand-waving: the app cites its sources in-app (Gibala’s low-volume HIIT research, the Tanaka max-HR paper, Cole’s work on heart-rate recovery, the AHA target-zone chart).

(A few things I am still building: a zone compass, smarter voice feedback when you drift out of your target band, and Apple Health export. Those are in the next update, not the version on the store today.)

What the build actually taught me

The recurring lesson of this series is that the code is the fast part, and every app has some other part that turns out to be the real work. For the weather app it was personality; for the math app, the curriculum. For a bike app, it was the plumbing: live Bluetooth sensor data is messy, drops out, and disagrees with itself, and making a number on screen feel instant and trustworthy took far more care than drawing it did. The second surprise was the zone math: getting “what counts as orange for this person” right is a real question with real research behind it, and honoring that is the difference between a toy and a tool. After several rounds of design and debugging, everything started to come together, and the app finally felt just right.

The surprising part: it is actually fun

I expected to build a better gauge. I did not expect the workout to change. Training to a color instead of a number is weirdly freeing: you stop doing math mid-sprint and just chase the orange, and the intervals fly by. The app removes friction to use, provides an easy heads-up display of your data, and seamlessly integrates a motivational coach right where I need it most. I enjoy switching between the coaches from time to time; the coaching personas Sensei and Vicky are my favorites.

This evolution has been the inspiration to adapt the platform beyond the bike: ZoneRow and ZoneRun should be hitting the App Store soon.

Does it work with an Assault Bike or other air bikes?

Yes. ZoneCycle speaks the Bluetooth FTMS standard (Fitness Machine Service), not anything Rogue-specific, so it is not really a Rogue Echo Bike app at all — it is an air bike app that happens to have been built on one. Any bike broadcasting FTMS will pair: the Rogue Echo, the Assault Bike Pro and Elite, and most Bluetooth smart trainers. The Echo is simply the one in my basement, which is why it is the one in every screenshot.

If your air bike has no Bluetooth at all — and plenty of the older ones do not — standalone mode still runs the intervals, the zone display and the voice coaching from a heart-rate strap by itself. The bike connection adds watts and cadence; it is not what the app depends on.

Try it

ZoneCycle is free on the App Store, no ads and no subscription. If your Echo Bike (or any FTMS bike) deserves a better screen than the one it shipped with, that is exactly what it is for: riverroadlabs.app/go/6790217662.

If you want more of these, my other apps are on the App Store too: Weather Gnome, Times Table 400, and Softly.

Softly: Vibe-Coding, Round Three

Follow-up to Times Table 400: Vibe-Coding, Round Two

Download Softly on the App Store

The Idea

Every sleep app I have ever tried wants to fix me with science. Breathing exercises, brainwave frequencies, a subscription. But the most reliable sleep technology ever invented is a lot older than any of that: someone you trust, reading you a story you already know, slowly, while the rain comes down outside.

So that is the concept of my next app: Softly — classic bedtime stories, read aloud in a calm gentle voice, over soft rain or a crackling fireplace, with a sleep timer that fades everything out after you have drifted off. The whole thing is designed to be like your sweet grandmother or mom reading to you by candlelight (with a classic British accent):

Softly welcome screen
Classic stories, cozy ambience, drift off. That is the whole app.

Classic Bedtime Stories

Softly ships with eight books: The Wind in the Willows (1908, all twelve chapters, six and a half hours of narration), five Beatrix Potter tales, The Velveteen Rabbit, and a curated handful of drowsy Robert Louis Stevenson poems. All beautifully written, all timeless, all perfect for bedtime.

The Code Was Easy. Vibe Coding The Sound Wasn’t.

If you have read the earlier posts in this series, you know the setup: I am not a programmer, and I build these apps by describing what I want to Anthropic’s Claude Code (the Fable 5 model) and iterating stubbornly until it exists. And you know the recurring lesson: the code is the fast part, and each app has some other part that turns out to be the real work. For the weather app it was the aesthetic personality. For the math app it was the development of the curriculum. For a bedtime app, it is hitting the mark on the sound.

The narration is AI-generated, a soft British voice I auditioned against several candidates and then slowed to a dreamy 85% pace. Auditioning voices for a bedtime story is exactly as pleasant as it sounds, but it is also genuinely a judgment call: one candidate read beautifully but unevenly, and uneven is fatal at 11 PM. The computer cannot tell you which voice would put a child at ease. You have to listen.

The ambient sound was harder. My first rain loop had a faint electrical hum that surfaced every twenty seconds or so, it turned out to be the seam where the loop restarted, and fixing it properly meant learning more about audio filtering and seamless loops than I ever expected to know. And then there were the crickets. I wanted a summer-night crickets option, and I generated attempt after attempt, and every single one sounded like tinny white noise instead of a meadow. After three rounds I cut the feature entirely. Rain and fireplace made the bar; the crickets did not. Shipping is choosing.

Softly reader with the listening bar
The listening bar: play, rain, fire, a pace turtle, and a sleep timer.

Apple Said No

Weather Gnome sailed through review. Times Table 400 got questioned at the border. Softly got flat-out rejected.

The rejection letter cited “Guideline 4.2.2 — Minimum Functionality” and said the app “only includes links, images, or content aggregated from the Internet” and “does not sufficiently differ from a web browsing experience.”

I contemplated this initial rejection several times. Softly has no links. It has no web view. It makes no network requests at all, every word of every book and every minute of audio is bundled into the app. You can use the whole thing in airplane mode. Whatever the reviewer was describing, it was not the app I shipped. After two rounds of App Review being demanding but basically reasonable, this was my first rejection that was simply wrong.

The Counterpunch

Here is where the earlier lesson — App Review is a conversation, not a verdict — paid off, because the temptation is to either despair or fire off an angry reply. We did neither. We did three things, all in one evening.

First, a calm, factual response in the Resolution Center: no links, no web content, no network use, eight narrated books, native audio engine. No indignation, just receipts.

Second — and this is the part I am proud of — instead of only arguing that the app was native enough, we made it more obviously native. The rejection became the excuse to build the feature a bedtime app should have had anyway: full lock-screen playback controls. Play, pause, skip, scrub, the chapter and book title right there on the lock screen with a little moon artwork. Now the phone itself testifies that this is a real audio app.

Third, the rejection mentioned the review was done on an iPad, and the iPad screenshots were the weakest part of the listing. New ones, same evening.

Resubmitted that night.

Softly library on iPad
The shelf, on the very device the reviewer used.

Approved!

One day later: approved, and Softly is live on the App Store. Free, no ads, no accounts, and — as the review saga established beyond all doubt — it works entirely offline!

Some Thoughts

  • A rejection is not always right. Reviewers are humans moving fast. If the facts are on your side, state them plainly and politely, with evidence. Do not despair and do not vent — neither one ships apps.
  • Turn the rejection into a feature. The best answer to “this does not feel like a real app” was to make it undeniable. The lock-screen controls were on the wish list anyway; Apple just moved them up the schedule.
  • The public domain is a gift. Some of the best bedtime literature in the English language is sitting there, free, waiting to be treated well. (See you in January, Pooh!)
  • Every app has its hard part, and it is never the code. Personality, curriculum, and now sound. The pattern is holding: the model writes the code, and the judgment is still your job.
  • Round three really is easier. The certificates, the screenshots, the submission ritual — what used to take days of head-scratching is muscle memory and a folder of scripts now.

Softly is on the App Store now! Pick a story, light the fireplace, set the sleep timer, and let Mole and Ratty row you to sleep.

Download Softly on the App Store