The Feature That Found a Bug

The Feature That Found a Bug
Part of Building GribGrab — a series on what I learn building a weather app with Claude Code.
GribGrab had four ways to pick a place: type a city, paste coordinates, tap GPS, or reuse a saved one. All of them are text. None let you just point.
So I added a map. Drag it around, and the forecast loads for whatever sits under the crosshair. That’s the whole feature.
The interesting part came after.
I could’ve used a library
There’s a library for this — Leaflet. Drop it in, done in an hour. I didn’t. I wrote the map myself, about two hundred lines.
Why? GribGrab runs on one rule: no code from anyone else’s server. It keeps the app light and private, and I’m the only one who can break it. The cost is real — I now own every pinch-zoom quirk Leaflet would have handled. But it’s a cost I can see.
That’s the trade with a library. It doesn’t remove the work. It hides it, and hands you the bill later.
Then I tapped the Arctic
The moment the map worked, I could tap anywhere. So I tapped the North Pole. The chart went completely gray.
The app shades the night-time hours grey. Up there it had shaded the whole week.
The reason is nice. At the poles in summer the sun never sets. My weather source says so honestly: sunrise at midnight, sunset at midnight the next day — 24 hours apart. My old code read both as “00:00,” called the whole day night, and greyed everything out.
That bug had been live for months. Nobody hit it, because reaching the Arctic meant typing its coordinates, and who does that? The bug wasn’t new. The map just built a one-tap road to it.
A new feature is a flashlight
This is the part I keep relearning. You think a new feature adds a room. It doesn’t — it adds a door, onto rooms that were always there in the dark. This one literally: the room I walked into was a chart greyed out into permanent night.
The map didn’t create the polar bug. It created the first easy path to it. Same as a search box surfaces the query nobody typed.
So shipping something new is also my cheapest bug finder. Every door shows you a room you never checked.
The quiet cost
The map isn’t free — not in privacy. A map is a grid of little numbered image tiles, and to draw your view the browser has to ask OpenStreetMap’s servers for the exact tiles you’re looking at. Each of those requests carries your IP address and which squares of the world you asked for. That’s how they’d know — not from anything I send them, but from your own browser fetching the picture. Pan to your house and you’ve told them roughly where you are.
Fair trade for a map you can point at. But it’s a trade, so it goes in the privacy policy in plain words. A feature that phones a third party always has a bill. The least I can do is print it.
Takeaways
- Ship it, then poke the corners. Tap the ocean, the poles, the empty box — the edges you’d never reach the slow way.
- A library moves the work, it doesn’t delete it. Fine sometimes. Just know you’re choosing where the bill lands.
- New paths surface old bugs. Make something easy that was only possible, and expect it to walk into code nobody had run.
- Say the privacy cost out loud. If a feature phones a third party, tell users. “Free” usually means someone else pays in data.
New doors, old rooms. Go open one. → gribgrab.com
Thanks for reading! If you'd like to share your thoughts send me an email.