【成都 Trae 年终 DemoDay 三甲作品】 - PianoFlow:我用 AI 开发钢琴学习应用的完整流程

导读:作为一名开发者,同时也是琴童家长,我深知孩子练琴的痛点。这篇文章将分享我如何使用 Trae IDE,从零开始搭建一个基于浏览器的游戏化钢琴学习工具——PianoFlow,目前已迭代到 v1.5.0 版本。重点分享需求先行、文档驱动的完整开发流程。


:link: 项目体验


应用获取地址https://papaya-strudel-27c468.netlify.app/

:light_bulb: Web 离线应用,主打 Pad 端体验

  • 纯前端架构:无需后端服务器,所有数据本地存储
  • PWA 支持:支持添加到主屏幕,离线可用
  • 跨端兼容:完美支持 iPad、Android 平板、桌面浏览器
  • 推荐体验:使用 iPad 或 Android 平板,横屏模式,添加到主屏幕后获得最佳体验

:open_book: 一、项目背景:为什么做这个产品?

1.1 痛点洞察

作为一个 4 岁琴童的家长,我在陪练过程中深刻体会到两个核心痛点:

孩子端

  • 识谱练习枯燥乏味,反复练习同一个音符容易失去兴趣

  • 缺乏即时反馈,不知道弹得对不对

  • 没有成就感,练琴变成"完成任务"

家长端

  • 不懂音乐,无法正确指导孩子

  • 不知道孩子的学习进度和薄弱环节

  • 陪练过程容易情绪失控,“不写作业母慈子孝,一练钢琴鸡飞狗跳”

1.2 产品定位

基于这些痛点,我决定做一个产品:

PianoFlow - 专为 4-10 岁琴童打造的、基于浏览器端的游戏化视奏与节奏练习工具

它不替代钢琴老师,而是解决"识谱枯燥"和"练习缺乏正反馈"的痛点,通过即时反馈和虚拟经济系统,让枯燥的识谱练习变得像玩游戏一样有趣。

1.3 开发方式

整个项目完全使用 Trae IDE 从零开始搭建,通过 AI 辅助开发,持续迭代到 v1.5.0 版本。最重要的是:需求先行,文档驱动


:bullseye: 二、核心功能:产品长什么样?

2.1 三大练习模式

:musical_note: 识谱练习 (Sight Reading)

:musical_notes: 连音节奏 (Rhythm Game)

:musical_score: 音程训练 (Interval Training)

2.2 激励体系

  • :star: 星级评定(0-5 星)

  • :money_bag: 金币奖励机制

  • :convenience_store: 奖励商店(家长自定义奖励)


2.3 家长中心

  • :bar_chart: 数据看板(练习时长、错题分布)

  • :gear: 设置管理

  • :locked: PIN 码保护

2.4 特色体验

  • :superhero: 英雄系统(贝贝熊、跳跳兔、旋律猫)

  • :speaking_head: 智能 TTS 语音引导

  • :mobile_phone: PWA 离线支持


:hammer_and_wrench: 三、技术栈


⚛️ React 19 + TypeScript

🔨 Rsbuild

🎨 Tailwind CSS v4

🎵 Tone.js

🔄 Zustand

💾 Dexie.js

🌍 i18next

✨ Framer Motion

📱 PWA

纯前端架构,无需后端,所有数据本地存储。


:rocket: 四、从 0 到 1 的完整开发流程(根据真实提交还原)

:light_bulb: 这部分是全文的核心。我会根据 Git 提交历史,还原每个阶段的真实开发过程。

最重要的是:需求先行,文档驱动。在第一个代码提交之前,就已经准备好了完整的规划文档。


4.1 需求先行:完整的规划文档体系(关键)

在项目初始化时.trae/documents/ 目录下就已经包含了三个核心规划文档:

:clipboard: 文档 1: development-plan.md - 开发任务分解文档(52 行)

AI 帮我制定了详细的 4 阶段开发计划:


# 开发任务分解文档 (Development Task Breakdown)

## Phase 1: Foundation (P0) - 基础设施与核心引擎

| Task ID | 任务描述 | 技术栈 | 依赖 |

| DEV-001 | 项目初始化与构建配置 | React 19, Rsbuild, TailwindCSS | - |

| DEV-002 | 基础路由与布局搭建 | React Router, CSS | DEV-001 |

| DEV-003 | 核心音频引擎 (AudioArchitecture) | Tone.js | DEV-001 |

| DEV-004 | 五线谱渲染引擎 (StaffRenderer) | Canvas API | DEV-001 |

| DEV-005 | 存储服务层 (StorageService) | Dexie.js | DEV-001 |

| DEV-006 | 全局状态管理 (Global Store) | Zustand | DEV-005 |

| DEV-007 | PWA 基础配置 | vite-plugin-pwa | DEV-001 |

## Phase 2: Core Gameplay (P0) - 核心玩法与练习循环

| Task ID | 任务描述 | 技术栈 | 依赖 |

| DEV-008 | 虚拟琴键组件 (VirtualPiano) | React, Tone.js | DEV-003 |

| DEV-009 | 题目生成逻辑 | TypeScript | DEV-006 |

| DEV-010 | 游戏会话状态管理 (Session Store) | Zustand | DEV-006 |

| DEV-011 | 交互判定与防抖 | React, Lodash | DEV-008, DEV-004 |

| DEV-012 | 反馈系统 (Audio & Visual) | Tone.js, CSS Animations | DEV-003, DEV-010 |

| DEV-013 | 结算界面与流程 | React Components | DEV-010, DEV-006 |

| DEV-014 | 基础认知模式 (Learning Mode) | StaffRenderer | DEV-004 |

## Phase 3: Progression & Meta (P1) - 成长系统与元游戏

## Phase 4: Polish & Onboarding (P1/P2) - 打磨与新手引导

:clipboard: 文档 2: user-stories.md - 用户故事分解文档(213 行)

AI 帮我拆分了 7 个 Epic,每个 Epic 下有详细的用户故事:


# 用户故事分解文档 (User Stories Breakdown)

## 1. Epic: Onboarding (新手引导)

### US-1.1: 角色选择与欢迎

* Priority: P0

* Story: 作为一名儿童用户,我想要在首次进入时选择一个动物伙伴

* Acceptance Criteria:

1. 首次打开应用,展示 3-4 个动物选项(小熊、小兔、小猫)

2. 点击某个动物时,播放对应的动物叫声和动作动画

3. 选中后进入主页,所选角色常驻显示

## 2. Epic: Learning Mode (学习模式 - 基础认知)

### US-2.1: 五线谱交互认知

* Story: 作为一名儿童用户,我想要点击五线谱的线或间,听到对应的音高

## 3. Epic: Practice Mode (练习模式 - 互动游戏)

### US-3.1: 题目生成与语音指令

### US-3.2: 触控回答与判定

### US-3.3: 正确反馈与连击

### US-3.4: 错误反馈与引导

### US-3.5: 结算与宝箱

## 4. Epic: Garden System (花园/奖励系统)

## 5. Epic: User Profile & Progress (成长/个人中心)

## 6. Epic: Settings & Parent Control (设置与家长控制)

## 7. Epic: System & Technical (系统与非功能)

:clipboard: 文档 3: ui-ux-design-specs.md - UI/UX 设计规范文档(143 行)

AI 帮我制定了完整的视觉和交互规范:


# UI/UX 设计规范文档 (UI/UX Design Specifications)

## 2. 视觉语言体系 (Visual Language System)

### 2.1 彩虹音符配色 (Rainbow Note Palette)

| 音名 | 唱名 | 颜色名称 | HEX 值 | 视觉含义 |

| C | Do | 活力红 | #FF5252 | 基础、起始 |

| D | Re | 阳光橙 | #FF9800 | 温暖、向上 |

| E | Mi | 柠檬黄 | #FDD835 | 明亮 |

| F | Fa | 森林绿 | #66BB6A | 生长、自然 |

| G | Sol | 天空蓝 | #42A5F5 | 广阔、清脆 |

| A | La | 靛青蓝 | #3F51B5 | 深邃、稳定 |

| B | Si | 梦幻紫 | #BA68C8 | 神秘、连接 |

### 2.2 界面基础色 (UI Colors)

* 背景色: #FFF9E6 (暖米色,护眼,模拟纸张质感)

* 主色调: #FF6B6B (珊瑚红,用于主按钮、强调)

* 次色调: #4ECDC4 (薄荷绿,用于确认、装饰)

### 4.2 练习反馈状态

* 正确 (Correct):

- 音符爆发彩虹光圈或粒子特效

- 播放 C 大调欢快和弦

- 角色在角落做出欢呼动作

* 错误 (Incorrect):

- 切勿使用红色大叉 (X)

- 音符变成灰色或黯淡色

- 播放柔和的"Boing"弹簧声

### 5.1 关键动画 (Key Animations)

* 音符动作:

- 全音符: 像不倒翁一样左右滚动

- 二分音符: 像气球一样飘动

- 四分音符: 原地跳跃

* 星星奖励: 从正确位置飞出,沿抛物线落入宝箱

* Combo 连击: 连续答对 3 次,屏幕边缘出现彩色呼吸光晕

:white_check_mark: 产出物(在第一个提交中就已存在):

  • development-plan.md(52 行,4 个阶段,25 个开发任务)

  • user-stories.md(213 行,7 个 Epic,20+ 用户故事)

  • ui-ux-design-specs.md(143 行,完整的视觉和交互规范)

这些文档是在编写任何代码之前就已经完成的,体现了"需求先行,文档驱动"的开发理念。


4.2 Phase 1:基础搭建(第 1 天)

根据 development-plan.md 中的 Phase 1 任务和 user-stories.md 中的用户故事,完成了:

  • :white_check_mark: 项目基础架构搭建

  • :white_check_mark: 核心练习功能实现

  • :white_check_mark: 基础 UI 界面设计


4.3 Phase 2:功能完善(第 2-7 天)

根据规划文档,完成了:

  • :white_check_mark: 英雄系统与 TTS 语音引导

  • :white_check_mark: 国际化支持

  • :white_check_mark: 奖励商店与错题本


4.4 Phase 3:体验优化(第 8-12 天)

根据用户反馈和规划文档,完成了:

  • :white_check_mark: 结算系统优化

  • :white_check_mark: 连音节奏游戏模式

  • :white_check_mark: PWA 离线支持


4.5 Phase 4:功能扩展(第 13-14 天)

根据规划文档,完成了:

  • :white_check_mark: 家长中心

  • :white_check_mark: 音程训练模式

  • :white_check_mark: 升降号支持


4.6 持续优化与修复

开发过程中持续修复问题和优化体验。


4.7 开发流程总结:完整的软件工程实践

:clipboard: 完整的软件工程流程

这个项目严格按照软件工程流程进行开发:


需求分析 → 用户故事拆分 → 优先级排序 → 迭代计划

↓

每个迭代的详细开发计划(技术侧、产品侧、UE侧、测试侧)

↓

迭代开发 → 文档对齐 → 验收测试

↓

下一迭代

每个迭代都包含四个维度的详细计划

  1. 技术侧:技术选型、架构设计、接口定义、性能优化

  2. 产品侧:功能需求、业务逻辑、数据流设计、边界情况

  3. UE侧:交互设计、视觉规范、动画效果、用户反馈

  4. 测试侧:测试用例、验收标准、边界测试、回归测试

文档对齐的重要性

每个迭代开发完成后,我都会对齐文档,确保代码和文档保持一致。这是实际软件开发中经常被忽视但非常重要的环节。代码和文档不一致会导致:

  • 后续维护困难

  • 新成员上手成本高

  • 知识传承断层

  • 技术债务累积

通过严格的文档对齐,我确保了:

  • :white_check_mark: 代码实现与设计文档一致

  • :white_check_mark: API 文档与实际接口一致

  • :white_check_mark: 用户故事与功能实现一致

  • :white_check_mark: 测试用例与业务逻辑一致

:bar_chart: 真实迭代数据


版本演进:v1.0.0 → v1.5.0

总耗时:2 个月

提交次数:80+ commits

代码行数:5000+ LOC

组件数量:15+ components

页面数量:7 pages

测试覆盖:30+ test files

文档数量:前期 3 个核心文档,后期 1 个索引文档

:counterclockwise_arrows_button: 开发时间线

实际开发时间:7 天(分散在 1.5 个月内)


第 0 阶段:需求梳理 + 文档编写(3 个核心文档)

第 1 天:基础框架搭建 + 核心功能实现

第 2-7 天:功能完善(英雄系统、国际化、奖励商店)

第 8-12 天:体验优化(结算系统、连音节奏、PWA)

第 13-14 天:功能扩展(家长中心、音程训练、升降号)

持续:Bug 修复和优化

每个迭代结束:文档对齐

时间跨度:1.5 个月(2026-01-11 至 2026-02-22)

实际开发:7 天(有代码提交的天数)

效率提升:AI 辅助开发效率提升约 6 倍

:light_bulb: 关键洞察

  1. 需求先行:先写规划文档,再开发,避免返工

  2. 文档驱动:每个功能都有据可依

  3. 四维规划:技术、产品、UE、测试四个维度全面考虑

  4. 文档对齐:每个迭代结束后对齐文档,确保一致性

  5. 小步快跑:平均每个功能 2-3 次提交完成

  6. 快速迭代:每周发布 1-2 个版本

  7. 测试驱动:每个功能都有对应测试


:bar_chart: 五、成果展示

5.1 获得的荣誉

5.2 实际效果

产品使用后,我观察到了一些变化:

孩子的行为

  • 会主动翻书查阅音符

  • 做节奏计算时会扳手指

  • 知道练习可以获取金币,金币可以兑换奖励

我的观察

  • 孩子对识谱练习不再那么抗拒

  • 金币奖励机制确实有激励作用

  • 数据记录让我能看到孩子的练习情况

5.3 功能完成度

核心功能已全部完成:识谱练习、连音节奏、音程训练、奖励商店、家长中心等。


:light_bulb: 六、经验总结:AI 辅助开发的得与失

6.1 核心收获

  1. 需求先行,文档驱动
  • 在第一个代码提交之前,先准备好完整的规划文档

  • development-plan.md、user-stories.md、ui-ux-design-specs.md

  • 避免返工,提高开发效率

  1. 完整的软件工程流程
  • 需求分析 → 用户故事拆分 → 优先级排序 → 迭代计划

  • 每个迭代包含四个维度:技术侧、产品侧、UE侧、测试侧

  • 每个迭代结束后对齐文档,确保代码和文档一致

  1. AI 辅助开发的正确姿势
  • 让 AI 帮你生成规划文档

  • 让 AI 帮你拆分任务和用户故事

  • 让 AI 帮你设计 UI/UX 规范

  • 然后才开始编写代码

  1. 小步快跑,快速迭代
  • 平均每个功能 2-3 次提交完成

  • 每周发布 1-2 个版本

  • 根据反馈快速调整

6.2 Token 消耗的权衡:文档先行的代价

实际消耗数据

基础额度

  • 初始额度:600 次

  • 周年庆赠送:800 次

  • 合计:1400 次

后续充值

  • 多次叠加包充值

  • 具体场景:在需求文档没有减少的情况下,用 solo 模式迭代两个功能模块充值了两次 $7 叠加包

主要消耗来源

  • 读取文档形成上下文(主要消耗,占比最大)

  • 代码生成和修改

  • 调试和问题解决

  • 测试用例生成和执行

后期策略调整

  • 从维护 3 个核心文档 → 简化为 1 个索引文档

  • 索引文档的作用:

  • 作为代码的索引,快速定位功能

  • 作为新需求的上下文,减少重复解释

  • 记录关键决策和架构设计

我的最终选择

  • 前期:完整文档驱动,确保方向正确

  • 后期:索引文档,降低 Token 消耗

  • 关键:根据项目阶段灵活调整文档策略

6.3 文档先行的价值

虽然 Token 消耗较大,但文档先行确实有帮助:

我的实际体会

  • 写文档的过程让我想清楚了很多问题,避免了开发过程中的反复修改

  • 有文档在,AI 能更快理解项目上下文,开发效率更高

  • 文档让我对产品的整体方向有清晰的把控

成本权衡

  • Token 消耗是实实在在的成本

  • 但如果方向错了,返工的成本更高

  • 所以我选择前期多花点 Token,确保方向正确

6.4 建议

如果你也想尝试 AI 辅助开发:

  1. 先写文档,再写代码:需求先行,文档驱动

  2. 根据阶段调整策略

  • 初期:完整文档,确保方向正确

  • 后期:索引文档,降低成本

  1. 文档对齐很重要:每个迭代结束后对齐文档

  2. Git 提交保留开发历史

  • 文档删了也可以从 Git 历史找回

  • 方便后期写文章、复盘总结

  • 保留完整的开发轨迹

  1. 降低 Token 消耗的技巧
  • 使用索引文档代替完整文档

  • 只在必要时读取完整文档

  • 定期清理过时的文档内容

  • 将大文档拆分为小文档,按需读取

  1. 充分利用 AI:让 AI 帮你生成规划文档、用户故事、设计规范

  2. AI 评审 + 人工审核

  • 先让 AI 从不同角度评审(需求评审、技术架构评审、设计评审、测试用例评审)

  • 让不同的 Agent 从不同角度给出意见,就像"元芳你怎么看"

  • 最后人工审核,做最终决策

  1. 持续迭代:小步快跑,快速迭代

:memo: 结语

这个项目从最初的陪练痛点出发,通过 AI 辅助开发,一步步迭代成一个功能完整的产品。最重要的是:需求先行,文档驱动。在第一个代码提交之前,就已经准备好了完整的规划文档。

代码只是起点,创造才是终点。

PianoFlow 在 AI 的 demo 展示活动中获得好评,让我意识到:音乐教育不应该只是一个工具,而应该是一个有温度、有故事的世界。接下来我将开发一款全新的"音乐 + 游戏 + 教育"游戏,实现自己的梦想。

我的底气来自哪里?

  • 幼时的游戏经历和动漫幻想,让我对世界观构建有独特的理解

  • 9 年的软件领域经验,让我有能力将想法变为现实

  • AI 的双重加持:帮助我跨越游戏开发和音乐教育体系的知识鸿沟

希望 PianoFlow 能帮助更多琴童快乐学习,也希望能给同样在使用 AI 辅助开发的你一些启发。目前产品已申请软件著作权。

也许,这就是我一直在等待的机会。


欢迎交流讨论! :musical_keyboard::sparkles:

转载请注明出处


作者:Melody Architect(AI共创)

发布日期:2026 年 3 月

5 个赞

非常棒!!

2 个赞

这个好,太牛了 :woman_mechanic: :100:

1 个赞

很厉害!!

2 个赞

真不错,细致,有想法有行动

1 个赞