- DESIGN.md: full design incl. driving-trip requirements (R1-R4), stays model, focus mode, mobile, provenance rules - SURVEY.md: open-source landscape - mock/: interaction mock (Florence itinerary, focus mode, stays, region stops, mobile layout) - router/: Go module (stdlib-only) with Router interface (Valhalla + OSRM backends), stop_cost, optimize_stops, corridor, routectl CLI, bench (5 real NE-corridor tasks, 26 checks passing), integration tests, and setup-osrm.sh for the self-hosted router - osm/: NH+MA+CT+NY PBFs (gitignored) + setup artifacts
105 lines
3.6 KiB
HTML
105 lines
3.6 KiB
HTML
<!doctype html>
|
||
<html lang="en">
|
||
<head>
|
||
<meta charset="utf-8">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||
<title>Trip</title>
|
||
<link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css">
|
||
<link rel="stylesheet" href="styles.css">
|
||
</head>
|
||
<body>
|
||
<div id="map"></div>
|
||
|
||
<!-- ======================= LANDING ======================= -->
|
||
<section id="landing">
|
||
<div class="land-card">
|
||
<h1>Where would you like to go?</h1>
|
||
<div class="land-row">
|
||
<input id="dest" type="text" placeholder="A city, a region, a country… e.g. Florence" />
|
||
<button id="dest-go" class="btn primary">Plan it</button>
|
||
</div>
|
||
<div class="land-div"><span>or</span></div>
|
||
<div id="dropzone">
|
||
<div class="dz-icon">🎫</div>
|
||
<div class="dz-text"><b>Drop a travel booking to start</b><br>ticket, flight or hotel confirmation</div>
|
||
<button id="dz-sample" class="btn ghost small">or start from an example booking</button>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- booking parse modal -->
|
||
<div id="parse-modal" class="modal hidden">
|
||
<div class="modal-card">
|
||
<h2>Parsed booking</h2>
|
||
<table id="parse-table"></table>
|
||
<div class="modal-actions">
|
||
<button class="btn ghost" id="parse-cancel">Cancel</button>
|
||
<button class="btn primary" id="parse-confirm">Build plan around it</button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- ======================= APP ======================= -->
|
||
<header id="topbar" class="hidden">
|
||
<div class="tb-left">
|
||
<span class="crumb" id="crumb">Florence · 12–15 Sep</span>
|
||
<div class="daytabs" id="daytabs"></div>
|
||
</div>
|
||
<div class="tb-right">
|
||
<span class="badge" id="issue-badge" title="Plan issues">⚠ <b id="issue-count">0</b> issues</span>
|
||
</div>
|
||
</header>
|
||
|
||
<div id="app" class="hidden">
|
||
<aside id="rail">
|
||
<div class="rail-block" id="transit-block"></div>
|
||
<div id="rail-body"></div>
|
||
<div class="rail-foot">
|
||
<div class="budget">
|
||
<div class="budget-label"><span id="budget-text">…</span></div>
|
||
<div class="budget-bar"><div id="budget-fill"></div></div>
|
||
</div>
|
||
<div id="issues-panel"></div>
|
||
<div class="legend">
|
||
<span class="tc t-user">·</span> you
|
||
<span class="tc t-sched">·</span> booked
|
||
<span class="tc t-computed">·</span> computed
|
||
<span class="tc t-search">~</span> web
|
||
<span class="tc t-llm">·</span> est.
|
||
</div>
|
||
</div>
|
||
</aside>
|
||
<div id="mapwrap">
|
||
<div id="focusbar" class="hidden">
|
||
<span id="focusbar-title"></span>
|
||
<span class="fb-hint">talk to filter</span>
|
||
<button id="focusbar-x" class="fb-x" title="Exit (Esc)">✕</button>
|
||
</div>
|
||
<div id="l3-editor" class="hidden">
|
||
<div class="l3-title" id="l3-title">Route</div>
|
||
<div class="l3-hint">Drag the ● waypoint (or the endpoints) — the duration updates live.</div>
|
||
<div class="l3-time">leg time: <span id="l3-time" class="tc t-computed">…</span></div>
|
||
<button class="btn ghost small" id="l3-close">Done</button>
|
||
</div>
|
||
</div>
|
||
<aside id="chat">
|
||
<div id="chat-body"></div>
|
||
<div id="chat-input-row">
|
||
<input id="chat-input" type="text" placeholder="Ask, direct — or “find a lunch spot”…" />
|
||
<button class="btn primary small" id="chat-send">→</button>
|
||
</div>
|
||
</aside>
|
||
</div>
|
||
|
||
<nav id="mobiletabs" aria-label="Views">
|
||
<button data-t="plan" class="on">🗓️ Plan</button>
|
||
<button data-t="map">🗺️ Map</button>
|
||
<button data-t="chat">💬 Chat</button>
|
||
</nav>
|
||
|
||
<script src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js"></script>
|
||
<script src="data.js"></script>
|
||
<script src="app.js"></script>
|
||
</body>
|
||
</html>
|