diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..8e57635 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,57 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +## [Unreleased] + +--- + +## [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 diff --git a/apps/web/package.json b/apps/web/package.json index 7c6b43b..9239ffb 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -1,6 +1,6 @@ { "name": "@timetoleave/web", - "version": "0.1.0", + "version": "1.0.0" "private": true, "scripts": { "dev": "next dev", diff --git a/package.json b/package.json index 514537e..ea5d731 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "time-to-leave", - "version": "0.1.0", + "version": "1.0.0" "private": true, "workspaces": [ "apps/*", diff --git a/packages/api-client/package.json b/packages/api-client/package.json index 00cd332..d369ba9 100644 --- a/packages/api-client/package.json +++ b/packages/api-client/package.json @@ -1,6 +1,6 @@ { "name": "@timetoleave/api-client", - "version": "0.1.0", + "version": "1.0.0" "private": true, "main": "src/index.ts", "types": "src/index.ts", diff --git a/packages/core/package.json b/packages/core/package.json index 36790b2..cf84784 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@timetoleave/core", - "version": "0.1.0", + "version": "1.0.0" "private": true, "main": "src/index.ts", "types": "src/index.ts",