Commit graph

144 commits

Author SHA1 Message Date
e36a326739 Fix Gantt tooltip for single-day events
Show "Geomob Edinburgh (6 May)" instead of "Geomob Edinburgh (6 May–6 May)".

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-14 11:18:23 +00:00
10716f9874 Add bidirectional hover highlight between Gantt chart and table
Each Gantt bar and table row gets a data-conf-key attribute
(ISO start date + conference name). A small JS lookup map connects
them so hovering either element highlights both simultaneously:
- Gantt bar: filter brightness + inset white box-shadow
- Table row: yellow tint via background-color

Hovering a Gantt bar also scrolls the matching table row into view
(scrollIntoView nearest) so future conferences are reachable without
manual scrolling. The key field is pre-computed in
build_conference_timeline() to keep the template simple.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-14 11:02:55 +00:00
20f1e31119 Add Gantt-style timeline to conference list page
Shows the next 90 days as a horizontal bar chart above the conference
list. A greedy interval-colouring algorithm assigns each conference to a
lane so overlapping conferences appear in separate rows. Lane colour
cycles through a fixed palette so simultaneous events are easy to tell
apart. Month boundary markers and a red today-line provide orientation.
All position maths happens in build_conference_timeline() in Python;
the Jinja template is pure rendering.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-14 10:47:46 +00:00
feaefba03c Limit weather API calls to cron only, increase cache TTL to 24h
Web view was calling the OpenWeatherMap API directly on every request
(home + all trip locations), causing >1000 calls/day. Now web_view.py
uses cache_only=True everywhere so it never triggers live API calls —
update.py (cron) is the sole API caller. Also warms home location cache
in update_weather(), and increases TTL from 6h to 24h.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-14 09:27:56 +00:00
0c88ad4638 Validate weekends year range and fix trip page unbooked-flight helper call 2026-03-07 13:10:33 +00:00
b3975dad3a trip: include transit airport cities in destination timezone list
Transit countries (e.g. Madrid on the Peru trip) were already included
in trip.countries via flight data, but get_destination_timezones only
iterated trip.locations() which comes from accommodation/conferences/events.
Now also extract airport cities from flights and append any that aren't
already covered by a stay, using the airport coordinates for timezone lookup.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-02 15:31:24 +00:00
f0698acd59 Base trip timezone differences on trip dates and remove live local-time column 2026-02-26 15:31:13 +00:00
f2752383f2 Render UK time difference server-side and simplify trip timezone JS 2026-02-26 15:26:25 +00:00
d7e469a0ed Avoid stale timezonefinder cache when dependency is installed later 2026-02-26 15:19:09 +00:00
38cf270307 Improve coordinate timezone resolution with timezonefinder fallbacks 2026-02-26 15:15:37 +00:00
1ee1f38a99 Use coordinate-based timezone lookup for trip destinations 2026-02-26 14:57:20 +00:00
ec413ac310 Add destination time difference and live local times on trip pages
Closes #208
2026-02-26 14:50:54 +00:00
016039e78f Show current-year school holidays and add Bristol source link
Closes #209

Closes #210
2026-02-26 14:42:40 +00:00
b4f0a5bf5d Add OpenWeatherMap weather forecasts. Closes #48
Show 8-day Bristol home weather on the index and weekends pages.
Show destination weather per day on the trip list and trip page.
Cache forecasts in ~/lib/data/weather/ and refresh via update.py.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-21 20:27:25 +00:00
61e17d9c96 Track dates of English school holidays
Fixes #168
2026-02-21 18:05:19 +00:00
7a50ea6016 Improve launch status UI and alert on SpaceDevs payload errors 2026-02-21 16:39:47 +00:00
b835956ea9 Show bootstrap alert after login. 2026-02-17 11:30:03 +00:00
e0b9e4e719 Switch from UniAuth to OpenID Connect 2026-02-17 11:25:55 +00:00
523dc78b35 Add overall airline, airport, and station stats to trip summary
Aggregate yearly stats into overall totals so the trip stats page
shows flight segments by airline, airports used, and stations used
in the summary section at the top.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 09:25:10 +00:00
f22772d12d Move trip new-country filtering into stats 2026-01-15 22:53:17 +00:00
91a74fd887 Add YAML output on debug page. 2025-11-14 16:16:54 +00:00
7e2b79c672 Serve conferences in iCalendar format. 2025-11-14 15:40:05 +00:00
77ea6a8afa Generate iCalendar for Thunderbird, etc. 2025-11-14 14:40:19 +00:00
6d899113ce Add map fixture. 2025-11-13 06:42:12 +00:00
b4126d04f8 Move two functions to agenda/trip.py 2025-11-03 12:36:13 +00:00
8901bc9bbb Bug fix 2025-08-01 06:21:22 +01:00
0e769c3de6 Replace fullcalendar with TOAST UI Calendar
Fixes #146
2025-07-24 23:10:23 +01:00
672ca4b849 Generalize and enhance yearly statistics
The accommodation page has been updated to provide a more comprehensive and dynamic view of travel statistics.

Previously, the page only displayed hard-coded statistics for total nights away and abroad for the year 2024. This required manual updates each year and didn't provide historical context.

This commit introduces the following changes:

*   **Dynamically Calculate Yearly Stats:** The `accommodation_list` view in `web_view.py` now calculates statistics for every year found in the accommodation data. It correctly handles stays that span across multiple years.
*   **Display All Years:** The `accommodation.html` template now iterates through a list of all calculated yearly stats, displaying a summary for each year automatically.
*   **Add Percentage of Year:** The template also calculates and displays what percentage of the year the "total nights" and "nights abroad" represent. This includes logic to correctly account for leap years (366 days) for an accurate calculation.

These changes make the statistics more informative and ensure the page remains relevant over time without needing further manual code adjustments.
2025-07-23 22:52:22 +01:00
13bb753a0b Add dynamic meteor shower calculations using PyEphem
- Replace hardcoded 2025 data with astronomically calculated dates
- Use solar longitude to determine precise meteor shower peak dates
- Calculate real-time moon phases for accurate viewing conditions
- Support for any year with automatic date calculations
- Include parent body information and meteor velocities
- Remove caching layer for real-time calculations

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-16 13:44:40 +02:00
37e74404d5 Add meteor info page
Fixes #164
2025-07-16 12:42:21 +02:00
2203677146 Trip debug page needs user to be authenticated. 2025-07-16 12:12:47 +02:00
46091779f0 Format code with black, remove unused import. 2025-07-16 12:12:27 +02:00
0e2c95117c Add debug page for trip objects
Add /trip/<start>/debug endpoint that displays the complete trip object
data in pretty-printed JSON format with syntax highlighting. Includes
both raw data and computed properties for debugging purposes.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-16 11:25:17 +02:00
af492750cb Add location tracking to weekend page
Weekend page now shows specific location (city and country) for each
Saturday and Sunday based on travel history:

- Analyzes flight arrivals and accommodation check-ins to determine exact location
- Shows "home" when at Bristol, UK
- Shows "City, 🏴 Country" format when traveling
- Handles multi-location trips by finding most recent travel within trip period
- Optimized to parse YAML files once instead of per-date lookup

Closes #191

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-16 03:59:35 +02:00
f41930f811 Use get_country for Schengen report 2025-07-15 18:12:11 +02:00
f499015466 Adjust weekend page high pithing
Don't highlight a week number when showing weekends for different year.

Example: https://edwardbetts.com/agenda/weekends?year=2100&week=1

Closes: #198
2025-07-15 17:48:44 +02:00
7f12282c42 Add week and year parameters to weekends page.
Fixes #190
2025-07-15 17:42:47 +02:00
d2c4fa69ee Implement Schengen Area Compliance Report
How many close am I to 90 days in the last 180.

Fixes #193.
2025-07-15 14:43:37 +02:00
63c7c54bfc Show CO₂ for flights on trip list. 2025-05-26 10:07:37 -05:00
f6fba93a54 Add optional date parameter for weekend. 2025-01-27 08:38:55 +00:00
f5a8676336 Weekend page to show full year.
Highlight current week.
2025-01-24 20:49:16 +01:00
2f574264e5 Show new badge next to new countries on travel stats page. 2025-01-24 20:19:25 +01:00
c3be926ff7 Current trip summary on index page
Closes: #169
2025-01-11 15:29:07 -06:00
d7b636784d now.date() 2025-01-11 15:18:45 -06:00
f4fc839926 Move code around 2024-11-13 15:52:02 +01:00
53f6d05e52 Bug fix to return 404 for unknown trip. 2024-11-13 14:36:49 +00:00
40bac83790 Remove old unused code. 2024-11-13 14:36:19 +00:00
9f1f64708f Remove old unused code. 2024-10-31 08:27:40 +00:00
a1cdf62eef Bug fix trip stats page 2024-10-16 06:36:26 +01:00
aad968a174 Unbooked flight great circle goes to airport (Closes: #179) 2024-10-13 09:39:02 +01:00