- Add 3-column balanced site distribution using greedy weight algorithm
- Build new DOM off-screen in DocumentFragment, swap atomically (no flash)
- Skip empty API responses and preserve display on transient errors
- Remove news ticker from UI and grid layout
- Add blue-to-red gradient on site header bars
- Bump font sizes: destinations 1.4em, countdowns 1.5em, line numbers 1.6em
- Add breathing pulse animation on daylight bar sun/moon icons
- Fix daylight bar indicator snapping to position on first render
- Make config button visible in landscape with semi-transparent background
- Add weather forecast strip as grid row 4 with compact styling
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Change from 4-column to 2-column grid in the @media (min-width: 1200px)
block for body.normal, giving each departure card ~580px width on 1080p
monitors. Also add font-size increases for destination text (1.1em),
countdown numbers (1.4em), and next departures (0.9em) to improve
readability at the wider card size.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Redesign the landscape orientation for kiosk readability at 3-10m distance:
- Add dark kiosk background (#1a1a2e) with high-contrast light text
- Replace 2-column grid with 5-row full-width stacking layout
- Add compact weather bar (temp + sunrise/sunset) replacing full widget
- Enlarge countdown to 2em hero size in landscape
- Replace time ranges with next 2-3 absolute departure times
- Add 3-tier urgency colors: Nu (green), 1-2min (red), 3-5min (orange)
- Make site headers full-width blue gradient bars in landscape
- Tighten card spacing (65px min-height, 8px gap) for 4-stop visibility
- Add scrolling news ticker with /api/ticker fallback messages
- Fix daylight bar from position:fixed to relative in landscape grid
- Hide background overlay in landscape for maximum contrast
- Fix weather-section HTML missing closing div tags
All changes scoped behind body.landscape CSS selectors; other orientations unaffected.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Split server.js routes into modular files (server/routes/)
- departures.js: Departure data endpoints
- sites.js: Site search and nearby sites
- config.js: Configuration endpoints
- Reorganized file structure following Node.js best practices:
- Moved sites-config.json to config/sites.json
- Moved API_RESPONSE_DOCUMENTATION.md to docs/
- Moved raspberry-pi-setup.sh to scripts/
- Archived legacy files to archive/ directory
- Updated all code references to new file locations
- Added archive/ to .gitignore to exclude legacy files from repo
- Updated README.md with new structure and organization
- All functionality tested and working correctly
Version: 1.2.0