generate-tour-report
О программе
Этот навык создает комплексные отчеты о турах в виде самодостаточных HTML/PDF документов с использованием Quarto. Он формирует детализированные маршруты со встроенными картами, таблицами логистики и сведениями о проживании/транспорте для офлайн-использования в путешествиях. Используйте его при составлении планов поездок, создании офлайн-гидов, документировании путешествий или подготовке профессиональных туристических предложений.
Быстрая установка
Claude Code
Рекомендуетсяnpx skills add pjt222/agent-almanac -a claude-code/plugin add https://github.com/pjt222/agent-almanacgit clone https://github.com/pjt222/agent-almanac.git ~/.claude/skills/generate-tour-reportСкопируйте и вставьте эту команду в Claude Code для установки этого навыка
Документация
Generate Tour Report
Formatted tour report w/ maps, daily itineraries, logistics, travel info.
Use When
- Compile planned tour → shareable doc
- Offline travel guide
- Completed trip w/ photos, maps, stats
- Pro tour proposal
- Consolidate route + accom + transport
In
- Required: route data (waypoints, legs, distances, times)
- Required: dates + duration
- Optional: accom (name, address, conf#)
- Optional: transport (flights, trains, car)
- Optional: GPX tracks / spatial data
- Optional: budget info
- Optional: photos / images
Do
Step 1: Compile route + POI data
Data Sources to Compile:
┌────────────────────┬──────────────────────────────────────────┐
│ Category │ Required Fields │
├────────────────────┼──────────────────────────────────────────┤
│ Route legs │ From, To, distance_km, time_hrs, mode │
│ Waypoints │ Name, lat, lon, arrival, departure, notes│
│ Accommodation │ Name, address, check-in/out, cost, conf#│
│ Transport │ Type, operator, depart, arrive, ref# │
│ Activities │ Name, time, duration, cost, booking_req │
│ Emergency contacts │ Local emergency #, embassy, insurance │
│ POIs │ Name, category, lat, lon, description │
└────────────────────┴──────────────────────────────────────────┘
Organize by day:
- Group waypoints + activities by date
- Assign transport leg to day
- Match accom to overnight dates
- Daily totals (distance, time, cost)
→ Complete collection by day, no gaps (every night = accom, every leg = transport).
If err: incomplete → [TBD] placeholders + follow-up checklist. Dates misalign → flag + adjust.
Step 2: Structure daily sections
---
title: "Tour Name: Region/Country"
subtitle: "Date Range"
author: "Planner Name"
date: today
format:
html:
toc: true
toc-depth: 3
theme: cosmo
self-contained: true
code-fold: true
pdf:
documentclass: article
geometry: margin=2cm
toc: true
execute:
echo: false
warning: false
message: false
---
Structure:
Report Structure:
1. Overview
- Tour summary (dates, total distance, highlights)
- Overview map (all waypoints, full route)
- Quick reference table (key dates, bookings, contacts)
2. Day 1: [Title]
- Day summary (start, end, km, hours)
- Route map for the day
- Timeline / schedule table
- Accommodation details
- POIs and activities
3. Day 2: [Title]
... (repeat for each day)
N. Logistics Appendix
- Full accommodation table
- Transport bookings table
- Packing checklist
- Emergency contacts
- Budget summary
→ Complete .qmd skeleton w/ YAML + H2 headings + placeholders.
If err: >14 days → split weekly or tabset. PDF → no interactive widgets (static maps).
Step 3: Embed maps + charts
Overview map:
#| label: fig-overview-map
#| fig-cap: "Tour overview with all stops"
leaflet::leaflet() |>
leaflet::addProviderTiles("OpenTopoMap") |>
leaflet::addPolylines(data = full_route, color = "#2563eb", weight = 3) |>
leaflet::addMarkers(data = stops, popup = ~paste(name, "<br>", date))
Daily route map:
#| label: fig-day1-map
#| fig-cap: "Day 1 route: City A to City B"
day1_route <- full_route[full_route$day == 1, ]
leaflet::leaflet() |>
leaflet::addProviderTiles("OpenStreetMap") |>
leaflet::addPolylines(data = day1_route, color = "#2563eb", weight = 4) |>
leaflet::addCircleMarkers(data = day1_stops, radius = 6, popup = ~name)
Elevation profile (hike/cycle):
#| label: fig-day3-elevation
#| fig-cap: "Day 3 elevation profile"
ggplot2::ggplot(day3_elevation, ggplot2::aes(x = dist_km, y = elev_m)) +
ggplot2::geom_area(fill = "#bfdbfe", alpha = 0.5) +
ggplot2::geom_line(color = "#1d4ed8", linewidth = 0.7) +
ggplot2::theme_minimal() +
ggplot2::labs(x = "Distance (km)", y = "Elevation (m)")
→ Each day ≥ route map. Multi-modal = road + elevation. Overview = full tour map.
If err: leaflet fails PDF → fallback tmap::tmap_mode("plot") or ggplot2 + ggspatial::annotation_map_tile(). No spatial → text description.
Step 4: Logistics tables
Accommodation:
| Night | Date | Accommodation | Address | Check-in | Cost | Conf# |
|-------|------------|--------------------|--------------------|----------|--------|-------|
| 1 | 2025-07-01 | Hotel Alpine | Bergstrasse 12 | 15:00 | EUR 95 | AB123 |
| 2 | 2025-07-02 | Mountain Hut | Zugspitze Huette | 16:00 | EUR 45 | -- |
| 3 | 2025-07-03 | Pension Edelweiss | Dorfplatz 3 | 14:00 | EUR 72 | CD456 |
Transport:
| Date | Type | From | To | Depart | Arrive | Ref# |
|------------|-------|---------------|---------------|--------|--------|--------|
| 2025-07-01 | Train | Munich Hbf | Garmisch | 08:15 | 09:32 | DB1234 |
| 2025-07-03 | Bus | Zugspitze | Ehrwald | 10:00 | 10:25 | -- |
| 2025-07-04 | Train | Innsbruck | Munich Hbf | 16:45 | 18:30 | OBB567 |
Budget:
| Category | Estimated | Actual | Notes |
|-----------------|-----------|--------|-------------------------|
| Accommodation | EUR 212 | | 3 nights |
| Transport | EUR 85 | | Rail passes recommended |
| Food | EUR 150 | | EUR 50/day estimate |
| Activities | EUR 60 | | Cable car, museum |
| **Total** | **EUR 507** | | |
→ Complete logistics tables chronological, no missing dates, totals correct.
If err: unconfirmed → [TBD] + highlight row. Multi-currency → add column + footnote exchange rates.
Step 5: Render
# Render to self-contained HTML (best for offline use)
quarto render tour-report.qmd --to html
# Render to PDF (for printing)
quarto render tour-report.qmd --to pdf
# Preview with live reload during editing
quarto preview tour-report.qmd
Post-render checks:
- HTML opens, maps load
- TOC links work
- Images + charts render right sizes
- Self-contained HTML offline (disconnect + reload)
- PDF → page breaks logical (between days)
→ Complete self-contained doc, offline, navigable.
If err: render fails → check R console pkg errors (sf, leaflet, ggplot2). HTML >20 MB → reduce tile res or PNG screenshots. PDF LaTeX fail → quarto install tinytex.
Check
- Renders no err in target format
- Overview map = full route + stops
- Each day has route map + schedule
- Accom table = every night
- Transport table = all legs
- Budget totals accurate
- Self-contained HTML offline
- TOC navigates correctly
- No
[TBD](or intentionally flagged)
Traps
- Interactive maps in PDF: leaflet/widgets no render PDF. Provide static alternative.
- Oversized HTML: many tiles → huge file. Limit zoom or PNG screenshots.
- Missing TZ: international crosses TZ. Always specify depart/arrive TZ.
- Stale bookings: conf#/times change. "Last updated" date + remind verify.
- No offline fallback: web-tile maps → blank offline.
self-contained: trueor pre-render. - Inconsistent date fmt: ISO 8601 (YYYY-MM-DD) throughout.
→
plan-tour-route— route data fed into reportcreate-spatial-visualization— maps + chartscreate-quarto-report— general Quartoplan-hiking-tour— hiking-specific datacheck-hiking-gear— packing checklists
GitHub репозиторий
Похожие навыки
content-collections
МетаЭтот навык предоставляет проверенную в продакшене настройку для Content Collections — TypeScript-ориентированного инструмента, который преобразует файлы Markdown/MDX в типобезопасные коллекции данных с валидацией Zod. Используйте его при создании блогов, сайтов документации или контентных приложений на Vite + React для обеспечения типобезопасности и автоматической проверки содержимого. Он охватывает всё: от настройки плагина Vite и компиляции MDX до оптимизации развертывания и валидации схем.
polymarket
МетаЭтот навык позволяет разработчикам создавать приложения на платформе прогнозных рынков Polymarket, включая интеграцию с API для торговли и получения рыночных данных. Он также обеспечивает потоковую передачу данных в реальном времени через WebSocket для отслеживания текущих сделок и рыночной активности. Используйте его для реализации торговых стратегий или создания инструментов, обрабатывающих обновления рынка в реальном времени.
creating-opencode-plugins
МетаЭтот навык помогает разработчикам создавать плагины OpenCode, которые подключаются к более чем 25 типам событий, таким как команды, файлы и операции LSP. Он предоставляет структуру плагина, спецификации API событий и шаблоны реализации для модулей на JavaScript/TypeScript. Используйте его, когда вам нужно перехватывать, отслеживать или расширять жизненный цикл ассистента OpenCode AI с помощью пользовательской событийно-ориентированной логики.
sglang
МетаSGLang — это высокопроизводительный фреймворк для обслуживания больших языковых моделей (LLM), специализирующийся на быстрой структурированной генерации JSON, regex и рабочих процессов агентов с использованием кэширования префиксов RadixAttention. Он обеспечивает значительно более высокую скорость вывода, особенно для задач с повторяющимися префиксами, что делает его идеальным для сложных структурированных результатов и многократных диалогов. Выбирайте SGLang вместо альтернатив, таких как vLLM, когда вам требуется ограниченное декодирование или вы создаете приложения с интенсивным совместным использованием префиксов.
