Commit Graph
7 Commits
Author SHA1 Message Date
grabowski d393e16ae1 Rework entry types: merge hotel into stay, transport with modes, auto-transport
- Type set is now activity/stay/transport/flight/rental/note; hotel, travel
  and immigration are removed with idempotent startup data migrations
  (hotel->stay, travel->transport, immigration->activity with flag prefix)
- Transport entries carry an optional mode (train/bus/ferry/taxi/drive/other)
  that drives the chip/map icon; route stops expose transport_mode
- Creating a stay auto-creates a bridging transport to its neighbouring
  stays unless a transport/flight already covers the gap (one-shot)
- Summary: transports count replaces hotels/travelLegs
2026-07-19 17:47:21 +07:00
grabowski b066e7b885 Add drag & drop for entries and per-stay band colours
Calendar chips can be dragged onto another in-range day (multi-day entries shift end_date by the same delta in one PATCH); day-editor rows get a drag handle to reorder within a day, patching sort_order only for changed positions. Continues/dropoff ghost chips and stay bands are not draggable; touch devices fall back to the existing click/edit flow. Each stay band now gets a deterministic colour from an 8-hue palette by chronological index, mirrored as dots in the summary Areas list.
2026-07-19 02:09:26 +07:00
grabowski 2eda9e4f6d Keep calendar columns equal when chips overflow
Grid items default to min-width:auto, so a long unbreakable chip (multi-leg flight code chains) forced its day column wider and deformed the week grid. Allow day cells and chips to shrink (min-width: 0) so the existing ellipsis rules apply, and pin the price badge so it never truncates.
2026-07-19 01:52:24 +07:00
grabowski 430e870426 Fix calendar collapsing into a vertical list
The stay-bands restructure changed the calendar markup to per-week rows (.cal-weekdays / .cal-week / .cal-week-days / .cal-week-bands) but styles.css still only styled the old flat .calendar-grid, so day cells stacked vertically. Adds the 7-column grid layout for the new structure plus the missing stay-band styles (lanes, rounded ends, hover), and updates the narrow-screen rules.
2026-07-19 01:42:44 +07:00
grabowski 154f56a0a0 Add multi-day entries and area stay blocks
Entries gain an optional inclusive end_date (backfilled via migration): flights and travel longer than 24h show a continuation marker on following days, and a new stay entry type marks a time frame in one area (e.g. 3 days Venice) rendered as continuous bands across the calendar weeks. Stays feed the map route as stops; the route summary gains stays count and a chronological areas list with day spans. 49 API tests.
2026-07-19 00:30:14 +07:00
grabowski 1d86c68665 Fix bind-mount data dir permissions via entrypoint
Docker creates ./data root-owned on the host, but the app runs as the unprivileged node user, causing SQLITE_CANTOPEN on first deploy. New entrypoint starts as root, chowns DATA_DIR, then drops privileges with setpriv. Compose keeps the SQLite database in ./data next to the compose file. Also trims scripts/ and playwright artifacts from the image.
2026-07-18 23:54:50 +07:00
grabowski fe89bb2b1c Initial release: collaborative trip planner
Multi-user trip planning web app in a single Docker container. Mullvad-style token accounts, trip sharing via join codes, day-by-day calendar with typed entries (activity, hotel, travel, flight, rental car, immigration, note), multi-leg flight segments with bundled IATA airport dataset, Leaflet/OSM map with per-leg great-circle km (air vs ground), rough km-driven vs rental included-km comparison, cost splitting with settle-up suggestions, flip-clock departure countdown. Node 20 + Express + SQLite (WAL, additive migrations), vanilla JS SPA, 44 API tests.
2026-07-18 23:15:29 +07:00