A feed to think with

The first night I got access to move.nl I spent four hours reading apartment listings and went to bed at one in the morning.

The feed was “filtered” — budget, a couple of postcodes — but filtered the way a firehose is filtered when you put your thumb over the end. Every listing still had to be opened, read, judged. Energy label here, VvE contribution there, is it on a busy road, what’s the onderhoud, does it actually have a bathtub or just a photo of a shower. The broad filter handed me volume. What I needed was signal.

I don’t do this for a living, exactly. But somewhere along the way it became my default: when I have a question, I build a small tool to answer it — moldable development, if you want a name for it. So building one here was the obvious move. The tool wasn’t the start, though. The start was a plan.

A while back I read Good Planning, Bad Planning and turned its four-layer model into a swamp extension — good-planning — a self-contained state machine for a strategic choice: the funded commitments, the assumptions under them, the tripwires that tell you an assumption is breaking. I’d been reaching for that shape for a while. I track progress on a kanban board like everyone else, and kanban boards are too manual and hold none of the context that makes a card mean anything. A state machine holds the context. It knows what it’s for.

I used good-planning first to understand my own cashflow and my limits — what I could actually commit to, where the edges were. That mattered more than any listing. Once I knew the shape of the decision, the apartments were just instances to test against it.

Same instinct ArcKit gives me when I need to think through something complicated — it asks the questions I’d forget to ask. Same instinct behind issue-lifecycle, another swamp extension, which drives work to done without me babysitting it. Externalize the thinking into something that holds state, and stop carrying it in your head.

So: move.nl — a perfectly good website and a perfectly useless feed for reasoning. The part I still find a little magic is how I got in. I didn’t reverse-engineer the auth by hand. I did one normal login in the browser, exported the session as a HAR — a full network capture, cookies and redirects and all — and handed the file to Claude. It read the Keycloak silent-SSO flow straight out of the capture and built it into a swamp model, token auto-renewal included, so the thing logs itself back in and keeps running. I never read a line of the auth code. I gave it a recording of my browser doing it once, and described what I wanted out the other end.

The model — move-dossier — pulls my whole saved search into structured data. About fifty fields per listing: type, year, energy label, VvE bijdrage, €/m², bathtub yes/no, floorplans, even the bid deadlines and notary clauses parsed out of the free-text description. The feed is data now, not a wall of ads.

Then I enriched it. The things that actually matter about a place are the things you can’t see in the listing: the buurt, the crime rate, the income mix, the sale history, the energy profile of the street. A second swamp model — nl-property-intel — takes one address and fans out to half a dozen Dutch public sources to fetch exactly that, built to shrug off a dead scraper instead of falling over. One address in, one clean dossier out.

Then the filtering, and this is the part that mattered most: I encoded my requirements as code, once. Bathtub required. Energy label C or better. Not on a busy road — with the specific Amsterdam streets I won’t live on listed by name. Onderhoud at least Goed. A healthy VvE. The requirements stopped living in my head, where they drift and get tired at midnight, and started living in the model, where they don’t.

The last move was about attention. I started with real-time email — every new ad the moment it posted. I killed it; those go to a folder I never open now. The whole pipeline — pull, enrich, filter — runs on a cron once an hour. But the ping is rare. Only about 8% of Amsterdam apartments even have a bathtub, and that’s before energy label, road, onderhoud, VvE. A listing that clears all of it is scarce: a ping lands maybe once every few days, and when it does, it has already passed every bar I care about. Floorplan included. One rare ping that cleared every filter is worth more than a hundred daily emails that cleared two. The signal went up; the noise went to a folder.

Here’s the uncomfortable part. With the dossier, the enrichment, and the planning model, I had most of the information my makelaar and my hypotheek adviser were giving me. The numbers, the comparisons, the “is this reasonable” — I could generate that myself. The tooling quietly replaced a good chunk of what I was paying two professionals for.

Most of it. Not the part that counts when it’s close. What they have that I can’t scrape is experience and connections — the read on a street that isn’t in any dataset, the call that gets a viewing, the deal that gets done. That’s what I’m actually paying for. The information was never the scarce thing.

And that’s the honest shape of it. The tool doesn’t choose. It builds me a clean surface to reason on — a feed I can think with instead of drown in. What I like and don’t like about a place I still find by looking, slowly, in person: the cramped ceiling, the noise off the road, the way light falls in a room that no floorplan can tell you.

The machine watches the market so I don’t have to. The deciding is still mine. That was always the point.