For each conference, calculate the number of free days available
before and after, relative to the trip boundary or adjacent
conference. Multi-conference trips show the gap between conferences
as "after" the first and "before" the second.
Closes#189
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Replace three separate <table> elements with one shared table. The
conf_table macro becomes conf_rows which emits only <tr> elements;
Current/Future/Past section boundaries are dark header rows inside
the same <tbody>. With one colgroup the browser uses one shared
column-width calculation so all headings line up.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
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>
- Proper <table> with colgroup widths, table-sm table-hover align-middle
- Month-divider rows (MARCH 2026, APRIL 2026, …) break up long lists
- Date ranges collapsed to a single column (e.g. "25–28 Mar 2026")
- Row highlight (conf-going) for conferences marked going=true
- Topic and date columns styled text-muted small to reduce visual noise
- Trip links replaced with 🧳 emoji: shows just the emoji when the trip
title matches the conference name (the common case), otherwise appends
the trip title (e.g. "🧳 Budapest" for FOSDEM); full title always in
tooltip
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
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>
- Add render_trip_element macro to macros.html; use it in trip_item for
the trip list page, giving a consistent one-line-per-element format
with emoji, route, times, duration, operator, distance, and CO₂
- Redesign trip_page.html itinerary: day headers use date-only (no year),
condense check-out to a single accent line, show time-only on transport
cards, humanise duration (Xh Ym), km-only distance, add CO₂ for all
transport modes, fix seat display for integer seat values
- Fix UndefinedError on /trip/past caused by absent 'arrive' key (Jinja2
Undefined is truthy) and date-only depart/arrive fields (no .date())
- Improve mobile map layout: text column before map in HTML order, reduce
mobile map heights, hide toggle button on mobile
- Add trips.css with design system (Playfair Display / Source Sans 3 /
JetBrains Mono, navy/gold/amber palette, card variants by type)
- Add tests/test_trip_list_render.py covering the rendering edge cases
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
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>
When attend_start or attend_end is set, display the full conference
date range in parentheses after the attended dates, e.g.
"Wed 6 Mar to Sun 10 Mar (full conference: Sun 3 Mar to Sun 10 Mar)".
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Allows recording when you arrive late or leave early at a multi-day
conference. Both fields accept a plain date or datetime with time.
Trip pages display the attendance dates instead of the official
conference dates when these fields are set.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Use Bootstrap cards and collapsible sections to make the long
lists of airlines, airports, and stations easier to read. Items
are now displayed as badges and hidden by default.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
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>