# Changelog All notable changes to this project will be documented in this file. ## [Unreleased] ### 🌙 Mobile Application - Default to dark theme across the mobile app - Filter native calendar events by location to exclude empty ones - Async station selection with error handling and alerts - Improved notification settings UI ### 📅 Calendar Integration - **Google Calendar sync** via full OAuth 2.0 flow (token exchange, refresh, and status checks) - UI for connecting, syncing, and disconnecting Google accounts in the Calendar panel - Batch edit panel for managing event destinations on the web calendar - Edit support in AddEventModal for modifying existing events ### 🚉 Public Transport - HAFAS LocMatch method in API client for finding nearest station to current location - Improved station selection with async search and error handling - WienerLinien departures hook improvements ### 🔧 API Client - Added `fetchGoogleCalendarEvents` method for Google Calendar sync - Added `findNearestStation` method for geolocation-based station lookup - Enhanced HAFAS request handling --- ## [1.0.0] — 2025-01-27 ### 🎉 Initial MVP Release First stable release of TimeToLeave: a smart departure planner that integrates your calendar with real-time public transport data to tell you exactly when to leave. ### Web Application - Next.js 16 web dashboard with Tailwind CSS 4 - Calendar sync via `.ics` file import or URL - Station search and journey planning for upcoming events - Real-time departures with dynamic leave-status countdown - Browser-based leave reminders with push notifications - Dark/light theme toggle - Debounced search and optimized calendar loading - Docker support with multi-stage build and standalone output ### Mobile Application - React Native 0.81 / Expo 54 mobile client - Five-screen navigation: Event List, Add Event, Event Detail, Origin Setup, Settings - Native calendar import via `expo-calendar` - Geolocation-based origin detection via `expo-location` - Local push notifications via `expo-notifications` - Persistent settings and state via AsyncStorage ### Public Transport Integration - HAFAS protocol support for Austrian railway (ÖBB) real-time departures - WienerLinien integration for Vienna U-Bahn, tram, and bus departures - Accurate timezone-aware HAFAS time parsing with DST transition handling for `Europe/Vienna` - Support for repeated stop IDs and multiple connections ### Routing - Bike route calculation from origin to departure station via OSRM - Geocoding API integration for station lookups - Fallback and caching logic for API failures ### Shared Infrastructure - Monorepo structure with npm workspaces - `@timetoleave/core` — shared types, countdown utilities, and leave-status logic - `@timetoleave/api-client` — typed client for HAFAS, calendar, geocoding, and bike routing - Correlation IDs for request tracing and monitoring - Comprehensive test coverage across web (Vitest) and mobile (Jest) - Strict TypeScript type-checking across all workspaces - ESLint linting across the codebase