Structure Beats Magic ← All writing

For knowledge workers

How We Decide Who to Trust

Travel advice is a firehose. We turned ours into a database with a door policy.

By Jaco van der Laan · 2026-07-15

Try searching for a trip. Any trip. What comes back is a wall: SEO articles written for other SEO articles, "10 hidden gems" lists that are neither ten nor hidden, sponsored roundups, and newsletters that arrive daily whether or not anything happened. None of it is wrong, exactly. It's just not for you. A feed optimises for engagement, and engagement is what happens to you while you're trying to decide something else.

We got tired of it. Not tired of travel — tired of the deciding. So we did what we do with every problem that keeps coming back: we stopped searching and started structuring.

Decide whose taste you trust before you need them

The move is simple to say and unusual to actually do: pick your sources in advance, when you're calm, not in the panicked week before you book. Not "bookmark some blogs" — actually decide. Whose taste has earned a vote in your trips? Who is merely loud?

We call these our curated sources. Right now there are 36 of them fully documented, one by one, with a few more in the intake queue — the register keeps growing, but only through the door. They range from Dutch specialists — Voigt Travel for Nordic self-drive, Tiara Tours, SNP, Djoser, Riksja — to international operators like Audley, Nordic Visitor, Intrepid and Quark Expeditions, to pure editorial voices like Barts Boekje and Columbus Magazine. An operator and a magazine are very different animals, but for our purposes they do the same job: they emit recommendations, and we need to know how much weight each one gets. The ones that cleared the bar are public: the sources we trust.

The important part isn't the list. It's that the list is closed. When a recommendation arrives from outside it, the default answer is no. That single rule kills most of the firehose on contact.

Give every source the same shape

A bookmark folder is where good intentions go to age. What made ours different is boring on purpose: every source gets the same structured note, with the same fields. Who is this source actually for (audience_age_band, audience_style, typical_traveller)? What do independent reviews say (review_score)? Is it in, out, or on trial (curation_status)? Are its offers commercially alive (offer_signal)? Plus the URL and tags.

Once every source has the same shape, something shifts. It stops being a reading list and becomes a model — a small one, but a real one, and you can query it. We went one step further and extracted the actual trips: 827 of them, across 25 operators and 2 editorial sources, loaded into a local DuckDB database and scored against an explicit profile of what we like. The profile is ours and it stays ours; the point is that it's written down. A preference you haven't written down can't score anything. It can only nag.

So when we ask "what's worth looking at for Sicily," we're not searching the internet. We're querying 827 trips from 27 voices we already vetted, ranked by a rubric we wrote ourselves. The feed never gets a vote.

Keep the rejections

Here's the part most people skip, and it's the spine of the whole thing.

Of our 36 sources, 24 are active, 5 are candidates still on trial, and 7 are rejected. And we keep the seven. Each rejection is a note with a reason, sitting right next to the sources that made it in.

Why keep them? Because a rejected source is a decision, not an absence. If it's merely missing, you'll re-discover it in eight months, spend an evening re-evaluating it, and maybe reach a different conclusion for no better reason than mood. If it's rejected with a reason, the work is done once. Future-you reads one line and moves on.

There's an older name for this: via negativa. Knowing what you don't want is often more durable knowledge than knowing what you do. Tastes drift; anti-interests are surprisingly stable. Our reject pile is the most honest part of the model, because it's the part with no incentive to flatter anyone.

Sources are also shops

An operator is two things at once: an editorial voice and a commercial actor. These can fail independently, and a model that tracks only one will lie to you.

That's what offer_signal is for. It watches the email side: are this operator's deals actually alive? Thirteen of our sources currently are. The rest carry values like stale-2025-03, stale-2026-02, dead-2017, dead-2020, dead-2024 — the date the signal went quiet. A source can write beautifully about the Arctic and not have sent a live offer since 2017. Editorially excellent, commercially dead. The model says so out loud, so we don't have to remember it.

This sounds like a small bookkeeping detail. It isn't. It's the difference between "I love this company" and "I love this company and they can currently sell me something." Only one of those helps you book a trip.

Write down how sure you are

Every field in the model records where its evidence came from, including when the evidence is thin. A typical review entry reads: "Trustpilot 4.4/5 over 983 reviews… numbers via search results/crawls, not primarily verified." We could have written "4.4 stars" and looked tidier. We wrote the honest version instead.

This is not a disclaimer. It's a feature. A model that admits its weak spots is one you can keep trusting when it's wrong, because you know which parts were load-bearing and which were best-effort. Confidence is data too. Most recommendation systems hide theirs; ours is a column.

What this buys

The payoff is visible on our destination pages. Take Palermo: every pick shows its taste-rubric score, the evidence behind it, and — just as prominently — what got ruled out and why. Not "here are twelve places," but "here are the ones that survived, here's the scoring, here's what didn't make it." When you disagree with a pick, you can see exactly which assumption to argue with. Try doing that with a listicle.

And deciding got fast. Not because we found a better search engine, but because most of the deciding happened months ago, in the structure. By the time a specific trip question shows up, the trusted voices are chosen, the untrusted ones are documented, the dead offers are flagged, and the scoring is written down. What's left is the fun part.

This was never really about travel

Swap the nouns and the method survives intact. Restaurants, tools, newsletters, investment commentary, parenting advice — any domain where recommendations arrive faster than you can evaluate them. The recipe is the same five moves: name your sources explicitly, give every one the same shape, score against a profile you've actually written down, keep the rejections with reasons, and record how sure you are. (The condensed version lives at how we curate.)

None of this needed AI to be clever, and that's rather the point. The AI helps us extract and score at volume — 827 trips is not an evening's hobby — but the intelligence lives in the structure: the fields, the gate, the reject pile, the honesty column. The tools just run fast inside it.

We have a name for that principle, and a whole site about it: structure beats magic. This is what it looks like when you point it at something you love.

The best trips aren't found. They're chosen. So are the voices you let choose with you.

Structure + Taste + Sources → Journeys worth taking

← More writing The method behind it →