mcpField
L
light-travelpage

light-travelpage

github.com/light-chengProductivity518 installsUpdated 3d ago
Repository

About light-travelpage

Light-TravelPage turns travel materials into a maintained bilingual page for a travel group, with itinerary, navigation, tickets, and shared trip state. It guides preparation, updates, deployment, and verification while keeping uncertain facts visible and protecting private materials.

Key features

  1. 01Chinese and English travel content
  2. 02Itinerary and booking details
  3. 03Place-based map navigation
  4. 04Shared group trip state
  5. 05Deployment and validation checks
  6. 06Optional AI integration

Use cases

  1. 01Preparing a group trip page from supplied materials
  2. 02Updating an existing itinerary without losing edits
  3. 03Sharing trip tasks, tickets, and expenses
  4. 04Checking navigation and deployed page behavior

MCP support

This skill does not describe an MCP server or MCP client. It mentions an optional related capability, light-travelpage-gw, for AI through a self-hosted or local gateway.

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/light-cheng/skills --skill light-travelpage

After installing, type/light-travelpagein Claude Code to confirm it loaded.

Bundled files

References and scripts installed along with SKILL.md.

agents/
openai.yaml
assets/template/
.gitignore
ai-config.js
ai-config.json
ai-ui.js
ai.css
app.js
currencies.js
handbook.css
handbook.js
i18n.js
index.html
ledger.css
ledger.js
LICENSE
map-navigation.js
overview-map.js
package-lock.json
package.json
route-ui.js
runtime-storage.js
assets/template/assets/
ai-panel.html
assets/template/assets/maps/templates/
manifest.json
assets/template/functions/
_middleware.js
assets/template/functions/api/ai/
[[tripId]].js
assets/template/functions/api/trip/
[[tripId]].js
assets/template/migrations/
0001_state.sql
0002_ai_requests.sql
assets/template/scripts/
build-map.mjs
build.mjs

Details

From the project README

Light-TravelPage

Turn travel materials into a maintained page for a travel group. This is a model-invoked capability. The default delivery uses GitHub for code and Cloudflare Pages, Functions and D1 for the website and shared state. Local preview is a development step.

Prepare

Read supplied materials and any existing trip once. Extract confirmed itinerary, dates, places, flights, accommodation bookings, tickets and explicit tasks; collect actual conflicts. Prepare Chinese and English display translations without changing facts; retain local place names and original addresses. For navigation, record each place's country/region and any verified provider links or coordinate system/source. Honor choices already made. Ask only questions needed to resolve a material ambiguity; leave unknown facts visibly pending. Do not invent bookings, coordinates or travel advice to fill the template.

Use data-contract.md when preparing or validating data. Keep a small private source index for conflicting or easily misread dates, times, locations and booking details; do not publish raw documents, extraction notes or local paths.

Before generating a new page, briefly ask whether to enable AI when that choice is still unknown; default to off. Honor an existing choice without asking again. If enabled, read ai-integration.md: the page owner connects any OpenAI- or Anthropic-format API by running scripts/ai-setup.mjs in their own terminal, so the key never enters the conversation; the model is fixed at deployment and travelers cannot change it.

Generate or update

  • New page: run node <skill>/scripts/create.mjs <new-project-directory> (AI off), or append --ai on when authorized. Then fill its trip-data.json and explicitly supplied ticket assets. Use the travel-handbook template and handbook-design.md for chapter layout and typography, unless the user requests a redesign. Enable modules matching the requested content.
  • Existing page: read its current data and runtime/deployment settings first. Prepare a complete next data file preserving the trip ID, unchanged entity IDs, existing map selection and unrelated user edits. Apply it with node <skill>/scripts/update.mjs <project-directory> <next-trip.json>. See update-and-export.md for backup and publication boundaries. Changes to source data do not reset shared runtime state.

Run npm ci, npm run build and npm test in the generated project. PDF ticket builds require pdftoppm; keep the original PDF and deploy the generated same-name PNG preview beside it under the same authentication. Fix invalid facts/references or report the precise unresolved input; do not weaken the validator to produce a green result. Dates may remain null in an explicitly undated draft. For a known destination with verified WGS84 places, source its matching real geographic outline and build with geographic-outline as described in display-and-navigation.md; choose this from the trip facts without asking the traveler to select a map style. Use place navigation links for actual navigation. When geography or a usable boundary is unavailable, report that limit and label any template map as schematic.

Use display-and-navigation.md when preparing bilingual content, flight/stay cards, regional maps or demo fixtures. The UI includes a local Chinese/English preference. Map defaults follow each place: mainland China → Amap, Korea → Kakao, Russia → Yandex, other known regions → Google, with Apple Maps alternatives. Google and Apple searches use readable local names and addresses; coordinates anchor maps or serve as a fallback when no readable place exists. Unknown regions require a service choice. Test actual links; a generated URL alone does not establish successful navigation.

Share and deploy

Read cloud-sync.md for the single-group access and shared-state contract, then follow deployment.md. Reuse existing authorized GitHub/Cloudflare login and scoped resources. Deployment authorization does not permit unrelated account changes. When a login or an essential deployment choice is unavailable, complete the local package and report that exact remaining step; do not call localhost a deployed page.

Private material belongs only in the user's authorized trip and hosting destination. The generated Git ignore excludes trip data and tickets by default; publish them to a code repository only when that destination is explicitly authorized for those materials. Deploy only dist/ with the protected Functions. Group access codes and session secrets are generated securely and passed through local secret tooling, never embedded in the page or committed. Preserve ATTRIBUTION.md and the template license when distributing reused assets.

Verify and deliver

Verify the actual hosted URL, authentication on the page, JSON, ticket assets and API, then two independent sessions: shared member/settings/bill/task/ticket changes, conflict response, failed-save recovery and idempotent retry. Chromium and WebKit can block PDF iframe content in a modal: in a narrow mobile viewport, confirm that the ticket PNG is actually visible inside #ticket-dialog, zoom works, and the original PDF link remains available. Also check both languages, chapter switching, instant daily-page selection, visible daily maps, complete/pending flight and stay cards, itinerary, readable regional navigation and saved expense after refresh. Switching chapters, language and polling must not erase a form draft. Run focused changed-feature tests during updates rather than repeat unrelated checks.

Deliver the live link, repository location, implemented sharing scope, concise verification evidence and any remaining limitations. Provide access material through a protected local file or the user's chosen secure channel. Do not claim deployment, independent review, or synchronization from a build log or mock alone. No booking, payment, new release/tag, or unrelated Skill invocation is implied.

Optional capabilities

  • The owner wants AI through a self-hosted or local gateway (a Tunnel or a loopback address) → call light-travelpage-gw (repository). Not installed → support only an HTTPS API the deployed page can reach, and say so.

Comments

Markdown supported