旅游行程 PWA 生成器

SKILL生活服务
生活服务 未标注权限 许可证不明确
安装这个技能

输入目的地和日期,自动生成可「添加到手机主屏」的离线路程单网页——含实时天气、费用记账、高德/Google Maps 导航、出发前待办;支持本地预览、任意静态托管或 CloudStudio 部署。

一句话选型结论

按资料字段整理

旅游行程 PWA 生成器是生活服务类的 Agent Skill,安装方式未标注,权限级别未标注,许可证不明确,有可直接复制的安装命令。技能本质是给模型读的说明书,效果取决于模型与客户端;装完先用一个小任务验证,再放进正式流程。

分类生活服务 安装方式未标注 权限级别未标注权限 许可证许可证不明确
累计安装 未标注 本周 未标注
GitHub 星标 未标注 仓库 未标注
下载量 未标注 技能市场下载数
权限级别 未标注权限 安装前请确认风险范围
许可证 许可证不明确 未说明

安装

未标注
在支持 Skills 的客户端里执行,装完问一句「你有哪些技能」验证
skillhub install user_91cdd583/trip-planner-pwa
  1. 1
    确认客户端支持

    确认你的客户端支持 Skills(Claude、Codex、Cursor 等),并升级到较新的版本。

  2. 2
    拿到技能文件

    执行上面的命令安装;也可以把仓库里的 SKILL.md 手动放进客户端的 skills 目录。

  3. 3
    刷新技能列表

    重新打开客户端,或刷新技能列表,让新放进来的技能被加载。

  4. 4
    验证是否生效

    问一句「你有哪些技能」,确认列表里出现它,再拿一个小任务试跑。

技能档案

生活服务
字段来自技能仓库与公开索引,中文说明由本站标注
作者 / 维护方user_91cdd583仓库 未标注 · 版本 未标注
宿主客户端未标注技能可被这些客户端加载
安装方式未标注安装包 community
权限级别未标注权限安装前请确认风险范围
许可证未说明许可证不明确,商用前请自行确认条款
仓库可用性available技能仓库当前是否可访问
最近核验未标注上游最后核验时间 · 数据更新 1791717096
正文体量10.3 KBSKILL.md 原文大小,越大说明说明书写得越细

典型使用场景

3 类
按分类整理的常见用法,具体以 SKILL.md 为准
行程与攻略

按目的地和天数排行程。

日常信息查询

查天气、交通、办事信息。

生活事务整理

把琐事整理成清单逐项处理。

选择建议

装之前先看这几条
按条目字段给出的判断,不替你决定用不用

值得选的地方

  • 有可直接复制的安装命令,不用自己翻文档找入口。

先想清楚的地方

  • 没有标注权限级别,实际能做什么要装好后确认。
  • 许可证不明确,商用或二次分发前先到仓库确认条款。
  • 没有做站内核验,内容以作者仓库为准。
  • 技能只是说明书,实际效果取决于模型与客户端,装完先用小任务试一遍。

更适合

  • 需要在生活服务场景里给模型补一套做法的人。
  • 愿意先读一遍 SKILL.md、确认它会让模型做什么的人。

不太适合

  • 对许可证要求很严、必须明确可商用的人。
  • 只想装完就自动变强、不打算看说明书的人。

同类对比

6 个同类
同分类里挑最接近的几条,字段以各自详情页为准
技能权限级别安装方式累计安装宿主客户端安装命令
旅游行程 PWA 生成器当前 未标注权限 未标注 未标注 未标注 有
食谱批量下载文件夹 联网访问 GitHub 仓库 28.5 万 Codex、Claude、Cursor 有
食谱创建演示文稿 未标注权限 GitHub 仓库 28.0 万 Codex、Claude、Cursor 有
recipe 备份 sheet AS CSV 联网访问 GitHub 仓库 27.9 万 Codex、Claude、Cursor 有
recipe create Gmail filter 邮件管理 未标注权限 GitHub 仓库 27.8 万 Codex、Claude、Cursor 有
配方观察驱动器变化 联网访问 GitHub 仓库 27.4 万 Codex、Claude、Cursor 有

SKILL.md 全文

10.3 KB
模型实际读到的说明书原文,来自技能仓库

行程 PWA 生成器

把一次出行变成一个能装到手机主屏的网页 App:离线可用、天气实时刷新、费用记账、导航一键直达。一次生成,全家用、随手看。

适合谁 / 不适合谁

  • ✅ 适合:家庭游 / 亲子游 / 个人出行 / 团队出差,想要一个"不依赖 App、不联网也能看、手机桌面一点就开"的行程页。
  • ✅ 适合:需要把天气、导航、花销、待办集中在一个页面的人。
  • ❌ 不适合:需要多人实时协作编辑、评论、共享相册的复杂场景(那是协作文档的事)。
  • ❌ 不适合:纯文字攻略、不需要手机端随时查看的轻量需求(直接用笔记就够)。

30 秒 Quickstart

  1. 告诉我:去哪、几号到几号、几个人、大交通(航班/车次)、住哪、每天想去哪。
  2. 我在工作区生成 itinerary-<目的地>/(含完整 PWA 文件)。
  3. 本地预览:直接双击 index.html 即可在浏览器看效果(推荐用手机扫码或同局域网访问看真机效果)。
  4. 长期手机访问(可选):部署到任意静态托管 / CloudStudio,拿到一个 https 链接,存书签、加到主屏。

> 想先看成品?看 examples/demo-shanghai/(一个真实上海 3 日游示例,打开即见)。

触发条件

当用户要求为一次出行/旅行/亲子游创建可添加到手机主屏的行程单、行程卡或 PWA 小程序时,使用本 skill。

目标

生成一个纯前端 PWA(HTML + Manifest + Service Worker + 图标),包含:
- 目的地、日期、人员、预算页头
- 大交通(航班/高铁)信息
- 每日行程卡片(天气/穿衣/交通/餐饮/住宿/导航)
- 出发前待办清单(本地存储)
- 费用记账模块(localStorage,已付/预估)
- 实时天气刷新按钮(Open-Meteo 免费接口,无需 key)
- 导航按钮(国内默认高德;海外场景可选 Google Maps,见下方模板)
- 可部署到任意静态托管 / CloudStudio,生成手机可访问链接

必须收集的信息

  1. 目的地、出发日期、返程日期、天数、人员组成。
  2. 大交通:去程/返程航班号或车次、起降时间/车站、票价、是否已订。
  3. 酒店:名称、地址、坐标(经纬度)、价格、是否已付。
  4. 每日安排:景点、餐饮、交通方式、风险等级、注意事项。
  5. 必抢票务/预约提醒(如博物馆提前 N 天放票)。
  6. 预算与已付金额。

> 信息不齐也能先出框架,占位处标注「待补」,后续让智能体回填即可。

输出目录结构

在工作区创建 itinerary-<目的地>/ 目录,包含:
- index.html — 主页面
- manifest.json — PWA 配置
- sw.js — 离线缓存
- icon.svg — Android/通用图标
- icon-512.png — iOS 主屏图标
- gen_icon.py — 生成 PNG 图标的脚本

核心实现要点

1. index.html 结构

  • 主题色默认 #4A3F8F → #6E59C7 蓝紫渐变(可在 manifest/theme_color 中调整)。
  • <head> 中必须包含:
    html <link rel="manifest" href="manifest.json"> <link rel="apple-touch-icon" href="icon-512.png"> <link rel="icon" type="image/svg+xml" href="icon.svg"> <meta name="theme-color" content="#4A3F8F">
  • 页头、航班、置顶待办、每日卡片、费用模块、天气刷新按钮、页脚。
  • 费用模块 JS 模板(localStorage key 带版本,避免冲突):
    javascript const KEY="<destination>_trip_exp_v1"; const DEFAULTS=[ {n:"项目1(已付)",a:0,p:true}, {n:"项目2(预估)",a:0,p:false} ];
  • 天气刷新函数:
    javascript const url="https://api.open-meteo.com/v1/forecast?latitude=<LAT>&longitude=<LNG>"+ "&daily=weather_code,temperature_2m_max,temperature_2m_min,precipitation_probability_max,wind_speed_10m_max"+ "&timezone=Asia%2FShanghai&start_date=<YYYY-MM-DD>&end_date=<YYYY-MM-DD>";
    关键坑:forecast_days 与 start_date/end_date 互斥,绝对不能同时传。
  • 导航按钮(国内默认高德,海外用 Google Maps):
    html <!-- 高德(中国场景默认) --> <a href="https://uri.amap.com/marker?position=<LNG>,<LAT>&name=<NAME>&src=sh&coordinate=gaode&callnative=1">高德导航</a> <!-- Google Maps(海外场景备选,query 顺序是 LAT,LNG 纬度在前) --> <a href="https://www.google.com/maps/search/?api=1&query=<LAT>,<LNG>">Google 导航</a>
    > 二选一展示即可;若目的地在中国大陆用高德,海外用 Google Maps,避免给用户一个用不了的链接。

2. manifest.json

{
  "name": "<目的地>亲子游 · <日期>",
  "short_name": "<目的地>",
  "start_url": ".",
  "scope": ".",
  "display": "standalone",
  "background_color": "#F3F1FA",
  "theme_color": "#4A3F8F",
  "icons": [
    {"src": "icon.svg", "sizes": "any", "type": "image/svg+xml", "purpose": "any maskable"},
    {"src": "icon-512.png", "sizes": "512x512", "type": "image/png"}
  ]
}

3. sw.js

const CACHE = '<destination>-trip-v1';
const FILES = ['./', './index.html', './manifest.json', './icon.svg', './icon-512.png'];

self.addEventListener('install', event => {
  event.waitUntil(caches.open(CACHE).then(c => c.addAll(FILES)).then(() => self.skipWaiting()));
});

self.addEventListener('activate', event => {
  event.waitUntil(
    caches.keys().then(keys => Promise.all(keys.filter(k => k !== CACHE).map(k => caches.delete(k))))
      .then(() => self.clients.claim())
  );
});

self.addEventListener('fetch', event => {
  if (event.request.method !== 'GET') return;
  const url = new URL(event.request.url);

  // 实时天气接口直接放行,不缓存
  if (url.hostname === 'api.open-meteo.com') {
    event.respondWith(fetch(event.request));
    return;
  }

  // 同域资源:网络优先
  if (url.origin === self.location.origin) {
    event.respondWith(
      fetch(event.request).then(resp => {
        if (resp && resp.status === 200) {
          const copy = resp.clone();
          caches.open(CACHE).then(c => c.put(event.request, copy));
        }
        return resp;
      }).catch(() => caches.match(event.request))
    );
    return;
  }

  // 其它外域:缓存优先
  event.respondWith(
    caches.match(event.request).then(cached =>
      cached || fetch(event.request).then(resp => resp)
    )
  );
});

4. 图标

  • 复用本 skill assets/ 下的 icon.svg 和 gen_icon.py。
  • 如需体现目的地特色,编辑 SVG 中的白色图形(如东方明珠、山水等)。
  • 生成 PNG:python gen_icon.py → 输出 icon-512.png。
  • PNG 背景应不透明,避免 iOS 主屏补黑底。

5. 部署(三种方式任选,不强制)

  • 方式 A · 本地预览(最快):直接双击 index.html 用浏览器打开即可查看内容与交互。注意 file:// 下 Service Worker / PWA 安装不生效,但页面本身可看——适合先确认效果。
  • 方式 B · 任意静态托管(推荐长期用):把整个 itinerary-<目的地>/ 目录传到任意支持静态文件的服务器(Nginx、GitHub Pages、Vercel、Netlify、对象存储、内网服务器均可)。访问其 https 链接即可,PWA 安装与离线缓存需 https 或 localhost。
  • 方式 C · WorkBuddy CloudStudio 一键部署(零运维首选):
    bash workbuddy_cloudstudio_deploy --directory <path>/itinerary-<目的地> --entry index.html --port 3000
    返回 share link 即手机访问地址。每次更新后重新运行该命令。管理入口:设置 - 数据管理 - 我发布的应用。

更新与缓存

  • 每次发布修改后,必须递增 sw.js 中的 CACHE 名称(如 v1→v2),强制浏览器安装新版。
  • 若用户反馈"页面没更新",提示重新打开一次链接(或删除主屏图标重新添加,iOS 会缓存图标)。

常见坑

  • Open-Meteo 的 forecast_days 与 start_date/end_date 不能同时用,否则返回 400。
  • iOS 添加到主屏必须提供 PNG 的 apple-touch-icon,SVG 主屏图标不被支持。
  • Service Worker 不能把跨域天气请求缓存优先,否则刷新会拿到旧数据;要对 api.open-meteo.com 直接放行。
  • 高德 position= 是 LNG,LAT(经度,纬度),Google Maps query= 是 LAT,LNG(纬度,经度),两者顺序相反,别填反。
  • 高德在中国大陆可用,海外(如日本/欧洲)应使用 Google Maps,否则导航链接打不开。

执行步骤

  1. 确认用户出行信息完整,按"必须收集的信息"逐项补齐(不齐可先出框架占位)。
  2. 在工作区创建 itinerary-<目的地>/ 目录。
  3. 复制本 skill assets/ 下的 icon.svg、gen_icon.py 到目录。
  4. 编写 index.html、manifest.json、sw.js(注意替换所有占位符,导航按目的地选高德或 Google Maps)。
  5. 运行 gen_icon.py 生成 icon-512.png。
  6. 可选部署:按用户需求选方式 A/B/C(见上方部署章节),返回链接即可。

示例

  • examples/demo-shanghai/:一个真实上海 3 日游的完整示例 PWA,打开 index.html 即可预览效果,可直接截图作为展示素材,也可照抄其结构。

搜索关键词

行程 / 旅游 / 出行 / 游记 / 攻略 / 行程单 / 行程卡 / PWA / 手机主屏 / 离线网页 / 天气刷新 / 导航 / 费用记账 / 亲子游 / 家庭游 / itinerary / travel / PWA

常见问题

5 问
答案由本站依据条目字段整理
旅游行程 PWA 生成器怎么安装?

在支持 Skills 的客户端里执行:skillhub install user_91cdd583/trip-planner-pwa。安装方式为未标注。装完刷新技能列表或重开客户端。

旅游行程 PWA 生成器支持哪些客户端?

资料没有标注宿主客户端,但只要客户端支持 Skills(Claude、Codex、Cursor 等),一般都能加载。

旅游行程 PWA 生成器权限高吗,安全吗?

权限级别为未标注权限。安装前先看它会读取或写入哪些内容。

旅游行程 PWA 生成器收费吗?

本站不代收费用,也没有标注具体价格。是否收费取决于技能本身和所用的模型或客户端,正式使用前按作者说明确认。

旅游行程 PWA 生成器用什么许可证?

许可证标注为 未说明(许可证不明确)。商用或二次分发前请到仓库确认条款原文。

热门专题

按场景挑技能
全部专题 →

技能内容以作者仓库为准;分类、权限级别与许可证状态的中文说明为中文整理,最近核验 未标注。