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://log-trip.ongheart.com/documentation.txt and the day-writing guide at https://log-trip.ongheart.com/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 write it in the studio
No agent needed: the studio composes a day on one page from your words, facts measured from your photographs and real lookups.
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.
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.