Departures
I built Departures as a self-owned replacement for TripIt, after TripIt closed its API to new accounts. Every flight, hotel, train and car booking lives as structured data I control, projected into three places: a calendar feed my phone subscribes to from anywhere, a native Home Assistant dashboard, and an installable web app. Each upcoming trip is enriched with a map, a weather outlook, a unified itinerary timeline, who's travelling, eat-and-drink picks, and a family trip guide; there's also an AI chat companion that finds places and can propose edits to a trip. About 169 trips are archived back to 2008, and upcoming trips stay current on their own.
A single hand-maintained file is the source of truth: each upcoming trip carries a machine-readable block I keep current. A generator projects those into an authenticated iCal feed (absolute UTC instants, stable UIDs, validated against the same parser Home Assistant uses) and an enriched JSON the web app and HA integration consume. A pipeline of per-trip enrichers layers on geocoded map pins, a weather outlook, restaurant picks, drive-leg routing and EV charging help; all of it is derived data, never written back to the canonical block. A guard refuses to ever write an empty feed, so a dropped source can't blank your calendar. The whole serving stack (feed, enriched JSON, the PWA and the AI chat companion) runs as a single self-hosted Docker container; no dependence on TripIt.
- Python
- iCal / RFC 5545
- PWA (service worker)
- Home Assistant integration
- Leaflet / Nominatim (OSM)
- Open-Meteo
- OpenRouteService routing
- AI chat companion
- Docker (self-hosted)
- Cloudflare Tunnel + Access