{"id":21460,"plugin_id":"plugins_6aaf0492669c8191ab428732a6378d56","kind":"skill","collection_source":null,"comparison_source":null,"observed_at":"2026-09-30T23:16:57.184Z","digest":"48f218ba7960ed5aff8cde94a74280c77932f454d1c86a788a2231d88746ef69","against":null,"payload":{"description":"Build a responsive, image-rich trip decision workspace from an audited plan. Use after a full plan is stable or when the user asks for an interactive travel dashboard that compares hotels, activities, restaurants, transport, itinerary, and budget in one place; do not use it to invent or repair research.","included_files":[{"relative_path":"agents/openai.yaml","size_in_bytes":293},{"relative_path":"assets/trip-dashboard-template.html","size_in_bytes":30073},{"relative_path":"references/dashboard-data-contract.md","size_in_bytes":5455},{"relative_path":"scripts/build_dashboard.py","size_in_bytes":12381},{"relative_path":"scripts/test_build_dashboard.py","size_in_bytes":4061}],"name":"trip-dashboard","skill_md_contents":"---\nname: trip-dashboard\ndescription: Build a responsive, image-rich trip decision workspace from an audited plan. Use after a full plan is stable or when the user asks for an interactive travel dashboard that compares hotels, activities, restaurants, transport, itinerary, and budget in one place; do not use it to invent or repair research.\n---\n\n# Trip Dashboard\n\nCreate the interactive companion to the written plan. The dashboard is the traveler’s all-in-one decision desk: it makes the meaningful choice understandable without requiring a booking-site scavenger hunt. It presents audited data and never replaces research, source verification, budget reconciliation, or accessibility gating.\n\nRead [dashboard-data-contract.md](references/dashboard-data-contract.md). Generate the interface only through `scripts/build_dashboard.py`, which uses the validated `assets/trip-dashboard-template.html`.\n\n## Build the decision dataset\n\n1. Convert the stable plan into the complete contract JSON. Preserve the canonical currency, travelers, target, selected recommendations, budget inputs, route, days, and evidence ledger.\n2. For every hotel, experience, restaurant, and transport option, include enough verified detail to decide inside the dashboard: description, traveler fit, logistics, price basis, quality signals, pros, cautions, confidence, and freshness.\n3. Add two to four truthful, attributable images per option where available. Check every primary image in a browser. Do not use a similar-looking substitute for an exact property, venue, dish, or tour. Label representative destination imagery plainly when it is the only defensible choice.\n4. Include at least two credible alternatives for each meaningful decision when the market actually offers them. Preserve the recommended default, but make the tradeoffs visible.\n5. Use party-total amounts unless the field explicitly says otherwise. Mark evidence status and keep checked dates visible.\n6. Ensure restaurant costs are not double-counted: use `budget_mode: included` when the food assumption already covers the meal; use `additive` only for separately priced splurges or prepaid dining.\n\n## Build and verify\n\n1. Run the builder. If validation fails, repair the canonical data rather than weakening validation or hand-editing generated totals.\n2. Open the generated dashboard in a real browser at desktop and mobile widths.\n3. Verify the first view shows total, per-person cost, target status, research date, route, decision completion, and visual current selections.\n4. Change an assumption, a hotel, a transport option, an activity, and a restaurant shortlist. Confirm the total changes only for budget-bearing choices and the decision rail updates immediately.\n5. Compare two or three like-for-like choices and verify the comparison drawer shows their most useful differences.\n6. Exercise image thumbnails, broken-image fallback, reset, browser-local persistence, every itinerary anchor, and every source link.\n7. Confirm no horizontal page overflow at 320px. Print the selected plan and verify it remains legible.\n\n## Required behavior\n\n- The page is one continuous, sectioned workspace; important categories are not hidden behind tabs.\n- Hotel and transport groups are single-choice. Experiences and restaurants support shortlisting. Compare mode is limited to three like-for-like items.\n- Each decision card displays useful context, images, tradeoffs, and practical details before its secondary external link.\n- Editable assumptions and budget-bearing choices recalculate total and per-person cost immediately.\n- Reset restores the audited recommendation. Local persistence is disclosed and recoverable.\n- The itinerary exposes morning, afternoon, evening, transit, practical notes, and scheduled-commitment count.\n- Sources distinguish marketplace, operator/direct, official, and secondary evidence.\n- Unknown critical accessibility or medical links remain **not ready** and are never hidden by presentation.\n- Image credits remain accessible from the item they support.\n- Print styling produces a useful static selected-plan record rather than printing all alternatives indiscriminately.\n\n"},"changes":[],"summary":"First saved snapshot. No earlier version is available for comparison.","summary_kind":"deterministic","summary_metadata":{}}