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 (but short distance mobility is good steep stairs etc) so local travel need to include taxi, e-scooters, public transport, car rental etc.
**Walking:** line giving concrete distances + any bridge-transit (taxi, e-bike, funicular, escalator, shuttle boat). No consolidated walking-distance table at the regional level.italian-micromobility.md is the source of truth for shared e-scooter and e-bike coverage by town, scoped to the index regions only (Emilia-Romagna, Friuli-Venezia Giulia, Marche, Umbria, Abruzzo, Puglia, Calabria). Consult it before suggesting a scooter/e-bike as a 500 m bridge option for a specific town. Note the 2026 Codice della Strada: scooters now need a helmet (which operators don't supply), so prefer e-bikes (helmet-exempt) or taxi as the bridge. When you confirm or discover new operator data (launches, exits, regulation changes), update the file in the same edit.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 for DE/AT/IT via the bahn.de web API driven through a real browser (puppeteer MCP). Covers ICE, Nightjet, Trenitalia (FR/IC/ICN/R) incl. sleeper/couchette flags. The old db-rest HAFAS proxy is dead (2026 DB API migration retired noncd.db.de). Scandinavian legs (SJ/Snälltåget Hamburg/Berlin→Stockholm) are NOT returned by this engine — use sj.se / snalltaget.se. Italo not covered.
Use the google-maps-reviews project skill to scrape header info + individual reviews for any Google Maps place. Requires the Launch Chrome CDP.app launcher running with the user signed into Google. Output is JSON ready for sentiment comparison across beaches, restaurants, hotels, etc.