web-tanstackstart-kids 使用指南
创建、运行、验证、定制主题并扩展儿童向 TanStack Start 模板。
使用指南
创建与运行
npx @cogito.ai/cli init \
--name my-kids-app \
--template web-tanstackstart-kids \
--data-layer sqlite \
--pm pnpm
cd my-kids-app
cp .env.example .env
npx --yes pnpm@12.4.1 install
npx --yes pnpm@12.4.1 dev可追加可选的 Mastra runtime,同时保持儿童 UI 内核不变:
npx @cogito.ai/cli init \
--name my-kids-app \
--template web-tanstackstart-kids \
--data-layer sqlite \
--integrations mastraMastra API 仅运行在服务端并挂载于 /api,不会引入 animal-island-ui、naive-icons、儿童档案存储或默认 memory。生产暴露前必须把生成的 auth hook 替换为明确的授权判断。
模板支持 pnpm >=10.34.5 <13,推荐 12.4.1。生成项目不会写入精确 packageManager pin。
儿童体验
视觉主题和年龄档案是两个独立契约。
kids-sprout、kids-explorer、kids-creator是预编译 Astryx 主题。sprout、explorer、creator解析为语义能力。ChildExperienceProvider选择主题,并通过useChildExperience()暴露能力。- profile cookie 只保存
ageBand.mode,例如explorer.system。
不要在 Feature 中按真实年龄分支。应使用目标尺寸、选项数、阅读支持、动效、引导、确认和超时等能力。
主题开发
主题源码位于 src/components/appearance/themes/。
pnpm theme:build
pnpm theme:check生成后的 .js、.css、.d.ts 和 .variants.d.ts 需要提交并与源码保持一致。不要手工修改生成文件。
组件
对重复出现的儿童语义使用第一方组件:
KidShellKidPageHeaderKidActionCardKidChoiceKidProgressKidStateKidIllustrationKidReadAlongGuardianGate
其他 UI 优先使用 Astryx 组件和语义 token。
安全与隐私
模板默认不包含广告、第三方行为追踪、社交信息流、公开儿童档案、精确年龄、连续签到压力或随机奖励循环。外部链接、购买、敏感请求或重要设置应使用 GuardianGate。
启用 Mastra 后,默认不得把精确年龄、出生日期、儿童 profile 或其他可识别儿童的数据发送给 agent 或 tool。由 UI 触发的外部或重要 agent 动作仍必须经过儿童模板的 guardian 边界。
生成后请阅读模板内的 docs/child-safety.md 与 docs/reference/animal-island-ui.md。
验证
pnpm test
pnpm test:a11y
pnpm theme:check
pnpm assets:check
pnpm boundaries:check
pnpm check-types
pnpm lint
pnpm format:check
pnpm build
pnpm check
pnpm check:fullpnpm check 是标准验收门。pnpm check:full 额外执行视觉回归和包体预算。
添加 Feature
- 在
src/core添加共享类型或仓储契约。 - 创建
src/features/<name>/__contract__.ts。 - 通过
src/features/<name>/index.ts暴露公共 API。 - 数据访问必须位于仓储 provider 之后。
- 在
src/routes/$locale/添加路由。 - 使用 Astryx 原生组件和共享儿童组件组合页面。
- 将用户可见文案加入所有语言 catalog。
- 为年龄能力、可访问性和状态添加测试。
- 完成前运行
pnpm check。
不得 fork Astryx,也不得把 animal-island-ui / naive-icons 作为运行时依赖。