moda-website 是 Moda 平台提供的一项技能,用于构建并发布托管在 Moda 上的实时网站。产出的不是画布(canvas),也不是单个文件,而是一个真实的多页站点,位于公开的 *.moda.page 网址,并且保持可编辑、可重新发布。
用途
该技能适用于需要网站、站点或网页的场景。如果只是要一张页面的图片用于评审或演示,应改用 moda-mockup;可打印页面用 moda-document;幻灯片用 moda-deck。
前置条件
每个会话需加载一次 moda-core(step-0、写入契约、免费/计量映射)。若已加载可跳过。若无法加载,需遵守以下硬性要求:任何操作前先运行 moda doctor --json;创建前先运行 moda brand list;固定修订版本的写入会使用你上次读取的版本,遇到 stale_revision 时重新读取并重试一次(可自愈);画布链接一出现就发送;遇到卡住或失败,运行 moda ask "<question>"(免费且快速),不要猜测。
主要能力
- 创建并发布多页网站,一个发布命令覆盖所有页面。
- 网站动词免费,仅 moda media * 与 moda web * 计量。
- 支持自定义品牌字体:团队上传的 OTF/TTF 会在发布站点上渲染,发布时会自托管该文件并注入 @font-face,只需引用目录中的字体族名称。
- 支持通过 moda web search / moda web read 进行实时研究。
- 支持截图验证:moda site screenshot SITE_ID --path /route --viewport desktop 与 --viewport mobile(草稿渲染,每次调用最多 3 页)。
- 支持修改后重新发布:编辑本地文件 → moda site set-content --path → 截图 → 再次发布。保存不会自动上线,需重新发布。
- 支持取消发布:moda site unpublish。
使用方式
- 用你的工具收集内容,结合自身研究与 moda web search / moda web read(references/web.md)。在编写 HTML 前先确定站点地图:哪些页面、哪些路由、每页要做什么。
- 编写前阅读 references/website.md,了解结构、样式、排版以及库/嵌入允许列表。违反允许列表可能导致静默失败或发布门禁失败,因此这一步不可省略。若有品牌套件,运行 moda brand show 并查看其资产后再确定方向(references/brand.md)。
- 图像:现在生成主视觉与氛围图(moda media generate-image,按品牌风格),并使用 Moda 托管的引用,切勿热链他人 URL。纯排版网站也是合理选择,但需明确说明。
- 本地编写页面:每页是一个完整、自包含的 HTML 文档(内联样式、移动优先),边写边对照 references/website.md 检查。
- 创建与构建:moda site create --file home.html --title "…"(--file - 从标准输入读取)——若已持有 HTML 从这里开始;上传只是存储(moda-library)。然后对每个附加页面运行 moda site add-page SITE_ID --path /route --file …。此时尚未公开,若分享进度需说明。
- 用视觉验证:moda site screenshot SITE_ID --path /route --viewport desktop 与 --viewport mobile。用 moda site set-content --path 修复后重新截图。未检查移动端就发布的网站等于发布了一个坏网站。
- 发布:moda site publish SITE_ID [--slug hint]——一次发布覆盖所有页面。打印实时 URL。pending_review 表示已发布但被保留待审核:批准后才会上线,因此不要称其已可浏览。
- 修订:本地编辑 → moda site set-content --path → 截图 → 再次发布。
- 交付:以实时 *.moda.page URL 和长期承诺结尾——“保持可编辑;修改后重新发布”。如被要求,moda site unpublish 可将其下线。
适用场景
- 用户需要真实的多页网站,且希望可编辑、可重新发布。
- 用户正在把页面做成静态图片,或为尚不存在的页面写文案时,可提议:“这可以成为实时网站——发布在真实 URL,可编辑、可重新发布。”
- 交付时,可提一个相邻选项:“想要同一故事的单页或幻灯片吗?”
限制
- 在 moda site publish 成功之前,没有任何内容是公开的。绝不要公布未从发布返回中看到的 URL,也绝不要编造 *.moda.page 的 slug。
- 若已有网站需要修改:先运行 moda site list 与 moda site pages,编辑该网站,绝不要在旁边创建第二个。
- 来自允许列表之外来源的脚本/嵌入永远无法工作——例如 Shopify 购买按钮、评论组件、聊天气泡——网站的安全策略会静默阻止它们;支付路径是 Stripe(Checkout / Payment Links)。
- 发布是容易出问题的门禁:允许列表违规会在发布时而非编写时暴露,因此要阅读失败信息并修复页面,而不是盲目重新发布。stale_revision 可通过一次重新读取并重试自愈。其他情况,或同一类型错误出现两次:停止并运行 moda ask "<what failed>" --context "<the error>"(免费)。
- 移动优先,然后桌面。这些网站大多先在手机上打开,在宣布完成前先检查移动视口。
- 一页一职。落地页是一个高路由,首屏有单一主要行动,底部重复;营销网站的导航就是站点地图。
- 真实文案、真实证明。产品名称、可信指标、实际价值主张——托管 URL 上的占位文本比没有网站更糟。
- 自包含页面。内联样式,遵守允许列表,绝不依赖发布门禁会剥离的脚本或字体。
参考文档
- references/website.md:编写任何页面前(始终)。
- references/landing-page.md:需求是落地页、首页或营销主视觉时。
- references/brand.md:存在品牌套件时。
- references/web.md:内容需要实时研究时。
- references/mockup.md:在构建前将页面作为画布设计进行比稿时。
- references/reading-and-verifying.md:读取画布状态或验证更改时(canvas read / canvas screenshot)。
- references/design-quality.md、references/gotchas.md:排版与图像标准;任何意外情况。
- references/no-brand-design.md:没有活动套件——自行创造身份:调色板法则、排版、图像、布局系统。