For self-hosters, tinkerers and people with a terminal open
Your travel journal is a folder.
Point an agent at it.
Fernscout is an open-source travel journal: JSON documents and photographs in a folder you own, a website on top, and a documented API underneath. Bring Claude Code, or any agent that can read a Markdown guide and make an HTTP call, and let it do the plumbing — exports, sorting, resizing, uploading. The words stay yours. A new day lands as a draft, and nothing is published until you say so.
- Apache-2.0
- JSON + photos
- OpenAPI
- SQLite · Postgres
Try it with your agent
Guide me through creating my own travel journal, following the overview at https://fernscout.ch/documentation.txt and the day-writing guide at https://fernscout.ch/skill/add-a-day.md. You will need an email address I control.
Pick your altitude
Only a folder
Clone Fernscout Helper, open it with your agent, end up with trip.json and one JSON file per day on your own disk. No server, no account.
git clone https://github.com/severinlindenmann/fernscout-helper cd fernscout-helper && claude
Hosted on Fernscout
Hand your agent the prompt above. With an invitation, it walks you through signing up and gets a key that writes to your journal for seven days.
GET /api/v2/status GET /api/v2/{user}/statusYour own server
A VPS, Node and Caddy, one deploy script. SQLite on your laptop, Postgres in production. A public journal needs no database at all.
git clone https://github.com/severinlindenmann/fernscout cd fernscout && npm ci npm run build && npm start
Ten years of trips, out of your photo library
Most people do not have a travel blog. They have a photo library full of trips and no clear idea when any of them were. Fernscout Helper is a set of agent skills that reads that library — metadata only at first — finds the weeks you were away, and turns the ones you pick into draft days you can review in a browser page.
find the trips in my photos from the last ten years
Reading the Photos library… (metadata only, nothing is downloaded)
2017-04-12 → 2017-04-19 8d 412p 1840 km Lisbon · Sintra
2019-08-02 → 2019-08-16 15d 1233p 960 km Split · Hvar · Kotor
2023-02-18 → 2023-02-25 8d 287p 9310 km Tokyo · Kyoto
These are candidates, not facts — check them against what you remember.
export the Croatia one, up to fifteen a day, favourites first
1233 photographs · 6.1 GB · opening the review page…
Example session. Your places come from your own photographs.
find-trips
Finds the weeks you were away, from photo metadata. Asks where home is instead of guessing.
icloud-export
Exports one trip and opens a review page: Keep, a note per photo, a box for what happened each day. Location and camera data are stripped from the photos that go into the journal.
statement-costs · trip-budget
Reads a bank CSV, filters it to the trip, shows you the merchants first. Asks about the flights instead of estimating them.
gps-history
Google Timeline, Takeout or a GPX from your watch → the route you actually travelled, simplified, on the trip map. The raw history never becomes public.
validate-content → publish · sync
Checks for gaps, prints a dry run, then uploads. Sync goes both ways and, by default, stops when both sides changed the same day.
Built and tested with Claude Code on a Mac — that is where the Photos library is. The cost, GPS and publishing skills run anywhere. On Linux or Windows, a self-hosted instance's npm run ingest turns a folder of camera files into dated draft days, geotagged where the photos carry a location, offline.
A new trip, while you are still on it
Your agent, over the API
A trip and a day are PUT at ids you choose. Every field is in the OpenAPI file; a section left empty is declined with a reason, never guessed.
PUT /api/v2/{user}/trips/{trip} PUT /api/v2/{user}/trips/{trip}/days/{slug} POST /api/v2/{user}/trips/{trip}/days/{slug}/mediaOr just say it
In the studio, a day can be spoken: five short questions, one per screen, answered out loud. You see the transcript and correct it; the day is only your own answers.
What comes out
trip.json dates, people, budget, costs
track.json the clipped route for the map
entries/
2019-08-03-hvar.json one day, status: draft
media/ resized, EXIF and GPS stripped
originals/ the print masters
- A website: map, gallery and an RSS feed, public or only for the people you choose.
- One command hands the whole thing back as a zip. No lock-in: the folder is the journal.
- A printed photobook and real postcards. An agent can arrange a draft; ordering and paying stay on your own page.
The one rule agents follow here
- No invented memories. No weather, meals, feelings or people that you or a real source did not supply. An empty field beats plausible fiction.
- Drafts first. A new day starts as a draft. Publishing is a separate call, made only when you say so in words.
- Tokens stay in the API. An agent's key never opens your owner pages, and your raw GPS history is never exposed.