This file contains preferences and requirements for AI assistants helping with travel planning for the Summer 2026 trip.
The trip starts on June 11 and ends at July 4. We are mainly traveling with train (Interail). We are travelling to Italy and stopping along they way. Start and endpoint is Stockholm, Sweden. One traveller can only walk about 500 m so local travel need to include taxi, e-scooters, public transport, car rental etc.
calendar/itinerary.py is the single source of truth for the day-by-day plan. The build pipeline derives two outputs from it:
calendar/italy-2026.ics — subscribed in Apple Calendar via a secret gistItinerary.md — auto-generated human-readable page on the websiteDo NOT hand-edit Itinerary.md — it is overwritten on every build. Edit calendar/itinerary.py instead.
.md at the repo root + calendar/README.md → pandoc → Web/*.htmlindex.md (linked from /)Rakefile + Gemfiletools/template.html, tools/style.css, tools/rewrite-links.lua (.md → .html link rewriter)bin/rake build — incremental, only rebuilds changed files. Includes regenerating Itinerary.md from calendar/itinerary.py.bin/rake publish — npx wrangler pages deploy Web --project-name italy-2026. Skips if nothing changed since .last_published.bin/rake force_publishbin/rake lint — html-proofer link checksbundle install (uses Gemfile)calendar/make-ics.py → calendar/italy-2026.icscalendar/sync.sh — rebuilds .ics if itinerary.py/make-ics.py/Train-Routes.md changed; pushes to gist only if content sha (excluding DTSTAMP) differs. Tracks last-pushed sha in calendar/.last-pushed-sha.b9921ca8dc846a76ca131507cd88e922 (jacobwallstrom, secret). See calendar/README.md for subscribe URLs..claude/settings.json wires a Stop hook that runs .claude/hooks/site-sync.sh after every assistant turn. The script:
calendar/sync.sh → updates Apple Calendar gist if itinerary changedbin/rake build publish → regenerates Itinerary.md, rebuilds HTML, deploys to Cloudflare Pages if changedIdempotent and silent on no-op (exit 0). On failure: exits 2 with a structured recovery guide written to stderr, which Claude Code injects back into the conversation for the next agent.
Use the eu-rail-timetable project skill to query live 2026 train timetables across SE/DK/DE/AT/IT (db-rest HAFAS proxy). Covers SJ, Nightjet, ICE, Trenitalia. Italo not covered.