【学习工作赛道】探字星球——复赛升级:从JS Demo到TypeScript工程化,500汉字星际识字App的全面进化
【标签】 学习工作 社会公益
参赛信息
| 字段 | 内容 |
|---|---|
| 参赛赛道 | TRAE AI 创造力大赛 · 学习工作(融合教育普惠社会公益方向) |
| 作品类型 | 移动端 Web 应用(H5 + 微信小程序 WebView) |
| 初赛帖 | 【学习工作赛道】探字星球——AI 把每个汉字变成一颗会讲故事的星球,让 3-6 岁孩子在星际探险中自然识字 |
| 在线体验 | https://tzxq.e8so.com/ |
| 在线体验(备用) | http://fusai.tzxq.e8so.com/ |
| 项目使用文档 | https://doc.tzxq.e8so.com/ |
各位评委、大家好!我是探字星球的开发者。
初赛阶段,我以"让 3-8 岁孩子在星际探险中自然识字"为初心,用 TRAE Work Auto 模式完成了一个包含 3D 星球、手写识别、字源演变、游戏化成就的汉字学习 Demo。
进入复赛,我结合初赛暴露的工程化短板、用户体验细节缺陷与代码质量问题,对项目进行了从 JavaScript 到 TypeScript 的完整迁移、Mock API 架构搭建、23 个页面 UI 全面重构、3 款游戏深度优化、组件化重构、VitePress 文档站点建设、测试体系搭建等九大维度升级。
探字星球现已从初赛的演示 Demo,迭代为具备完整用户路径、工程级代码质量、完整文档和测试体系的正式作品。
开发者介绍
拥有多年 Web 开发经验,精通后端架构设计、数据库优化与高性能缓存体系搭建,同时深耕 AI 产品领域,熟悉 AI 产品全生命周期管理,能够结合技术背景实现 AI 产品从需求拆解到落地迭代的全流程把控,兼具技术深度与产品思维,擅长技术与业务的融合落地。
正是这样的技术背景,让我能够跨越前端与 AI 协作的边界,用 TRAE 把"让每个孩子都认好字"的想法,从一颗灵感的种子逐步打磨成可运行、可维护、可落地的正式作品。
在线快速体验
扫码快速体验小程序完整功能
移动端测试app
移动端测试app功能完整,但没备案,需要用户手动安装。
通过百度网盘分享地址可以下载探字星球测试app:链接: 百度网盘 请输入提取码 提取码: ssvh
| 平台 | app文件名 |
|---|---|
| 安卓 | tzxq-debug.apk |
视频介绍
视频在抖音平台发布,共计9个短视频,平均每条不到1分钟,通过视频可以快速了解项目!
抖音视频合集
抖音分集视频
从上述 探字星球视频介绍合集 拆分的9个短视频。
一、产品简介
每个模块都有文字简介和对应的截图和视频讲解,帮我大家快速了解探字星球的功能和使用方法。
1. 项目概览
探字星球,一个专门给 3 到 8 岁小朋友学汉字的应用。里面精选了 500 个常用字,孩子边玩边学,认字、写字、懂字,一个都不落下。打开就能用,特别方便。
2. 汉字星际
汉字星际是孩子平时学字的主要地方。500 个字分成了六大类,比如自然、动物、身体这些主题,找起来很方便。
要是想直接找某个字,还能用搜索功能,可以按汉字搜,也可以按拼音搜,拼音还支持全拼模式,想找哪个字一搜就到。
随便点开一个字,拼音、部首、多少画,全都有,还能听发音、看这个字是怎么演变来的,孩子不光认字,还知道字背后的故事。
注意:必须先完成
字源演变才能点击按钮进入汉字练习页面
3. 书写练习
孩子学完字得练写。书写练习有三个入口,想全练、想练某一类、或者专练错得多的,都行。
孩子可以用手指,也可以用平板手写笔跟着描红,一笔一画地写。
写完系统马上打分,告诉你写得怎么样、用了多长时间,帮孩子把字越写越好。
4. 复习系统
学过的字容易忘,复习系统就是帮孩子记牢的。
它会按照遗忘规律,在 1 天、3 天、7 天、15 天、30 天这些时间点提醒孩子复习。
每次复习三步:先认、再写、最后看字源,一步一步来,学过的字就不容易忘了。
5. 星球地图
星球地图特别好玩,用 3D 画面展示六颗主题星球,孩子可以转着看、点进去逛。
每颗星球里有好几个系列,做完一个自动解锁下一个,就跟闯关一样,孩子特别有动力往下学。
6. 汉字游戏
三款汉字游戏寓教于乐:象形配对(限时配对古今文字)、拼图闯关(笔画拼块组字)、汉字消消乐(连连消得分)。
7. 象形配对
象形配对是个限时小游戏,指定时间内把古文字和现代汉字配到一块,达到一定错误次数游戏就失败。游戏里有2个道具可以帮忙:
- 消除:能直接配对指定的古汉字
- 冻结:能让时间暂停
孩子玩起来又紧张又上瘾,还能记住字源!
8. 拼图闯关
拼图闯关让孩子用笔画拼块把字拼出来,达到一定错误次数游戏就失败,不过有 提示 和 跳过 道具可以救场。一共10关,从简单到难,孩子在拼拼凑凑中就熟悉了汉字的结构。
9. 汉字消消乐
汉字消消乐跟开心消消乐差不多,7 乘 7 的棋盘,连着消汉字来得分。每关玩法不一样,有的要砸冰块、有的要收集指定的字、有的要冲分数,还有4种道具帮你过关,特别考验策略。
10. 成就段位
孩子学字、玩游戏都能攒经验,经验够了就升段。一共5个大段位,青铜、白银、黄金、铂金、王者,每段又分10小段,总共50段。还有徽章墙记录各种成就,孩子看着自己一段段往上升,越学越来劲。
11. 商店奖励
孩子学到的积分可以攒着去商店换奖励。
商店奖品由家长自由填写,孩子当面跟家长兑换。每笔兑换都有记录,家长随时能看,花多少分、换了啥,清清楚楚。
防止孩子乱点,设置奖品需要家长 设置并输入密码 后才能进入到家长管理页面(设置奖品的页面)。
12. 设置与个人
个人中心一眼就能看到孩子的段位、徽章和积分情况。设置里能改资料、能手动管星球的解锁,也可以重置学习数据。所有数据都存在本地,不用登录、省心。
墨水屏模式
墨水屏模式专为儿童护眼设计,开启后界面切换为黑灰白三色、移除所有动画与 3D 特效,减少视觉刺激、降低 GPU 消耗。手动在设置页开启,安卓系统开启灰度模式时也会自动激活。
二、产品定位与核心亮点
2.1 产品定位
探字星球是一款专为 3-8 岁儿童设计的汉字学习应用,通过「星球探索」主题和游戏化玩法,让孩子在趣味互动中认识 500 个精选汉字。复赛阶段,产品从初赛的 JavaScript Demo 进化为 TypeScript 工程化正式作品,具备了完整的用户学习路径(认字 → 书写 → 字源 → 复习 → 游戏巩固 → 成就激励)和工程级代码质量。
产品形态: H5 网站(https://tzxq.e8so.com/)+ 微信小程序(WebView 容器)
核心理念: 完全免费、永久零广告——让一线城市的孩子和乡村留守儿童使用完全相同的高质量内容。
2.2 核心功能矩阵(初赛 vs 复赛)
| 功能模块 | 初赛状态 | 复赛状态 | 升级要点 |
|---|---|---|---|
| 3D 星球地图 | 已实现 | 深度优化 | 星空主题统一、星球主题色实时联动、z-index 层级修复 |
| 汉字书写练习 | 已实现 | 组件化重构 | MizigeCanvas 组件提取、横竖屏自适应、按钮样式统一 |
| 字源演变 | 已实现 | 数据本地化 | SVG 资源本地化、CDN 三源降级策略保留 |
| 3 款汉字游戏 | 基础实现 | 深度优化 | 统一四层布局、GameStatusBar/GamePowerBar 组件、道具系统统一 |
| 复习系统 | 已实现 | UI 优化 | 星空主题融入、复习流程优化 |
| 成就系统 | 已实现 | UI 优化 | 徽章墙重构、等级展示优化 |
| 积分商店 | 已实现 | UI 优化 | 星空主题融入、家长管理优化 |
| Mock API 系统 | 无 | 全新实现 | 32 个 RESTful 接口、6 模块分类、localStorage 持久化 |
| 文档站点 | 无 | 全新构建 | VitePress 文档站、12 篇顶层文档 + 8 个子目录 |
| 测试体系 | 无 | 全新建设 | vitest 单元测试、覆盖游戏/积分/经验/复习/书写 |
| 开发规范 | 无 | 全新制定 | AGENTS.md(12 节)+ Development-Guidelines.md(152 行) |
| 项目语言 | JavaScript | TypeScript | 完整迁移、严格类型检查 |
2.3 UI 视觉对比(初赛 vs 复赛)
同一页面下的前后对比,直观呈现复赛阶段从 Demo 到正式作品的视觉进化:
2.4 数据规模
| 维度 | 数量 | 说明 |
|---|---|---|
| 汉字数据 | 500 个 | 含拼音、笔画、部首、字源等完整信息 |
| 分类体系 | 6 大 × 24 子 | 自然/人体/动物/器物/植物/天文 |
| 3D 星球 | 6 颗 | 每颗独立视觉色系和专属童谣 |
| 游戏关卡 | 3 款 × 10 关 = 30 关 | 象形配对/拼图闯关/汉字消消乐 |
| 徽章 | 30 枚 | 1-10 级等级系统 |
| 页面数 | 23 个 | 含 3 个书写子页面 |
| Pinia Store | 5 个 | TypeScript 重写(user/character/achievement/game/shop) |
| Service | 4 个 | TypeScript 重写(api/resource/resource-cache/reward) |
| Mock API | 32 个 | 6 模块 RESTful 接口 |
| 组件 | 30+ | 含 5 个全局组件 + 游戏模块/书写模块/星球模块组件 |
三、复赛核心升级内容
本次复赛从工程架构、数据架构、UI 设计、游戏体验、组件化、文档、测试、开发规范八大维度完成跨越式升级,彻底从"演示项目"升级为工程化正式作品。
3.1 JavaScript → TypeScript 完整迁移
初赛项目使用 JavaScript 开发(html5 目录),复赛将其 1:1 迁移为纯 TypeScript 项目(web 目录),实现全量类型安全。
迁移范围:
- 所有
.vue文件<script setup lang="ts">改造 - 5 个 Store 从
.js转.ts(user/character/achievement/game/shop) - 4 个 Service 从
.js转.ts(api-service/resource-service/resource-cache/reward-service) - 6 个 Composable 从
.js转.ts - 5 个工具函数从
.js转.ts(char-utils/date-utils/format-utils/array-utils/logger) tsconfig.json严格模式配置、vue-tsc类型检查集成到构建流程
关键技术决策:
- 移除
jsconfig.json,统一使用tsconfig.json baseUrl在 TS 7.0 中将弃用,改用paths路径别名- Three.js 类型定义:将
@types/three版本对齐到0.160.0(与 three 依赖版本一致) import.meta.glob按需加载 500 个汉字笔顺数据
Session ID:
1057062267660683:1fcc9d0b0c6703c843fd74de424b54c8_6a59b1db52bb8ac7fe7545ac.6a59b1db52bb8ac7fe7545af.6a59b1db52bb8ac7fe7545ad:TRAE Work CN.0.1.36.no_sid.no_ppe.T(2026/7/17 12:38:51)
1057062267660683:bff48bbe5024d1c514d54f172688cec1_6a59b1db52bb8ac7fe7545ac.6a5a43bc52bb8ac7fe754e2a.6a5a43bc52bb8ac7fe754e28:TRAE Work CN.0.1.36.no_sid.no_ppe.T(2026/7/17 23:01:16)
1057062267660683:4dfaa2ae73e090473dfa11302a591b09_6a5c7e51398d36aabf62c513.6a5c7e51398d36aabf62c516.6a5c7e51398d36aabf62c514:TRAE Work CN.0.1.36.no_sid.no_ppe.T(2026/7/19 15:35:45)
截图占位:TRAE Work 对话截图 — JS 转 TS 迁移过程 + vue-tsc 类型检查通过截图
3.2 数据本地化
初赛依赖 CDN 加载笔顺数据和音频,复赛实现三类核心数据完全本地化,确保弱网和离线环境可用。
三类数据本地化:
| 数据类型 | 初赛来源 | 复赛来源 | 加载方式 |
|---|---|---|---|
| 汉字书写 JSON | CDN 在线加载 | 本地 import.meta.glob |
按需加载 500 个汉字笔顺数据 |
| 拼音音频 MP3 | CDN 在线加载 | 本地 public/data/hanzi-audio/ |
TTS 降级策略 |
| 字源演变 SVG | CDN 在线加载 | 本地 public/data/etymology-svg/ |
三源三级 CDN 回退保留 |
关键约束: 所有资源访问必须通过 resource-service.ts 统一入口,禁止裸 fetch。
Session ID:
1057062267660683:b8d023476809ef8c94591533fb42d857_6a59d3da52bb8ac7fe754cad.6a59d3da52bb8ac7fe754cb0.6a59d3da52bb8ac7fe754cae:TRAE Work CN.0.1.36.no_sid.no_ppe.T(2026/7/17 15:03:54)
1057062267660683:a400697fb20f001b6f0fcecbe8cf2247_6a59d3da52bb8ac7fe754cad.6a5a393b52bb8ac7fe754db8.6a5a393b52bb8ac7fe754db6:TRAE Work CN.0.1.36.no_sid.no_ppe.T(2026/7/17 22:16:27)
截图占位:数据本地化前后对比 + 文件目录结构
3.3 Mock API 系统
初赛数据散落在 localStorage 各处,缺乏统一管理。复赛使用 mockjs 搭建标准 RESTful API 模拟层,实现前后端分离架构。
架构设计:
Pinia Store → api-service.ts → Mock API (mockjs) → localStorage (tzxq_mock_db)
- 6 模块 32 端点: user(9)、character(4)、game(7)、achievement(2)、shop(9)、planet(1)
- 统一响应格式:
{ code: 0, msg: "ok", data: ... } - 模拟网络延迟: 50-100ms
- 数据持久化: localStorage
tzxq_mock_db,页面关闭时自动保存 - 所有环境加载: Mock 在所有环境(含生产构建)加载,非仅 DEV
关键约束: 禁止直接操作 localStorage,所有数据访问通过 api-service.ts 统一入口。
踩坑: Mock 路由注册顺序——更具体的模式必须在前(如 /categories 在 /:char 之前),否则被通用模式拦截。
Session ID:
1057062267660683:fbb4b08e569b2dcfc7c5f3291bd673d0_6a5c6750398d36aabf62c1e1.6a5c6750398d36aabf62c1e4.6a5c6750398d36aabf62c1e2:TRAE Work CN.0.1.36.no_sid.no_ppe.T(2026/7/19 13:57:36)
1057062267660683:0df01bc0ea28916a74d27a9f0a393846_6a5c6750398d36aabf62c1e1.6a5c8b9f398d36aabf62c743.6a5c8b9f398d36aabf62c741:TRAE Work CN.0.1.36.no_sid.no_ppe.T(2026/7/19 16:32:31)
截图占位:Mock API 架构图 + 浏览器 Network 面板请求截图
3.4 UI 全面重新设计
初赛 UI 风格不统一、视觉粗糙。复赛对所有 23 个页面进行 UI 重构,确立星空主题统一设计语言,达到高级设计师水准。
设计理念:
- 全局星空背景层: 所有页面共享底层星空背景,营造宇宙探险氛围
- 6 星球主题色实时联动: 进入对应星球后,页面元素颜色(按钮、进度条、道具栏)跟随当前星球主题色变化
- 透明毛玻璃效果:
backdrop-filter: blur(8px)贯穿全局弹窗、卡片、TabBar - 底部 TabBar: 星空效果背景 + 悬浮固定 + 选中高亮
逐页面优化清单(重点页面):
| 页面 | 优化要点 |
|---|---|
| 首页 | 今日推荐汉字圆圈布局、拼音 + 汉字垂直居中 |
| 汉字星际 | 分类按钮图标优化、汉字正圆布局 |
| 汉字详情 | 标签组透明背景、白色默认字体 |
| 书写练习 | 米字格圆形设计、按钮样式统一、拼音间距修复 |
| 星球地图 | 详情页/分类列表融入星空背景 |
| 游戏列表/关卡列表 | 圆形关卡设计、锁图标可见性修复 |
| 成就/徽章墙 | 星空主题融入、徽章 3D 效果 |
| 积分商店 | 星空主题、家长管理弹窗重构 |
| 关于页面 | Logo 3D 重构 |
迭代过程: 7/20 启动 UI 重设计 → 7/22-7/26 多轮异常修复 → 7/27-7/29 逐页面精修
Session ID:
1057062267660683:f97fa8af6a5bd2a79d619c8c53a04077_6a5df509bbd63254f5f82294.6a5df509bbd63254f5f82297.6a5df509bbd63254f5f82295:TRAE Work CN.0.1.38.no_sid.no_ppe.T(2026/7/20 18:14:33)
1057062267660683:a694180f2a90f82f603c97cdc241aa30_6a5df509bbd63254f5f82294.6a5e0490bbd63254f5f82434.6a5e0490bbd63254f5f82432:TRAE Work CN.0.1.38.no_sid.no_ppe.T(2026/7/20 19:20:48)
1057062267660683:77e1c3b26eda5c3c011b8c0bd69200bb_6a603192e47075ad78c39ad0.6a603664e47075ad78c39bb2.6a603664e47075ad78c39bb0:TRAE Work CN.0.1.38.no_sid.no_ppe.T(2026/7/22 11:17:56)
1057062267660683:45f0383c0375167d38cada06bdf2d718_6a6180ef1a98989c3eddeb97.6a6180ef1a98989c3eddeb9a.6a6180ef1a98989c3eddeb98:TRAE Work CN.0.1.39.no_sid.no_ppe.T(2026/7/23 10:48:15)
3.5 3 款游戏深度优化
初赛 3 款游戏布局不统一、道具系统混乱。复赛实现统一四层布局架构,深度优化每款游戏的核心玩法。
统一布局架构:
NavBar → GameStatusBar(顶部进度栏)→ 游戏主体 → GamePowerBar(底部道具栏)
GameStatusBar 组件(顶部进度栏):
- 3 颗星评分 + 得分统一展示
- 象形配对:倒计时改为进度条(到期变红闪烁)
- 汉字消消乐:步数百分比进度条
- 左侧统一显示
n/m 字进度
GamePowerBar 组件(底部道具栏):
- 3 款游戏道具统一为 5 个:锤子、洗牌、提示、冻结、加步
- 道具图标颜色跟随星球主题色实时变化
- 次数显示在图标下方文字、禁用遮罩层
各游戏专属优化:
| 游戏 | 专属优化 |
|---|---|
| 象形配对 | 字源/楷书背景毛玻璃效果、选中高亮、匹配特效优化 |
| 拼图闯关 | 拼块选中放大 30% + 流动边框、未选中缩小 30% + 遮罩、画布汉字渲染 |
| 汉字消消乐 | 7×7 棋盘水晶珠 UI、棋盘动态尺寸调整、禁止滚动 |
Session ID:
1057062267660683:71486d11fa2472919a7b4b80a5e0299b_6a6aab62af07d022dd12a6b0.6a6aab62af07d022dd12a6b3.6a6aab62af07d022dd12a6b1:TRAE Work CN.0.1.41.no_sid.no_ppe.T(2026/7/30 09:39:46)
1057062267660683:392488aa9f912f829ac744de531235ce_6a6bf8b523d8dad536b4b4ed.6a6bfe9823d8dad536b4b55a.6a6bfe9823d8dad536b4b558:TRAE Work CN.0.1.41.no_sid.no_ppe.T(2026/7/31 09:47:05)
1057062267660683:8a6f935be7a65d5c43b98771fdddd989_6a6c34634aa6b5633d1113c9.6a6c34634aa6b5633d1113cc.6a6c34634aa6b5633d1113ca:TRAE Work CN.0.1.43.no_sid.no_ppe.T(2026/7/31 13:36:35)
1057062267660683:fbc79d44c3c6da072b00b36baed109b6_6a6d7a510aad05216a5b9003.6a6d86e30aad05216a5b9074.6a6d86e30aad05216a5b9072:TRAE Work CN.0.1.43.no_sid.no_ppe.T(2026/8/1 13:40:51)
1057062267660683:db72c9e40be0163d2d89799c2a502eb4_6a6d6a2c673ec58a67ab9dc7.6a6d6a2d673ec58a67ab9dca.6a6d6a2d673ec58a67ab9dc8:TRAE Work CN.0.1.43.no_sid.no_ppe.T(2026/8/1 11:38:21)
1057062267660683:045fd6d9198a423d6464f69f881d2e42_6a6d5c9d673ec58a67ab9c2c.6a6d5c9e673ec58a67ab9c2f.6a6d5c9d673ec58a67ab9c2d:TRAE Work CN.0.1.43.no_sid.no_ppe.T(2026/8/1 10:40:30)
3.6 组件化重构
初赛存在大量重复代码和内联 SVG,维护困难。复赛进行系统性组件化重构。
核心组件提取:
| 组件 | 功能 | 替代内容 |
|---|---|---|
| SpaceIcon | 统一管理 60+ SVG 图标 | 替代 60+ 处内联 SVG |
| MizigeCanvas | 书写练习米字格画布组件化 | 替代 HanziWriterCanvas MiziGrid StrokeAnimationCanvas WritingPracticeCanvas |
| GameStatusBar | 游戏顶部进度栏(星级 + 得分 + 进度) | 3 款游戏统一使用 |
| GamePowerBar | 游戏底部道具栏(道具 + 主题色联动) | 3 款游戏统一使用 |
| GameResultModal | 游戏结果弹窗 | 3 款游戏统一使用 |
| LevelSelect | 关卡选择组件 | 3 款游戏统一使用 |
| StarRating | 星级评分组件 | 统一使用 |
Session ID:
2292903432952010:2b78a3e5b67916f762b5b92937f2a145_6a67764b1f9b8f0404ff942c.6a67764c1f9b8f0404ff942f.6a67764b1f9b8f0404ff942d:TRAE Work CN.0.1.40.no_sid.no_ppe.T(2026/7/27 23:16:28)
2292903432952010:d9e6dc5a11b9faa9496aff39857fdfea_6a6734a11f9b8f0404ff86a9.6a6734a11f9b8f0404ff86ac.6a6734a11f9b8f0404ff86aa:TRAE Work CN.0.1.40.no_sid.no_ppe.T(2026/7/27 18:36:17)
截图占位:组件架构图 + SpaceIcon 组件代码截图
3.7 VitePress 文档站点
初赛几乎没有项目文档。复赛使用 VitePress 构建完整的项目文档站点,并制定 AGENTS.md 开发规范。
文档结构:
| 层级 | 内容 |
|---|---|
| 顶层核心文档(12 篇) | architecture、data-schema、stores-and-dataflow、exp-rules、points-rules、design-system、cdn-service、review-system、testing-and-build、write-module + 8 个页面模块文档 |
| api/(6 篇) | user/character/game/achievement/shop/planet Mock API 文档 |
| data/(5 篇) | character-data/categories-planets/game-config/mock-db |
| design/(5 篇) | component-architecture/data-flow/design-system/directory-structure |
| development/(10 篇) | setup/build/conventions/testing/mock-api/resource-service/known-issues/troubleshooting |
| features/(10 篇) | learning/writing/review/planet/achievement/shop + 3 款游戏文档 |
| guide/(9 篇) | quick-start/learn-characters/writing-practice/review-system/planet-map/games/shop-and-rewards/settings-and-profile |
| layout/(5 篇) | navigation/page-layout/responsive-design/unlock-rules |
AGENTS.md(12 节结构): 文档索引、开发规范速查、项目概述、技术栈、数据来源、项目结构、核心业务逻辑、Mock API 架构、已知约束、开发指导原则、开发命令、开发自动化技能
Development-Guidelines.md(152 行): 核心理念、简洁原则、任务拆解、实现流程、架构原则、提交标准、错误处理、决策框架、完成标准
Session ID:
1057062267660683:94d35ffcd98882187c3be68334efb0f2_6a5c9155398d36aabf62c767.6a5c9156398d36aabf62c76a.6a5c9155398d36aabf62c768:TRAE Work CN.0.1.36.no_sid.no_ppe.T(2026/7/19 16:56:54)
1057062267660683:b9ace6480987081553b15710b6f33117_6a5c6750398d36aabf62c1e1.6a5da43abd7d1ca664ca2c95.6a5da43abd7d1ca664ca2c93:TRAE Work CN.0.1.36.no_sid.no_ppe.T(2026/7/20 12:29:46)
截图占位:VitePress 文档站点首页截图 + 文档目录结构
3.8 测试体系建设
初赛完全没有测试。复赛搭建完整的 vitest 单元测试体系,覆盖核心业务逻辑。
测试框架: vitest 1.6.0 + @vue/test-utils ^2.4.11 + jsdom ^29.1.1
测试目录结构(web/testing/):
| 目录 | 测试内容 |
|---|---|
| unit/composables/ | useCharFilter 等组合式函数测试 |
| unit/exp/ | 经验值日志、会员等级测试 |
| unit/game/ | 游戏机制、游戏 Store、道具栏、奖励服务、主题色测试 |
| unit/points/ | 积分日志、商店兑换、用户 Store 奖励测试 |
| unit/review/ | 复习奖励、复习调度器测试 |
| unit/write/ | 书写评分计算测试 |
| integration/ | 复习流程集成测试 |
| fixtures/ | 30 天学习计划、7 关游戏进度测试数据 |
| helpers/ | mock-data、mock-stores、test-utils 测试工具 |
Session ID:
1057062267660683:cdc41f88992b34eed6a03e084d43b31c_6a6ef5cd1c489643bc08967d.6a6ef5cd1c489643bc089680.6a6ef5cd1c489643bc08967e:TRAE Work CN.0.1.43.no_sid.no_ppe.T(2026/8/2 15:46:22)
3.9 开发规范与自动化技能
复赛制定了完整的开发规范体系,并开发了两个 TRAE 自动化技能。
开发规范体系:
- AGENTS.md(12 节): 从文档索引到开发命令的完整开发规范
- Development-Guidelines.md(152 行): 核心理念——渐进式推进优于大爆炸式重构
- 决策框架: 可测试性 > 可读性 > 一致性 > 简洁性 > 可逆性
- 执行流程: 理解 → 测试先行(红) → 最小实现(绿) → 重构 → 提交
- 卡住时规则: 最多 3 次尝试,之后停止并重新评估
开发自动化技能(.trae/skills/):
| 技能 | 版本 | 功能 |
|---|---|---|
| tzxq-docs | v3.1.2 | 5 模块:源码文档生成 / VitePress 站点 / 移动端截图 / AGENTS.md 重写 / 测试数据填充 |
| tzxq-dev | v1.0.0 | 模式 A:缺陷修复(六阶段);模式 B:代码精简(组件提取/SCSS mixins/工具函数统一) |
Session ID:
1057062267660683:94d35ffcd98882187c3be68334efb0f2_6a5c9155398d36aabf62c767.6a5c9156398d36aabf62c76a.6a5c9155398d36aabf62c768:TRAE Work CN.0.1.36.no_sid.no_ppe.T(2026/7/19 16:56:54)
四、用户体验与移动端优化
4.1 星空主题统一设计
- 全局星空背景层: 所有页面共享底层星空背景,营造统一宇宙探险氛围
- 6 星球主题色实时联动: 进入对应星球后,页面元素颜色(按钮、进度条、道具栏、弹窗)跟随当前星球主题色变化,使用
computed属性预计算样式对象确保 Vue 依赖追踪完整 - 透明毛玻璃效果:
backdrop-filter: blur(8px)统一应用,搭配transition: background-color 0.6s ease过渡效果
4.2 交互体验优化
- 底部 TabBar: 星空背景 + 悬浮固定 + 选中高亮
- 汉字列表: 正圆布局 + 拼音汉字垂直居中 + 打钩打叉半圆外露
- 书写练习: 圆形米字格 + 横竖屏自适应 + 按钮统一样式
- 游戏详情页: 统一四层布局 + 主体区域动态高度 + 道具栏紧凑设计
4.3 视觉细节打磨
- 所有弹窗/对话框:透明毛玻璃 + 星空背景色联动
- 关卡列表:圆形关卡设计 + 锁图标可见性修复
- Logo 重构:3D 立体效果
- 颜文字替换为 SVG 图片
- 移除"技术支持"区块,保持星空背景完整性
Session ID(UI 优化相关):
1057062267660683:9f9a69fbda2bf3b251e5edf5eb532fee_6a6a0b2fe385982b6064e947.6a6a0b2fe385982b6064e94a.6a6a0b2fe385982b6064e948:TRAE Work CN.0.1.41.no_sid.no_ppe.T(2026/7/29 22:16:15)
1057062267660683:58f69c03759dc1bbf5a5ba82e9e3f35a_6a6884d32888306e6e6c2d02.6a6970391c876af52ac3f55f.6a6970381c876af52ac3f55d:TRAE Work CN.0.1.40.no_sid.no_ppe.T(2026/7/29 11:15:05)
1057062267660683:2d59b2a98cde006787862a7880986727_6a697ea41c876af52ac3f68e.6a697ea41c876af52ac3f691.6a697ea41c876af52ac3f68f:TRAE Work CN.0.1.40.no_sid.no_ppe.T(2026/7/29 12:16:36)
1057062267660683:c08f09584d2aaaaa58c813e4db5c9a26_6a6ad319af07d022dd12a94f.6a6ad319af07d022dd12a952.6a6ad319af07d022dd12a950:TRAE Work CN.0.1.41.no_sid.no_ppe.T(2026/7/30 12:29:13)
4.4 响应式布局
- 所有页面适配移动端竖屏/横屏
- 使用
clamp()函数实现自适应字体大小(如童谣.rhyme-line使用clamp(14px, 3.5vw, 20px)) - 汉字列表使用
flex-shrink: 0保持 64×64 正方形
4.5 横竖屏切换
- 书写练习米字格:横竖屏切换时动态调整大小、汉字重新渲染
- 游戏棋盘:根据屏幕宽高比自适应(汉字消消乐 7×7 棋盘动态尺寸)
aspect-ratio: 1在 flex 列布局中需同时显式设置 width 和 height 为相同值
4.6 触摸交互优化
- OrbitControls 手势冲突解决:
pointer-events精确控制,星球弹窗打开时禁用背景滚动 - 星球详情页
.planet-header设置z-index: 2,.main-content保持z-index: 1,避免内容覆盖 NavBar
4.7 微信小程序兼容
- CDN 域名白名单配置(
https://cdn.jsdelivr.net) - WebView 容器承载 H5 应用
五、产品创作历程
5.1 灵感来源:看见孩子识字的真实痛点
探字星球诞生的起点,源自一个朴素却真实的问题:3-8 岁的孩子应该如何更自然地学汉字?
在传统识字方式里,孩子往往面对的是枯燥的卡片、机械的抄写和反复的认读,识字变成了一件"需要坚持"的任务,而不是"想去探索"的乐趣。与此同时,不同地域、不同家庭之间,教育资源的差异让"识字"这件小事变得并不公平——一线城市的孩子可以便捷地接触优质的学习工具,而偏远地区的孩子可能只能依赖有限的课本和父母有限的辅导。
我们想做的,是让"学汉字"这件事回归它本来的样子:充满好奇、可以游戏、人人可及。于是,**「把每个汉字变成一颗会讲故事的星球」**这个想法应运而生——用太空和星球作为主题,把 500 个精选汉字装进一个孩子愿意主动探索的宇宙里。
5.2 从初赛 Demo 到复赛正式作品
初赛阶段,我们用 TRAE Work Auto 模式快速搭建出一个可运行的 Demo:3D 星球、手写识别、字源演变、游戏化成就,核心玩法和创意已经成型。但作为"作品",它还远远不够——代码是 JavaScript 与 HTML 混写的,数据散落在各处,缺乏统一管理,页面 UI 风格不统一,没有文档、没有测试、没有规范。
复赛的定位非常明确:把"能玩"的 Demo,打磨成"能用、能维护、能上线"的正式作品。 整个复赛围绕九大维度展开——从 JavaScript 到 TypeScript 的完整迁移、Mock API 架构搭建、23 个页面 UI 全面重构、3 款游戏深度优化、组件化重构、VitePress 文档站点建设、测试体系搭建等,每一步都是对"演示项目"的系统性升级。
5.3 过程中的关键问题与解决思路
创作过程并非一帆风顺,几个关键问题决定了作品的质量上限:
- 工程化地基先行: 面对"重构"和"加功能"的诱惑,我们坚持先完成 JS→TS 迁移和 Mock API 搭建,再去做 UI 重构和游戏优化,让基础设施先行,避免在松散的基础上越叠越高。
- 资源与性能的取舍: 初赛依赖 CDN 加载笔顺数据和音频,存在弱网不可用的问题。复赛将三类核心数据完全本地化,并保留多源 CDN 回退,兼顾离线可用与加载性能。
- 视觉与体验的统一: 23 个页面风格不一,是初赛的一大短板。复赛确立"星空主题"统一设计语言,通过全局背景层、星球主题色实时联动、透明毛玻璃效果,让产品具备了高级设计师水准的观感。
- "3 次失败就停止"的纪律: 遇到技术卡点时,最多尝试 3 种方案,3 次都失败就停下来重新评估,而不是盲目硬撞。这个纪律在游戏优化、Mock 路由顺序等棘手问题上多次发挥关键作用。
5.4 重要设计与技术决策
- 数据访问统一入口: 所有数据通过
Pinia Store → api-service → Mock API访问,禁止直接操作 localStorage,为未来接入真实后端预留了清晰的边界。 - 渐进式推进优于大爆炸式重构: 每次改动后立即运行
pnpm build和pnpm vitest run验证,小步快跑,让每一处改动都可回退、可验证。 - 以孩子体验为中心: 段位、徽章、积分、星球解锁……所有游戏化设计都指向同一个目标——让孩子"愿意学、学得下去",而不是单纯地堆砌功能。
从初赛的灵光一现,到复赛的成体系打磨,探字星球完整地走过了"从想法到作品"的全过程。这既是产品本身的成长,也是 AI 协作开发模式下一条真实可复用的路径。
六、社会价值与公益普惠
6.1 服务对象:真正需要帮助的人群
探字星球的核心受众是 3-8 岁正处于识字敏感期的儿童,其中尤其关注两类人群:
- 教育资源相对匮乏地区的孩子: 优质识字工具往往集中在城市,城乡之间、发达地区与欠发达地区之间,孩子的启蒙资源存在明显差距。
- 留守儿童与隔代抚养家庭: 许多孩子由祖辈照看,父母难以投入大量时间辅导,一款"打开即用、无需注册、自动记录"的工具,能显著降低家庭辅导的门槛。
6.2 社会效益:免费、无广告、教育公平
探字星球坚持完全免费、永久零广告的核心理念——让一线城市的孩子和乡村留守儿童使用完全相同的高质量内容。不因付费门槛而分层,不因广告而打扰,孩子获得的是纯粹的、专注的学习体验。这种"教育平权"的取向,正是对"教育公平"最直接的践行。
6.3 可复制性:低成本、多场景落地
- 纯前端、零后端依赖: 全部数据本地化,Mock API 模拟后端,无需服务器、无需数据库,任何具备静态托管能力的平台都能部署,维护成本极低。
- 多端适配: 同时支持 H5 网站与微信小程序(WebView 容器),在智能电视、教学一体机、平板、手机等多种终端上均可运行,适合家庭自学、学校课堂、社区公益课堂等多种场景。
- 易推广复制: 项目开源了完整文档(VitePress 文档站)与开发规范(AGENTS.md),其他地区、机构或个人可以低成本地复用、二次开发,让"识字普惠"的成果可以持续扩散。
一个低成本、可复制、真正免费的工具,才能让"让每个孩子都认好字"从口号变成现实。这正是探字星球在社会服务赛道上最想传递的价值。
6.4 实测数据与用户反馈
以下为小范围测试阶段的用户反馈与使用观察,从实际场景验证产品的可行性与接受度:
| 维度 | 反馈与观察结果 |
|---|---|
| 学习主动性 | 参与测试的 5 名 4-6 岁儿童中,4 名能独立完成 15-20 分钟学习,无需家长催促 |
| 内容吸引力 | 星球探索主题与游戏化机制(如徽章解锁、积分兑换)对儿童持续使用有明显激励作用 |
| 家长认可 | 80% 家长反馈"字源演变动画帮助孩子理解汉字含义",70% 认为"复习系统减轻辅导压力" |
| 使用场景 | 适配碎片化时间(如餐后、睡前),平均单次使用时长 8-12 分钟,周末使用频次更高 |
注:以上反馈来自 2026 年 7~8 月针对亲戚朋友几个家庭的小范围试用,后续将扩大样本量持续收集数据。
七、TRAE 实践过程
以下 Session ID 记录了探字星球复赛期间(7/17-8/2)的核心开发过程,均来自 TRAE Work CN。
7.1 JS→TypeScript 迁移(7/17-7/19)
1057062267660683:1fcc9d0b0c6703c843fd74de424b54c8_6a59b1db52bb8ac7fe7545ac.6a59b1db52bb8ac7fe7545af.6a59b1db52bb8ac7fe7545ad:TRAE Work CN.0.1.36.no_sid.no_ppe.T(2026/7/17 12:38:51)
1057062267660683:bd8d9c56c55d3a8040d2ff1fc441eac42_6a59b1db52bb8ac7fe7545ac.6a59cac752bb8ac7fe754ad0.6a59cac752bb8ac7fe754ace:TRAE Work CN.0.1.36.no_sid.no_ppe.T(2026/7/17 14:25:12)
1057062267660683:bff48bbe5024d1c514d54f172688cec1_6a59b1db52bb8ac7fe7545ac.6a5a43bc52bb8ac7fe754e2a.6a5a43bc52bb8ac7fe754e28:TRAE Work CN.0.1.36.no_sid.no_ppe.T(2026/7/17 23:01:16)
1057062267660683:4dfaa2ae73e090473dfa11302a591b09_6a5c7e51398d36aabf62c513.6a5c7e51398d36aabf62c516.6a5c7e51398d36aabf62c514:TRAE Work CN.0.1.36.no_sid.no_ppe.T(2026/7/19 15:35:45)
7.2 数据本地化(7/17)
1057062267660683:b8d023476809ef8c94591533fb42d857_6a59d3da52bb8ac7fe754cad.6a59d3da52bb8ac7fe754cb0.6a59d3da52bb8ac7fe754cae:TRAE Work CN.0.1.36.no_sid.no_ppe.T(2026/7/17 15:03:54)
1057062267660683:3f9e9732f768ea0d470220242d8fb81f_6a59d3da52bb8ac7fe754cad.6a59d8a152bb8ac7fe754cf6.6a59d8a152bb8ac7fe754cf4:TRAE Work CN.0.1.36.no_sid.no_ppe.T(2026/7/17 15:24:17)
1057062267660683:a400697fb20f001b6f0fcecbe8cf2247_6a59d3da52bb8ac7fe754cad.6a5a393b52bb8ac7fe754db8.6a5a393b52bb8ac7fe754db6:TRAE Work CN.0.1.36.no_sid.no_ppe.T(2026/7/17 22:16:27)
7.3 Mock API 系统(7/19-7/20)
1057062267660683:fbb4b08e569b2dcfc7c5f3291bd673d0_6a5c6750398d36aabf62c1e1.6a5c6750398d36aabf62c1e4.6a5c6750398d36aabf62c1e2:TRAE Work CN.0.1.36.no_sid.no_ppe.T(2026/7/19 13:57:36)
1057062267660683:8e8286ca28bfeff12ab50b1f9b356c28_6a5c6750398d36aabf62c1e1.6a5c6a38398d36aabf62c2d3.6a5c6a38398d36aabf62c2d1:TRAE Work CN.0.1.36.no_sid.no_ppe.T(2026/7/19 14:10:00)
1057062267660683:72d7bb26922dce7e2f2db3f628c671ad_6a5c6750398d36aabf62c1e1.6a5c812d398d36aabf62c5b0.6a5c812d398d36aabf62c5ae:TRAE Work CN.0.1.36.no_sid.no_ppe.T(2026/7/19 15:47:57)
1057062267660683:0df01bc0ea28916a74d27a9f0a393846_6a5c6750398d36aabf62c1e1.6a5c8b9f398d36aabf62c743.6a5c8b9f398d36aabf62c741:TRAE Work CN.0.1.36.no_sid.no_ppe.T(2026/7/19 16:32:31)
7.4 UI 重新设计(7/20-7/29)
1057062267660683:f97fa8af6a5bd2a79d619c8c53a04077_6a5df509bbd63254f5f82294.6a5df509bbd63254f5f82297.6a5df509bbd63254f5f82295:TRAE Work CN.0.1.38.no_sid.no_ppe.T(2026/7/20 18:14:33)
1057062267660683:a694180f2a90f82f603c97cdc241aa30_6a5df509bbd63254f5f82294.6a5e0490bbd63254f5f82434.6a5e0490bbd63254f5f82432:TRAE Work CN.0.1.38.no_sid.no_ppe.T(2026/7/20 19:20:48)
1057062267660683:77e1c3b26eda5c3c011b8c0bd69200bb_6a603192e47075ad78c39ad0.6a603664e47075ad78c39bb2.6a603664e47075ad78c39bb0:TRAE Work CN.0.1.38.no_sid.no_ppe.T(2026/7/22 11:17:56)
1057062267660683:45f0383c0375167d38cada06bdf2d718_6a6180ef1a98989c3eddeb97.6a6180ef1a98989c3eddeb9a.6a6180ef1a98989c3eddeb98:TRAE Work CN.0.1.39.no_sid.no_ppe.T(2026/7/23 10:48:15)
1057062267660683:edb4dbfc9c58c14942719d1dda6ac128_6a6180ef1a98989c3eddeb97.6a623d992b835a3f47c83517.6a623d992b835a3f47c83515:TRAE Work CN.0.1.39.no_sid.no_ppe.T(2026/7/24 00:13:13)
2292903432952010:3eacc2deb4f9e91bdfef841dc44f53b5_6a66ebe8ad52d1fc8e2d5a12.6a66ebe9ad52d1fc8e2d5a15.6a66ebe8ad52d1fc8e2d5a13:TRAE Work CN.0.1.39.no_sid.no_ppe.T(2026/7/27 13:26:01)
1057062267660683:58f69c03759dc1bbf5a5ba82e9e3f35a_6a6884d32888306e6e6c2d02.6a6970391c876af52ac3f55f.6a6970381c876af52ac3f55d:TRAE Work CN.0.1.40.no_sid.no_ppe.T(2026/7/29 11:15:05)
1057062267660683:9f9a69fbda2bf3b251e5edf5eb532fee_6a6a0b2fe385982b6064e947.6a6a0b2fe385982b6064e94a.6a6a0b2fe385982b6064e948:TRAE Work CN.0.1.41.no_sid.no_ppe.T(2026/7/29 22:16:15)
7.5 游戏优化(7/30-8/1)
1057062267660683:71486d11fa2472919a7b4b80a5e0299b_6a6aab62af07d022dd12a6b0.6a6aab62af07d022dd12a6b3.6a6aab62af07d022dd12a6b1:TRAE Work CN.0.1.41.no_sid.no_ppe.T(2026/7/30 09:39:46)
1057062267660683:c08f09584d2aaaaa58c813e4db5c9a26_6a6ad319af07d022dd12a94f.6a6ad319af07d022dd12a952.6a6ad319af07d022dd12a950:TRAE Work CN.0.1.41.no_sid.no_ppe.T(2026/7/30 12:29:13)
1057062267660683:cee47cb83311a606024e69b010516512_6a6aab62af07d022dd12a6b0.6a6c040923d8dad536b4b621.6a6c040923d8dad536b4b61f:TRAE Work CN.0.1.41.no_sid.no_ppe.T(2026/7/31 10:10:17)
1057062267660683:392488aa9f912f829ac744de531235ce_6a6bf8b523d8dad536b4b4ed.6a6bfe9823d8dad536b4b55a.6a6bfe9823d8dad536b4b558:TRAE Work CN.0.1.41.no_sid.no_ppe.T(2026/7/31 09:47:05)
1057062267660683:8a6f935be7a65d5c43b98771fdddd989_6a6c34634aa6b5633d1113c9.6a6c34634aa6b5633d1113cc.6a6c34634aa6b5633d1113ca:TRAE Work CN.0.1.43.no_sid.no_ppe.T(2026/7/31 13:36:35)
1057062267660683:a35aa7a99420dc803c85b8c7e92cd5b4_6a6c69da9cd485ac7c731e98.6a6c69db9cd485ac7c731e9b.6a6c69da9cd485ac7c731e99:TRAE Work CN.0.1.43.no_sid.no_ppe.T(2026/7/31 17:24:43)
1057062267660683:fbc79d44c3c6da072b00b36baed109b6_6a6d7a510aad05216a5b9003.6a6d86e30aad05216a5b9074.6a6d86e30aad05216a5b9072:TRAE Work CN.0.1.43.no_sid.no_ppe.T(2026/8/1 13:40:51)
1057062267660683:db72c9e40be0163d2d89799c2a502eb4_6a6d6a2c673ec58a67ab9dc7.6a6d6a2d673ec58a67ab9dca.6a6d6a2d673ec58a67ab9dc8:TRAE Work CN.0.1.43.no_sid.no_ppe.T(2026/8/1 11:38:21)
1057062267660683:b6ff5759fcc5166d6735194e652a90ae_6a6dd2c35162093d1cc8e0cd.6a6dd2c35162093d1cc8e0d0.6a6dd2c35162093d1cc8e0ce:TRAE Work CN.0.1.43.no_sid.no_ppe.T(2026/8/1 19:04:35)
7.6 测试体系建设(8/2)
1057062267660683:cdc41f88992b34eed6a03e084d43b31c_6a6ef5cd1c489643bc08967d.6a6ef5cd1c489643bc089680.6a6ef5cd1c489643bc08967e:TRAE Work CN.0.1.43.no_sid.no_ppe.T(2026/8/2 15:46:22)
完整的 Session ID 列表已归档至项目仓库的
tiezi/fusai/复赛SessionID汇总.md,可随时提供核验。
八、技术栈升级对比
| 类别 | 初赛技术 | 复赛技术 | 变化说明 |
|---|---|---|---|
| 语言 | JavaScript | TypeScript ~5.5.0 | 完整迁移,严格类型检查 |
| 类型检查 | 无 | vue-tsc ^2.2.0 | 构建时类型检查 |
| Mock 数据 | localStorage 散落 | mockjs ^1.1.0 | 32 个 RESTful 接口 |
| HTTP | 无 | axios ^1.18.1 | api-service 统一封装 |
| 测试 | 无 | vitest 1.6.0 + @vue/test-utils | 单元测试 + 集成测试 |
| 文档 | 无 | VitePress | 完整文档站点 |
| 开发规范 | 无 | AGENTS.md + Development-Guidelines.md | 152 行开发指南 |
| Lint | eslint(基础) | eslint ^8.57.0(含 vue/typescript 插件) | 增强规则 |
保持不变的技术栈: Vue 3 ^3.5.38、Vite ^5.1.4、vue-router ^4.6.4、Pinia ^3.0.4、TDesign Mobile Vue ^1.15.0、Three.js ^0.160.0、Hanzi Writer ^3.7.3、SCSS ^1.101.0
九、踩坑复盘与经验总结
9.1 TypeScript 迁移踩坑
- jsconfig.json 与 tsconfig.json 冲突: 迁移后 jsconfig.json 已无用,需移除
- baseUrl 弃用警告: TS 7.0 将停止支持
baseUrl,改用paths路径别名 - Three.js 类型定义版本不匹配:
@types/three版本 0.185.1 与three0.160.0 不匹配,需对齐到 0.160.0 import.meta.glob路径解析: 需注意相对路径 vs@/路径别名的差异
9.2 Mock API 踩坑
- Mock 路由注册顺序:
/categories必须在/:char之前注册,否则被通用模式拦截 - 所有环境加载: Mock 在所有环境(含生产构建)加载,非仅 DEV,确保生产构建数据正常
- 旧数据迁移: 从散落的 localStorage key 迁移到
tzxq_mock_db统一 key
9.3 UI 重设计踩坑
- 透明毛玻璃效果兼容性:
backdrop-filter在不同浏览器的兼容性需测试 - 星球主题色实时联动: 需使用
computed属性预计算样式对象,避免普通函数在v-for中导致样式不更新 - tdesign-mobile-vue 按钮样式: 白色边框和按下灰色效果由
::after伪元素实现,需通过&::after { border: none !important; background: transparent !important; }移除 - tdesign Dialog Teleport 穿透问题: Dialog 通过 Teleport 渲染到
document.body,scoped:deep()无法穿透,需使用自定义Teleport + Transition + div结构
9.4 游戏优化踩坑
- 游戏主体高度计算:
100%-(NavBar+状态栏+道具栏)的 CSS 实现需精确计算 - 汉字消消乐棋盘动态尺寸: 正方形约束 + 屏幕宽高比适配,
aspect-ratio: 1在 flex 列布局中受min-height: auto干扰 watch(levelList)副作用: 在completeLevel更新 store 后立即触发,将currentLevel提前改变,导致跳关。需添加守卫if (screen.value !== 'level_select') return
9.5 数据本地化踩坑
import.meta.glob按需加载: 从 9000+ 笔顺 JSON 文件中筛选项目 500 个汉字- 音频 crossOrigin 设置: 设置
crossOrigin = 'anonymous'在播放 cnb.cool CDN 音频时会导致 CORS 错误,应省略 getHanziWriterData请求去重: 必须使用 pending Promise Map 防止同一汉字并发多次请求
9.6 切换页面黑边问题修复
- 问题现象: 页面切换或背景切换时,过渡瞬间出现黑边/黑屏闪烁,观感割裂,儿童体验受影响
- 排查过程: 这是复赛中最棘手的难题之一,投入了大量时间反复定位,甚至让 AI 连续运行数小时排查 WebGL 上下文重建、canvas 遮挡、黑白背景过渡等方向,均未彻底解决
- 破局思路: 最终转变思路,从"逐页修背景"改为"架构级根治"——采用单页 hash 路由模式 + 统一的星空背景:背景在 App 级常驻挂载、永不卸载,配合统一的星空背景图,从根本上消除切换背景与切换页面导致的黑边现象
- 经验沉淀: 遇到反复修不动的问题,先停下来换思路、从架构层面找根因,往往比在局部打补丁更省时有效
9.7 经验总结
- TRAE Work Auto 模式的价值: 作为一个后端开发者,TRAE 让我跨越了前端的技术鸿沟,从 JS 到 TS 的迁移、Mock API 架构设计、UI 重构、测试体系建设,每一步都有 TRAE 的参与
- 渐进式推进优于大爆炸式重构: 复赛的开发过程验证了这一理念——每次改动后立即运行
pnpm build和pnpm vitest run验证,小步快跑 - 3 次失败后停止: 遇到技术卡点时,最多尝试 3 种不同方案,3 次都失败则停止并重新评估,这个纪律在游戏优化过程中多次发挥作用
- 从 Demo 到工程化: 关键决策是先完成 JS→TS 迁移和 Mock API 搭建,再进行 UI 重构和游戏优化,最后补充文档和测试——基础设施先行
十、总结与展望
复赛核心成果
| 维度 | 初赛 | 复赛 |
|---|---|---|
| 项目语言 | JavaScript | TypeScript(严格类型检查) |
| 数据架构 | localStorage 散落 | 32 个 Mock API RESTful 接口 |
| UI 设计 | 风格不统一 | 23 页面星空主题统一重构 |
| 游戏体验 | 基础实现 | 3 款游戏深度优化 + 统一布局 |
| 组件化 | 内联 SVG 散落 | 30+ 组件、SpaceIcon 统一 60+ 图标 |
| 文档 | 无 | VitePress 文档站 + AGENTS.md |
| 测试 | 无 | vitest 单元测试 + 集成测试 |
| 开发规范 | 无 | AGENTS.md + Development-Guidelines.md |
TRAE 协作感悟
初赛阶段,我和 TRAE "聊"出了一个 Demo;复赛阶段,我和 TRAE 一起"打磨"出了一个正式作品。从 JS 到 TS 的迁移、Mock API 架构设计、23 个页面的 UI 重构、3 款游戏的深度优化、完整的文档站点和测试体系——每一步都体现了 TRAE 作为 AI 协作搭档的价值。
如果说初赛让我感受到"AI 让每个有想法的人都能成为创造者",那么复赛让我感受到"AI 能陪着你把想法打磨成真正的作品"。
未来展望
- 接入后端服务器,实现真实用户系统和数据同步
- 实现移动端 App(iOS / Android),补足离线学习场景,提升儿童的独立使用体验
- 扩充汉字库至 1000+ 字
- AI 个性化学习路径(基于学习数据动态调整难度)
- 语音识别 + AI 评估朗读能力
- 家长端实时学习报告推送
未来迭代规划
在前述未来展望的基础上,探字星球还有更清晰的商业化与扩展路径。一方面,教育与公益并行——继续坚持核心识字内容免费开放,同时探索面向学校、教育机构的轻量增值服务(如班级管理、教师端备课数据、园所定制主题包),用可持续的模式反哺公益普惠。另一方面,内容与生态扩展——将汉字库扩充至 1000+ 字,并逐步覆盖拼音、词组、古诗等配套内容,从"识字工具"成长为"幼儿语言启蒙平台",让产品具备更广阔的多场景落地与商业化想象空间。
附:技术栈一览(复赛最终版)
| 类别 | 技术 | 版本 | 说明 |
|---|---|---|---|
| 核心框架 | Vue 3 | ^3.5.38 | Composition API + <script setup> + TypeScript |
| 路由 | vue-router | ^4.6.4 | 命名路由 |
| 状态管理 | Pinia | ^3.0.4 | 5 个 Store(TypeScript) |
| UI 组件库 | tdesign-mobile-vue | ^1.15.0 | 移动端 UI |
| 汉字书写 | hanzi-writer | ^3.7.3 | 笔顺动画 + 描红练习 |
| 3D 渲染 | three.js | ^0.160.0 | WebGL + GLSL 着色器 |
| Mock API | mockjs | ^1.1.0 | 32 个 RESTful 接口 |
| HTTP | axios | ^1.18.1 | api-service 统一封装 |
| 构建 | Vite | ^5.1.4 | 开发服务器 + 生产构建 |
| 测试 | vitest | 1.6.0 | 单元测试 + 集成测试 |
| 类型检查 | vue-tsc | ^2.2.0 | Vue 模板类型检查 |
| CSS | sass | ^1.101.0 | SCSS 预处理器 |
| 语言 | TypeScript | ~5.5.0 | 严格类型检查 |
| Lint | eslint | ^8.57.0 | 代码规范(含 vue/typescript 插件) |
| 文档 | VitePress | - | 完整文档站点 |
| 部署 | Vercel | - | 自定义域名 tzxq.e8so.com |
数据规模: 500 个汉字、6 大分类 × 24 子分类、6 颗 3D 星球、3 款游戏 × 10 关 = 30 关、30 枚徽章、1-10 级等级系统、5 个 Pinia Store、4 个 Service、32 个 Mock API 接口、23 个页面、30+ 组件。













































