Dispatch Log
Every update, upgrade, and improvement — straight from the lookout tower. The BOOM? Operator keeps watch so you don’t have to wonder alone.
Locked In
If you’ve ever tapped the comment box on a boom page and watched the whole screen zoom in and break, that’s fixed. iOS has this “helpful” behavior where it auto-zooms on any input field with a font size under 16px. The comment textarea was at 14.4px. The viewport had no cap. So when you focused the field, the browser zoomed in and never came back. Now the viewport is locked at 1x, the comment field is at 16px, and the whole thing stays put. v2.1.2Viewport zoom lock75913af · Mar 7, 2026
maximum-scale=1.0, textarea font-size bump to 1rem
While we were in there, we added a portrait orientation hint to the manifest for Android devices that install the PWA. iOS does its own thing and ignores it, but on Android it’ll keep the app upright where it belongs. v2.1.2Portrait orientation (Android)75913af · Mar 7, 2026
manifest.json orientation: portrait
Also: pull-to-refresh now works on every page. It was already on the home page and the archive, but the boom detail pages — where you actually want to refresh while waiting for new comments — didn’t have it. Neither did About, Dispatches, or Local History. Now they all support it. Drag down from the top and it reloads. On boom pages, the map won’t trigger it either; Leaflet touches are excluded so you can pan without accidentally refreshing. v2.1.2Pull-to-refresh everywhereb67f033 0453b8e · Mar 7, 2026
pull-refresh.js on boom, about, dispatches, history; Leaflet touch guard
The Tower
The place where the Operator works got a name and a complete rebuild. Welcome to The Tower. v2.1The Tower dashboardc0d39e8 · Mar 5, 2026
Stats bar, filters, pagination, “The Tower” rename
Open it up and the first thing you see is the stat bar: how many booms are unresolved, how many came in today, how many total, when the last one hit, and how many BOOMers are listening right now on the live map. Below that, three filter tabs — All, Unresolved, Resolved — so you can focus on what needs attention.
But the real thing is the Activity feed. Every single event — new booms, comments, reactions, upvotes, confirmations, moderation actions — shows up as a compact row with a color-coded badge, the intensity, the city name, and a preview. Click any row and it opens up with everything: the full intensity label, direction, flash and rumble tags, notes, resolution status. All right there. No clicking through to another page. v2.1Expandable Activity feed76595af · Mar 5, 2026
Accordion rows, 3-JOIN enrichment, quick-action buttons
And each row has buttons that match the situation. See a comment that shouldn’t be there? Hide. A great theory from a BOOMer? Pin it. A new boom you already know the answer to? Type the explanation and hit Solve, right from the feed. One panel, every tool. v2.1Contextual quick actions76595af · Mar 5, 2026
View, Hide, Pin, Solve, Unhide, Unpin — per action type
Here’s the part that changes everything: the feed is live. Not “refresh to check for updates” live. Actually live. A BOOMer drops a reaction in Fairview Heights and it slides into the top of the feed within a second. A comment lands in Collinsville and it’s there, ready to read and moderate, before the commenter has even closed their phone. The Operator sees it all the moment it happens. v2.1Live SSE Activity feed484b79e · Mar 5, 2026
Admin SSE channel, client-side HTML builder, slide-in animation
Also in the mix: pin and unpin comments, delete your own Operator messages, edit a resolution after you’ve already posted it, unhide things you hid by mistake. The kind of stuff you don’t miss until you’re moderating at 11 PM and something goes sideways. v2.1Moderation toolkitcdda634–41311fb · Mar 5, 2026
9 commits: security, filters, pin/unpin, edit resolve, delete ops
One more thing. The BOOM? Operator position is getting a new set of hands. The original Operator built the tower, wired it up, and made sure everything worked. Now it’s time to hand over the watch. A new Operator is stepping up — younger, sharper, and ready to run this thing. The tower is his now.
Metro East, you’re in good hands.
The Operator Has a Voice
Until now, the Operator was a ghost. Could see everything, moderate everything, but couldn’t say a word to the community. That quarry blast at Falling Springs? The Operator knew what it was but had no way to tell anyone except through the SOLVED badge. Not anymore. v2.0Operator comments9e29683 · Mar 4, 2026
is_operator flag, THE OPERATOR badge, admin post form
Now the Operator can drop into any boom’s comment thread with a distinctive red badge: “THE OPERATOR.” No anonymous hex tag, no colored dot. Just the voice from the tower, cutting through the chatter with the answer. “That was a controlled demolition on Route 157.” “Transformer blew on Main Street — Ameren is on it.” The kind of answers that end the guessing.
Behind the scenes, the whole admin experience got rebuilt from scratch. The old setup involved pasting a secret key into the URL bar like it was 2004. Now there’s a proper login page, a session cookie that lasts a week, and a dashboard with a live activity feed — every report, comment, reaction, and confirmation scrolling by in real time, color-coded and timestamped. The Operator finally knows what’s happening without refreshing an inbox. v2.0Admin console + activity feed9e29683 · Mar 4, 2026
express-session auth, boom_activity table, scrollable feed
Best part: when the Operator is logged in and browsing the public site — checking a report, reading the archive — admin controls appear right there. A small gear icon on every card. Solve and Delete buttons on detail pages. A Hide button on any comment, including the Operator’s own mistakes. No more bouncing between the dashboard and the public pages to moderate. It all happens in place. v2.0Inline admin controls1310127 ff0b045 · Mar 4, 2026
Admin toolbar on detail, gear icon on cards, hide on all comments
Oh, and double-submit protection. If you accidentally hit the button twice (we’ve all been there), the second post gets silently swallowed within a one-minute window. No duplicate Operator messages. No duplicate BOOMer comments either. v2.0Duplicate comment guard4d4dbf8 · Mar 4, 2026
1-min dupe check on all comment inserts
Every Card, Reconsidered
The report cards — the things you see on the home page and the archive — were bugging us. Not broken, just... cluttered. Intensity number, area name, timestamp, direction, badges, engagement stats, all jammed into one row fighting for your eyes. If you have any kind of attention issue, good luck scanning a list of those. So we tore them apart and put them back together. v2.0Grid card layout1310127 · Mar 4, 2026
CSS Grid: intensity column + stacked content body
Now the intensity number sits in its own column on the left — big, bold, colored by severity. Your eye hits the number first, then slides right to the area name in bold (Collinsville, Belleville, Mascoutah), then down to the timestamp and direction. Notes sit on their own line with room to breathe. Engagement stats underneath. Everything has a place and nothing is competing.
The numbers themselves tell you more than they used to. A gray “2” barely registers. A yellow “5” gets your attention. An orange “7” says something serious happened. And a glowing red “10” — with a subtle red wash across the entire card — says get in here. Five tiers, no generic colored borders, just the number doing its job. v2.05-tier intensity system1310127 · Mar 4, 2026
Gray/yellow/orange/red/glow, background tint for 8+
Timestamps got the full treatment. Every card now reads like the clock on your Mac: “Wed Mar 4, 12:15 AM.” No more “20h ago” with no time of day. No more mystery compass letters either — “N” became “from N.” Small word, big difference. And “3 confirmed” turned into “3 heard it,” because that’s what actually happened. v2.0Timestamp + language72478a2 edb624e · Mar 4, 2026
Full date+time, “from N”, “heard it”
Under the hood, a contrast audit fixed several spots where text was technically visible but practically invisible on the dark background. The reaction buttons on boom detail pages each got their own accent color — amber, gold, red, blue, orange — so they actually pop instead of fading into the surface. Area names got smarter too: the city-matching radius went from 6 miles to 15, which means reports between cities actually get a label now instead of showing up blank. v2.0Contrast + reactions + areas1310127 · Mar 4, 2026
WCAG fixes, per-reaction colors, wider nearestArea threshold
Find Yourself on the Map
Open the full map now and you’ll see a pulsing blue dot. That’s you. Sounds obvious — every map app does this — but BOOM? didn’t have it until now, and it makes a huge difference when you’re trying to figure out whether that boom was two blocks away or two towns over. v1.8Blue “you are here” dot7a3bcf0 · Mar 4, 2026
Pulsing geolocation marker on live map
Each boom’s detail page also got its own mini-map. Tap “Show on map” and it unfolds right there, showing you exactly where the report came from. No need to jump to the full map and hunt for the right dot. v1.8Detail page map4b4900f · Mar 4, 2026
Expandable per-report map with unified marker colors
And for the folks whose browsers won’t share their location (or who’d rather not), the report form now shows a tappable map when geolocation fails. Place your pin manually, anywhere in the Metro East. No GPS required, no boom goes unreported. v1.8Location picker fallback3b675e0 · Mar 4, 2026
Tap-to-place map when geolocation is denied or unavailable
The whole interface also got a subtle warmth pass — cooler blues shifted warmer, form fields tightened up, the submit button got smoother. Nothing you’d point at and say “that changed,” but it all feels a little easier at midnight when something wakes you up and you reach for your phone. v1.8Warm palette + form polish36d6829 · Mar 4, 2026
Warmer color variables, refined inputs and buttons
Also in the mix: a one-tap “Install BOOM?” button on browsers that support it, and some behind-the-scenes SEO work so search engines can find us when someone Googles “what was that boom in Collinsville.” v1.8PWA install + SEOa634170 8202beb · Mar 4, 2026
beforeinstallprompt handler, canonical tags, JSON-LD schema
Your Map, Your Neighborhood
Small but important one. The mini-map on the home page used to always load centered on Collinsville — fine if you live there, less useful if you’re in Belleville or Granite City or out near O’Fallon. Now when you open BOOM?, the map quietly asks for your location and pans to your actual neighborhood. If you’ve already granted location access, it happens before you even notice. v1.7.2Mini-map geolocationc5615ae · Mar 2, 2026
Map centers on user GPS (zoom 12), falls back to Collinsville
If location isn’t available — denied, timed out, whatever — it falls back to the same Collinsville view as before. No error, no prompt. Just the map you’d expect to see.
BOOMer Chatter
Boom pages used to be dead ends — you’d tap “I heard it too,” maybe share it, and that was it. Not anymore. Every report now has a row of five emoji reactions: No Way, Funny, Scary, Curious, and Loud. Tap one and the count ticks up instantly. Below that: a comments section where fellow BOOMers can drop theories about what caused the boom. “Know what it was? Drop your theory, BOOMer...” Comments get thumbs-up votes so the best guesses rise to the top. All anonymous, all rate-limited, all profanity-filtered. Zero friction — just like reporting. v1.7.0Reactions + comments + upvotesd404f2b · Mar 1, 2026
5 emoji reactions, anonymous comments, thumbs-up voting
Every commenter gets a deterministic identity — a colored dot and a hex tag like “BOOMer #72E” — derived from their connection. Same person, same tag, same color. You can tell when the same BOOMer is dropping multiple theories. No accounts, no sign-ups. Just vibes and hash functions. v1.7.0BOOMer identity928b9d7 · Mar 1, 2026
Deterministic hex tag + HSL avatar from IP hash
And when the mystery is solved? The Operator can mark any boom with a green “SOLVED” badge and an explanation that pins above everything else. Quarry blast, transformer pop, fireworks — now the community knows. Solved booms show the badge on the home page and archive too. The Operator can also hide comments that don’t belong. v1.7.0Solved badge + moderationd404f2b · Mar 1, 2026
Admin resolve/unresolve, hide comments, public SOLVED banner
Credit where it’s due: this whole feature traces back to Karl Grable, who back at v1.4.0 nudged us toward “letting people interact with individual booms.” That was the seed. Reactions, comments, upvotes, BOOMer identity — it all grew from that one push. Thanks, Karl.
Post-deploy footnote: the BOOMer dot and new formatting looked great on desktop but refused to show up on mobile. Took three commits to sort it out. The service worker was caching a bare CSS path while the HTML requested a versioned one — different URLs, stale styles. Then Safari’s HTTP cache was holding onto the old service worker script itself for up to an hour, so the fix never arrived. We added no-cache headers for the SW file, versioned the registration URL, and bumped to 1.7.1. Sometimes shipping the feature is the easy part. v1.7.1Mobile cache fixa364229 d2254d1 b68e05d · Mar 1, 2026
3 commits to beat Safari’s cache: no-cache SW headers, versioned registration, CSS bust
Timestamped
When the map is showing booms from the last 24 hours, you need to know which ones just happened and which ones are from yesterday. Now every live boom pin wears a small time label underneath — “9:26 PM” for today’s reports, “Fri 10:04 PM” for anything older. Tap a pin and the popup card shows the full date too. No more guessing. v1.6.7Marker time labelsd5a4154 · Mar 1, 2026
Permanent tooltip + full date in popup cards
The Map Remembers
The BOOM? map just got a memory. Twenty verified historical events now live on the map as muted gray markers — earthquakes, demolitions, industrial explosions, mystery booms, even a UFO sighting. Tap any one and you get an Operator-narrated card with the full story, intensity rating, and source. The New Madrid earthquakes of 1811. The Checkerdome implosion. That mystery boom last December that nobody could explain. It’s all there. v1.6.0Historical boom markers0a8f16b · Feb 28, 2026
20 events, map layer, popup cards, /api/historical
There’s also a new Local History page where you can browse every event, filter by category, and jump straight to any marker on the map. Earthquakes, demolitions, industrial, natural, military, mystery — each gets its own icon and color. The whole thing spans 1811 to 2026. Two centuries of Metro East going “what was that?” v1.6.0History browse page0a8f16b · Feb 28, 2026
/history with category filters and map links
And because the legend bar was getting crowded, the old “History” pill on the map is now a proper toggle switch. Slide it off if you want a clean live-only view. The actual History page lives in the nav bar where it belongs. v1.6.1History nav + toggle switche6d8625 · Feb 28, 2026
Nav link for browsing, toggle for map layer
Pull to Refresh
If you’ve installed BOOM? to your home screen (and you should), you might have noticed there’s no browser refresh button. That’s the deal with PWAs — they look and feel like a real app, which means no address bar, no reload button, nothing. So we added pull-to-refresh. Drag down from the top of the home page or the archive, and you’ll see a little arrow. Pull it far enough, let go, and the page reloads with fresh data. Just like you’d expect. v1.5.3Pull-to-refresh921aa03 · Feb 28, 2026
Touch-to-reload on home and archive pages
Share-Worthy
When you share a boom to X or Facebook or a group chat, the preview card matters. It’s the first thing people see. So we built a dedicated card for individual booms — big starburst, no question mark (this one’s confirmed), and a call to action: “Did you hear it too?” Props to Karl, who saw the sharing feature and pushed us further — “lead them right back to that exact spot on the map.” (He does the same thing for fish fries over at fishfrystl.com.) This card does exactly that. v1.4.5Boom report OG image4ccd635 · Feb 28, 2026
Dedicated share card for /boom/:id pages
Also fixed the dead-end problem. Before, tapping into a boom from the archive or the map left you stranded — the only way back was the browser button or the footer links. Now the back link knows where you came from. Came from the archive? It says “All Reports.” The map? “Live Map.” Straight from home or a shared link? “BOOM?” No more guessing. v1.4.6Referrer-aware back link7f6144d · Feb 28, 2026
Back nav adapts to where you came from
Oh, and the Dispatch Log page got a proper lookout tower scene — that dark sky with the little glowing cabin you see at the top of this page. Dispatches from the tower. Literally. v1.4.5Tower hero scene876c3bd · Feb 28, 2026
SVG panorama: stars, tree line, lookout tower
See those little version tags sprinkled through these dispatches? Hover over one — or tap on mobile. You’ll get the commit hash, the date, and a one-liner about what changed. It’s the Operator’s way of showing receipts — every claim on this page links back to the actual code. The tooltips know where they are on screen, too — they’ll flip direction near edges so nothing gets cut off. v1.5.0Mobile tooltips + edge detection10d9716 · Feb 28, 2026
Tap-to-toggle on mobile, viewport-aware positioning
Finally, a little polish pass. Softened the timeline borders, dialed back the link colors so they don’t shout until you hover. Small touches that make the whole page easier on the eyes. Hat tip to Karl for pushing us on the details. v1.4.8Dispatch polishef742e8 · Feb 28, 2026
Softened borders, muted links, Karl props
The Map Comes Alive
The mini-map on the home page was just sitting there looking pretty. Now it does something. Tap the map and you’ll jump to the full live map. Tap a boom dot and you’ll land right on that boom’s detail page. Small change, big difference when you’re trying to figure out what just rattled your windows. v1.4.3Interactive mini-map1b8a078 · Feb 28, 2026
Tap map → full map, tap marker → boom detail
Also new: the Share button on boom pages now uses your phone’s native share sheet on mobile — way smoother for getting the word out. v1.4.2Native share on mobile77bc5d4 · Feb 28, 2026
Web Share API replaces Facebook fallback And we squashed a bug where confirmation counts weren’t showing up on the home page cards. They are now. Every “Me too!” counts. v1.4.1Confirmation count fix905e47b · Feb 28, 2026
me_too_count added to home page query
“Me Too!” — The BOOMers Have Spoken
Big one today, BOOMers. You can now tap “I heard it too!” on any boom’s detail page to back up your fellow reporter. If three folks near Beltline Road all heard something at 7:42 in the morning, now the whole community can see it. One report is a question mark. Multiple confirmations? That’s a verified boom. Karl nudged us toward letting people interact with individual booms — this is step one. v1.4.0“I heard it too” button62fa067 · Feb 27, 2026
IP-deduplicated confirmation with live count
We also cleaned up the intensity scale so it reads “5 out of 10” instead of the old shorthand — clearer for everyone. v1.3.0Intensity scale clarity8e5ce81 · Feb 27, 2026
Out-of-10 treatment on boom detail page The map now starts a bit wider and centers on your location when it can, so you’re looking at your neighborhood first. (And yes, Karl — we’re using the cached geolocation data. Learned that trick from a fellow builder who figured it out the hard way.) And every intensity level has its own label, all the way from “Barely there” to “Call the neighbors.” v1.2.0Intensity labels + geolocationa2d9dae · Feb 27, 2026
Flavor badges, wider default zoom, GPS centering
From MVP to Real Deal (In One Day)
The BOOM? Operator did not sleep much. In a single day, we went from a working prototype to something you’d actually want to share with your neighbors. Here’s everything that dropped: v1.0.0The big polish day382f0c7 · Feb 25, 2026
OG tags, admin, email, profanity filter, PWA, about page
Share links that show a proper preview when you paste them on Facebook or X. An admin dashboard for keeping things tidy behind the scenes. Email alerts so the Operator knows the moment a new boom lands. A profanity filter, because we keep it friendly at BOOM? HQ. And location fuzzing that rounds your GPS to about a 200-meter area — your neighbors can see your general neighborhood, not your front door.
Plus: install BOOM? straight to your home screen (it’s a PWA now), the About page with all the fine print, a prompt after you submit encouraging you to spread the word, and the warm dark look you’re seeing right now. Report cards are clickable. The footer has room to breathe. Every little thing got a little better.
It was a long day. Worth it.
First Light from the Tower
BOOM? is live. Built from scratch and deployed in a single day. v0.1.0Initial launch3ad7f6b · Feb 24, 2026
MVP scaffold: report form, live map, SSE, geolocation
Here’s what we’re starting with: a big red button that says “I JUST HEARD A BOOM.” Tap it, share your location, and your report hits a live map that every other BOOMer can see in real time. Add how loud it was (1 to 10), which direction it came from, whether you saw a flash or felt a rumble, and any notes you want. No account needed. No app store. Just open whattheboom.com and go.
The live map updates the instant a new boom is reported. Dark tiles, glowing markers, the whole thing. If someone across town hears what you heard, you’ll both know you’re not imagining it.
Metro East, the BOOM? Operator is on duty. Report everything.
Know someone who needs this?