1. 第 1 天本地预检
pnpm listen-pick:preflight证明:终端以“Listen & Pick Day 1 local preflight OK”结束,并且没有部署、R2 上传、线上冒烟、结账、账号门槛或邀请发送动作。
未完成前阻断:不要部署、不要复制第 1 天邀请,也不要上传课程媒体。
一份用试用家庭验证低摩擦听力习惯的产品计划。
收集 7 天证据:至少完成 5 次练习、比现有工具更快开始,并且至少 1 个家庭认为它可以成为主要练习方式。
推荐下一批先做第 6-10 天家庭日常扩展,只在试用证据和资产 dry-run 通过后,把试听包从 5 天扩到 10 天。
只有在看到重复使用后,再加入孩子档案、跨设备进度和家长看板。
用等待名单、联系页面、本地试用日志和仅浏览器保存的家庭准备度追踪,把口头兴趣转成真实的 7 天家庭使用行为。
继续把部署放在 GitHub Actions 外,手动验证 Worker 资源,并在每次试用发布前运行第 1 天本地预检。
首页和 /play 已经可以免登录打开,用 5 天本地优先练习流完成一句英文、两张图的核心体验。
孩子昵称、当前天数、复习模式、跟读开关和语速都会保存在本地,刷新后能继续。
结果页现在会把练习天数和到第一句英文的秒数预填到试用日志,同时家长记录仍然只保存在本机,除非主动分享。
首轮试用发布继续保持手动、以证据为准:先运行第 1 天本地预检,通过 Wrangler 发布,再用 live smoke 命令检查公开 workers.dev 地址后才把第 1 天发给家庭。
用这份运行清单从本地预检推进到手动部署、线上冒烟和 waitlist 发送门禁,避免临场判断下一步能不能做。
pnpm listen-pick:preflight证明:终端以“Listen & Pick Day 1 local preflight OK”结束,并且没有部署、R2 上传、线上冒烟、结账、账号门槛或邀请发送动作。
未完成前阻断:不要部署、不要复制第 1 天邀请,也不要上传课程媒体。
pnpm deploy证明:Wrangler 部署到目标 Worker 成功,并输出已部署的 workers.dev 路径。
未完成前阻断:不要对旧构建跑线上冒烟,也不要发送第 1 天。
pnpm listen-pick:smoke:live证明:命令通过 /、/play?day=1&start=1、/pilot-log、/waitlist、对应 /zh 本地化路径和 /api/ping。
未完成前阻断:不要复制或发送第 1 天邀请。
Open /waitlist证明:追踪器显示 3 个可邀请家庭,并且浏览器本地第 1 天发送检查已勾选本地预检和线上冒烟。
未完成前阻断:继续招募或补完缺失发布检查后,才能复制邀请。
Copy Day 1 invite from /waitlist证明:先复制准备报告;邀请里包含练习链接、试用日志链接、每日记录提示和儿童隐私边界。
未完成前阻断:第 1-5 天日志回来前,不要把发送视为课程验证完成。
发布前运行 pnpm listen-pick:preflight。它会顺序执行配置审计、Biome、locale 检查、公开壳隐私契约、法律页隐私边界契约、联系反馈安全契约、关于页产品论点契约、练习实验室契约、公开内容契约、公开 footer 试用路径契约、变现边界契约、账号边界契约、pnpm listen-pick:settings-boundary-contract、pnpm listen-pick:curriculum-expansion-contract、pnpm listen-pick:repeat-entry-contract、pnpm listen-pick:manifest-contract、覆盖 sitemap 和 robots 的 pnpm listen-pick:seo-contract、启动契约、pnpm listen-pick:assets-contract、资产 dry-run、证据/日志/邀请契约、pnpm listen-pick:live-smoke-contract、locale 编译和生产构建,不会部署、上传资产、开放结账、扩展课程、运行线上冒烟或要求先注册再练习。
试用发布前运行 pnpm cf:launch:check,清掉 Worker、D1、R2、环境变量和域名相关阻断项。
运行 pnpm listen-pick:assets-contract 和 pnpm listen-pick:assets,并确认没有缺失引用后,才考虑 R2 上传或发送公开试用链接。只有 Cloudflare token scope 检查通过且明确需要复制到 R2 时,才运行 pnpm listen-pick:assets:upload -- --confirm-token-scope。
先在本地运行 pnpm build,确认 TanStack Start Worker bundle 通过后,再执行 pnpm deploy。
部署后先在 workers.dev 地址打开 /、/play?day=1&start=1、/pilot-log、/waitlist、对应的 /zh 本地化路径和 /api/ping,再邀请家庭试用。
pnpm listen-pick:preflightpnpm deploypnpm listen-pick:smoke:live部署后、发送第 1 天邀请前,在 workers.dev 地址运行 pnpm listen-pick:smoke:live。它覆盖家庭实际会用到的英文和 /zh 公开试用路径。
HTTP 200,可见第 1 天入口,匿名家庭练习前不出现登录/注册门槛。
HTTP 200,可见第一道听力题,再听/继续控件可用。
HTTP 200,本地每日摩擦日志表单和隐私边界正常渲染。
HTTP 200,试用同意表单、第 1 天邀请复制和家庭准备度追踪正常渲染。
HTTP 200 JSON 响应:{ "message": "pong" }。
路线图只负责说明。复制第 1 天邀请前,仍需要发布负责人确认真实本地和线上证据。
每个家庭都在本地记录了 4-6 岁匹配、7 天家长带练约定和每日摩擦日志约定。
这个勾选代表手动部署前真实通过了 pnpm listen-pick:preflight。
这个勾选代表部署后英文和 /zh 公开路径真实通过了 pnpm listen-pick:smoke:live。
报告让发布负责人一次看到家庭、本地预检、线上冒烟、公开路径和隐私证据。
本地预检只是发布门禁;线上检查和家庭发送都保持人工执行。
公开试听包继续保持 5 天;等试用证据和资产 dry-run 通过后,下一批先准备 Days 6-10 家庭日常扩展。暂时不直接跳到 Levels 1-20 或完整 100 关。
推荐下一批内容
新增 5 天 · 15 道题 · 每天一个熟悉家庭场景
它延续现有习惯,不改变产品形态:仍然是短练习、两张图选择,同时让家长看到试听包可以自然扩成课程。
扩展发布状态
在试听包拿到真实家庭证据、扩展资产 dry-run 通过前,第 6-10 天只保持在规划状态。
发布边界
此时不要发布 Days 6-10,也不要上传 R2。
在课程扩展契约和扩展资产 dry-run 都通过前,第 6-10 天继续保持待办。
pnpm listen-pick:curriculum-expansion-contractpnpm listen-pick:assets新增 5 天 · 15 道题 · 每天一个熟悉家庭场景
它延续现有习惯,不改变产品形态:仍然是短练习、两张图选择,同时让家长看到试听包可以自然扩成课程。
20 关 · 更大的媒体包 · 更强课程感
它能增强课程深度信任,但在 5 天行为被证明前,资产和 QA 成本太高。
完整课程库 · R2 优先媒体方案 · 长 QA 周期
完整课程库会把团队重新拉回平台建设,而我们还没证明家庭第二天会回来。
至少 3 个家长带练家庭已经准备试用公开版本,并愿意分享每日摩擦记录。
用 7 天日志确认家长是否真的需要相邻内容,而不是更重的账号功能。
扩包或 R2 上传前,必须运行资产同步 dry-run,并且没有缺失引用。
当前版本刻意保持很窄:打开第一天,听一句英文,选一张图,然后观察真实家庭里这个习惯能不能留下来。