I told the AI that my last day in Paris was a museum day. That is how I remembered the plan: fly in from Prague, one big museum, airport hotel, fly home. Then the photos from that day synced, and the story fell apart. Twenty-nine pictures. All but the last taken within three hundred meters of Boulevard Haussmann. The stained-glass dome of Galeries Lafayette, shot straight up. A wall of spices in the gourmet food hall. And the last frame, at 9:20 PM: steak frites, out by the airport. There was no museum in any of it.
I was building a site about this trip. It now says what the GPS says, because the GPS was right and my summary of my own trip was not.
Not the part where AI writes the code, though. That part works, it took an evening, and it is no longer an interesting story. What I did not see coming is that the most valuable thing the AI did for my travel site was not web development. It was archaeology.
The premise
Sixteen days across Europe. Ten countries. Most of it by car, a train to start, a flight near the end, a river cruise in the middle. When I got back to my hotel most nights, I would open a chat and describe the day. By the end of the trip I wanted the usual souvenir of this era, a website: a map with the route, a journal entry per stop, the food, the stats. Real photos, on my own domain, without turning my life into public data.
The site itself is deliberately boring. Plain HTML and JavaScript, a map for the route, the photos in cloud storage, nothing clever anywhere. The first working version existed the same evening I asked for it. That evening is not the story.
GPS archaeology
Here is the actual problem. My photo library had 45K+ items. Somewhere in there was the trip.
The AI pulled metadata out of the photo library in bulk: timestamps and coordinates first, nothing else. 1,253 items fell inside the trip window. Then it started clustering coordinates against a map and asking me questions I could not have answered cold:
There are 59 photos in Lucerne and only 4 in Zurich. Should Lucerne be its own stop? (Yes. I had filed the whole day under “Zurich” in my head.)
There is a cluster of 109 photos at one bay on an island in Croatia. (The beach day. The biggest photo cluster of the entire trip, and I had described it to the AI in one sentence.)
You stopped somewhere in the Italian countryside at 18:49 and left at 19:58, and one of the photos is of a menu. The menu has the restaurant’s name on it. (A roadside osteria I loved and could never have named again.)
There is a 9-photo lunch stop in Brno between Vienna and Prague. (Completely forgotten. It is a journal entry now, with the best svíčková of the trip.)
Reverse geocoding turned anonymous roadside clusters into named places. A routing engine replayed the whole chain of stops over real roads and measured the trip properly: 4,215 kilometers by road. My memory would have contributed “a lot of driving.”
None of that needed a model. Counting photos and clustering coordinates is a script, and I want to be accurate about which half was which.
The other half is what came out the end. The forgotten lunch is a journal entry now, filed as the Moravian lunch stop: pulled off halfway to Prague for a proper Moravian lunch in Brno, beef broth to start, svíčková with dumplings and cranberry, poppy-seed palačinky to finish. Three photographs survive it on the site, captioned the abbey church from the road, the pub with plates on the walls, and svíčková, the real thing. I had none of that. I had a gap between Vienna and Prague.
The osteria got its name back the same way, read off the menu in the photograph: Osteria Cà de le Rane, in Travagliato, outside Brescia. That is the part a clustering script cannot do. Something has to look at the picture and know that the words on the paper are the answer to a question I asked in a hotel room two weeks earlier.
The metadata could not do it alone either. This is the part I want to be precise about, because it is where the model actually earned its place. Memory and metadata kept correcting each other:
Metadata knew I was on Mount Pilatus before Lucerne. Only I knew the boat ride between them was the point.
I remembered “before the samosas there was an Iranian dish.” The AI took that one sentence into the metadata and came back with a photo of kabob koobideh, taken at the right hour, in the right city. Every dish I half-remembered, it found the frame for. The food page has 35 of them now.
And the metadata overruled me on the museum that never happened.
I could not have written this journal alone, and neither could the AI. Your camera roll is a second witness to your life, accurate to the minute and the block, that nobody has the patience to interview. The AI had the patience.
It is also a witness that only speaks when you point it at something. The museum I did not photograph and the museum I did not visit look identical from here. The photos did not prove the museum never happened. They just stopped me believing my own summary.
The privacy layer
One rule existed from day one: no people. No faces, no strangers, nothing identifiable. A trip site should publish the trip, not the travelers.
The pipeline had two layers, and the order matters. First, a face detector screened every candidate photo mechanically. Then the AI actually looked at every survivor, on contact sheets, before anything got published. The second layer exists because the first one is confidently blind. The detector will happily pass:
a photo of an order-confirmation screen, prices and all
a payment slip on a restaurant table
a license plate filling the bottom of a scenic shot
someone’s hand, with rings, at the edge of a display case
All of those were real photos from my camera roll, and they were caught by review, not by the detector.
Review is not perfect either. A used funicular ticket with a legible barcode is on the site as I write this, and when I found it I decided I did not mind. Two layers beat one. Neither of them is zero, and a pipeline that says otherwise is lying to you about the same thing the detector was.
A classifier answers the question you trained it on. “Is there a face?” is not the same question as “would a careful person publish this?”
Beyond the photo screening, EXIF came off every published image, and the map plots town centres rather than me. The Croatian beach is published at bay-level precision, not exact coordinates. Landmark shots got a simple standard: strangers at a distance are fine, anyone recognisable never, at any distance. The Galeries Lafayette dome got published. The frame where a stranger posed on the glass walkway below it did not.
The rule has a cost I did not think about until the end. There is nobody in any of it. What got published is the trip with the travelers cut out, which is a strange object to have made and the right trade to have made.
What I kept for myself
An honest ledger, because posts like this inflate the autonomy:
The itinerary came from me. The AI drafted, I corrected, more than twenty times. When I typed “green test day” instead of “rest day”, it did not guess what I meant. It asked.
Taste stayed mine. I vetoed the site’s color scheme twice before it stopped looking like every AI-generated page you have ever seen.
Nothing deployed without my approval, ever. Cloud sign-in went through one-time codes that only I could tap, once from an airplane seat.
So no, this was not “an AI built my website while I slept.” It was closer to working with a research assistant who had read my camera roll more carefully than I ever would, caught what the pipeline asked it to catch, left the rest to me, and needed me for exactly the things that were mine: what mattered, what was true, and what was nobody’s business.
The souvenir
The site is live. The last dish in the food log is the steak frites, and the last photo in the journal is the dome, straight up.
I am not linking it here. That is the last decision the rule made for me, and it follows from all the others: publish the trip, not the travelers. Something built as a souvenir does not need an audience.
But the thing I actually brought home is a changed idea of what I was carrying in my pocket for sixteen days. My camera roll was keeping a journal the whole time, a better one than I was. It just needed something patient enough to read 45K+ frames, someone with taste to throw most of them out, and a hard rule about what never leaves the house.
Related: An Agent That Opens Its Own Gate Has No Gate, on why the approval step in that ledger is the one that has to stay human.
The views expressed here are my own and are not related to any organization I am affiliated with.




