MILEPOST
A Field Journal That Captures the Day You Wrote It Down
“How we spend our days is, of course, how we spend our lives.”
Annie Dillard, The Writing Life
I have always kept journals. Spiral notebooks, leather-bound things, voice notes, a stack of index cards from 2008 I keep meaning to scan. The problem with all of them is the same problem. You can remember what you felt. You almost never remember what was happening.
Open a journal from five years ago. You wrote that you were anxious. About what? You wrote that the world felt off. Off how? The cultural texture of that day is gone. What was on the radio, what was on Wikipedia’s front page, what the air pressure was doing, where the moon was in the sky. None of that survives. The weather report from the day you got the bad phone call is gone forever. The headline you scrolled past on the day you decided to quit your job is gone forever. The world was doing something. You did not write down what. The global context is lost to the ages.
So I built a thing. It is called MILEPOST.
A marker, not a metric
Out along the old C&O Canal Towpath hat runs near my place there are still a few of the original mile markers. Cast concrete posts about knee high, with a number on one face that indicates the miles left until you reach Georgetown in Washington, D.C. The C&O is a 184.5-mile long National Park now. The canal boats are gone mostly. The markers are still there because they were built to be there, forever, and they mostly are.
That is the spirit. A milepost does not measure your performance. It does not optimize anything. It marks a point in space and asserts: this was here, and so were you. Then it gets out of the way.
When you sit down to write a journal entry in MILEPOST, two things happen at the same time. You write whatever you would write in any other journal, in plain text, on a manila-paper background that is supposed to remind you of a clipboard or a field guide page. While you are writing, the instrument is quietly going out across the internet and pulling down everything it can find about the world you are sitting in.
Where you are. What time. Weather conditions, dewpoint, barometric pressure, whether the pressure is rising or falling and how fast. Air quality and pollen counts. The Kp index. Solar wind speed. The moon’s phase, age, and illumination. The Dow close. Bitcoin’s price. The crypto fear and greed index. What song is number one on the Apple Music chart right this minute. What article Wikipedia chose as the day’s featured. Today’s Quote of the Day on Wikiquote. The nearest active wildfire and how far away it is. The current US Drought Monitor classification for your county. The METAR from the closest airport. The most recent eBird sighting in your area. What is trending on Hacker News, on Reddit, on GitHub. NASA’s Astronomy Picture of the Day. The latest xkcd. The most recent arXiv paper in the field you care about. Where the International Space Station is overhead right this second.
There are over forty of these signals. Some are weather. Some are markets. Some are sky. Some are culture. Some are infrastructure. None of them, individually, matter very much. That is exactly the point. What you are building, over a year of entries, is texture. The dataset is not the goal. The dataset is the answer to the question what was the world doing while I was thinking this?
What is built
MILEPOST is four single-file HTML applications. You open them in a web browser. They do everything in the browser. There is no backend, no account, no login. Nothing you type goes anywhere except files you save to your own machine.
Field Instrument 003. The capture page. Open it, write your entry, click capture. The instrument fetches everything in parallel, lets you watch the network conversation tick by in a log down the right side of the screen, and gives you a JSON file plus a PDF you can save. The PDF looks like a calibration certificate from a Cold War instrument lab, because that is what felt right.
MILEPOST Reader. Drag a folder of your saved JSONs onto it. It renders any entry as a readable page, with all of the data flowing through clean typography. You can leaf backwards through your archive the way you would leaf backwards through a notebook.
MILEPOST Analyzer. Same drop zone, different question. Once you have a few dozen entries built up, drop the whole folder onto the Analyzer and it tells you what is correlated with what. Your mood tends to be higher when the barometric pressure is rising. Your focus collapses on overcast days. You consistently feel less energetic on the days the market drops more than two percent. The Analyzer is honest about sample size. With ten entries it warns you that almost everything you see is noise. With a hundred entries it shows you what is actually there.
MILEPOST Status. A diagnostic page that pings every data source and tells you which are reachable from where you are sitting. Some sources require a CORS proxy because their servers refuse cross-origin browser requests, so the Status page also tells you whether your proxy is working and which signals are flowing through it.
How it relates to the principles
This project is what every single one of those Design Principles I wrote a year ago looks like in practice. I did not set out to demonstrate any of them. I set out to solve a problem I actually have, with the materials in front of me. Then I noticed, looking at what I had built, that every choice was a principle.
#14, reuse what you’ve got. Every data source MILEPOST queries is a free public API that someone else already built and runs. NOAA’s Space Weather Prediction Center. The US Geological Survey. Open-Meteo. Wikipedia. Wikiquote. The Federal Reserve Economic Data service. The Apple Music marketing RSS feed. NASA APOD. arXiv. I wrote no scrapers. I run no server. I am piggybacking on the open data infrastructure of the world. My junk drawer is the entire public internet.
#20, design for future you. This is the whole project. You will not remember what the world was doing. The world will not remember either. Write it down. Save the JSON. Future You will be grateful for the texture.
#21, design for the next pair of hands. The whole thing is open source, GPL-3.0, on GitHub. One HTML file per surface. No build step. No npm install. No framework. If you can open a text editor and read JavaScript, you can fix any bug, add any data source, change any color. The source code is the manual.
#24, build like you might need to escape with it. Single file. Save the HTML to a thumb drive. It works without internet for everything the browser can do locally, things like sun position, moon phase, planetary positions, anything computed in JavaScript with no network call. When the internet comes back, the rest fills in. The whole stack fits on a floppy disk if floppy disks still existed.
#25, optimize for repair, not perfection. When a data source breaks, and they do, you fix that one fetcher in that one file. There is no dependency tree. There is no node_modules. You ship the patch by copying one HTML file to your web server. The thing that lets MILEPOST exist at all is that nobody has to maintain it. Including me, most of the time.
#28, if it’s worth building, it’s worth sharing. Hence this post, hence the GitHub repo, hence the public URL. If you would find this useful, use it.
What it is not
MILEPOST is not a productivity tool. It is not a habit tracker. It is not a quantified-self device that wants to optimize your sleep. It will not nudge you. It does not have streaks. It does not gamify anything. There are no notifications. There is no leaderboard.
It is a journal. The data is wallpaper. The point of the wallpaper is to let you remember what room you were standing in.
I have been using it for a few weeks now and the strangest thing happens. I find that writing in it makes me more present, not less. The instrument is doing the work of looking around and noting what the world is doing. That frees me up to look at myself, which is what a journal is for.
How to use it
Go to mbparks.com/milepost. Bookmark it on your phone. Open it when you want to write something down. The first time it runs it will ask for location permission. Grant it or not, your call. Without it the instrument falls back to IP geolocation, which is less accurate but works fine.
Write. Click capture. Save the files somewhere you will not lose them. Build up a few weeks of entries. Then drop the folder into the Analyzer and see what you find.
You will need a CORS proxy for some of the data sources, because the modern web blocks scripts from talking to most servers unless those servers explicitly invite cross-origin requests, which most do not. The Status page explains all of this. You can use a public proxy, or run your own using the Cloudflare Worker script that ships with the repo. The whole thing costs zero dollars to run for personal use.
The source is on my GitHub under GPL-3.0. Pull requests welcome. Bug reports welcome. Forks especially welcome. If you build something with it, or build something better than it, tell me. I want to know what your version looks like.
MILEPOST is for everyone.






