A public feed with no export button and a rate limit. Walking it politely with rotating exits, collapsing 37 spellings of city names into one, and turning the result into map layers by city and by area plus category counts over time.
Recent Posts
Poll a source every 15 minutes, hash the path for a stable ID, keep the state in SQLite, archive what you find, say one thing in a chat channel. Six stages, no platform.
You have automated the act of looking, so you have automated the act of being seen. What a server actually learns from a monitor that runs for a year, and why the fix is usually to slow down rather than to hide better.
Six rules for putting a model anywhere near an investigation: assume it will be confidently wrong, keep every claim traceable to a fetched artifact, and treat a page you collected as something that might be talking to your model.
One stage out of 6, and a short list of jobs inside it. The test that sorts the narrowing work a model can take on from the verification and attribution work it can only draft — and why that draft is a lead, not a finding, until a person has checked it.
One small real problem, walked end to end: fetching, a stable ID, storage, notification, scheduling, and the failure mode that looks exactly like good news.
Not AI, not robots. Six stages that every collection system turns out to be a version of — and the 4 cases where the right answer is to do it by hand.
A Python CLI and Chrome extension that exports public Google Maps to KML, KMZ, and GeoJSON — preserving layers, placemarks, and marker icons.
A beginner-friendly guide to installing and using the PWTT plugin for QGIS — the same radar-based method behind Bellingcat's damage maps, now available for anyone to run at home.
How I added Docker-based deployment to Turnstone (adsb-history), making it easy to self-host a full ADS-B historical query system — with or without Firebase and with support for external Postgres databases.










