【Code with SOLO】用 SOLO + MTC 从零撸了一个无广告日程清单 App:一个非专业开发者的"独立开发"初体验

【Code with SOLO】用 SOLO + MTC 从零撸了一个无广告日程清单 App:一个非专业开发者的"独立开发"初体验


一、摘要

我用 TRAE SOLO(编码)+ MTC(More Than Coding,非编码工作流)从零搭建了一个无广告的日程清单应用——List Finished。整个项目从需求梳理、UI 设计、前后端开发到部署文档,全程通过 TRAE 完成。作为一个非全职开发者,我用 SOLO 搞定了 React + FastAPI 全栈架构、Zustand 状态管理、PWA 离线支持、Capacitor Android 打包等全套技术方案,MTC 则帮我搞定了 PRD 文档、竞品分析、UI 设计方案等非编码工作。整个过程让我真正体会到了"想法即产品"——我不再只是用户,我成了自己产品的创造者。


二、背景

我平时是一个重度日程管理用户。手机里装过不下十个待办/清单类 App——滴答清单、Todoist、Microsoft To Do、各种小众清单工具……但每一个用久了都有让我忍不住想卸载的毛病:

  • 广告太多:免费版恨不得在每一个操作后面塞一个开屏广告
  • 核心功能收费:想用个日历视图?付费。想重复任务?付费。想子任务?还是付费
  • 功能臃肿:我只是想记个待办,你给我塞社交、商城、积分体系是什么意思
  • 数据不自由:导出数据要付费,API 不开放,数据被锁在别人服务器里

有一天我突发奇想:我自己写一个不行吗?

但我不是专业开发者——前端能写一点 React,后端 Python 还行,但让我一个人搞定全栈 + 移动端 + 部署,说实话心里没底。直到我发现了 TRAE SOLO 和它的 MTC 模式。


三、实践过程

1. 用 MTC 做产品经理——“先想清楚再动手”

我没有一上来就写代码。我先用 TRAE 的 MTC 模式(More Than Coding)做了一轮产品梳理。

我对 MTC 说的话大概是:

我想做一个无广告的日程清单 App,核心是简洁、免费、数据自由。帮我分析一下市面上主流产品的优缺点,然后写一份 PRD。

MTC 帮我做了几件事:

  • 竞品分析:对比了滴答清单、Todoist、Microsoft To Do 等主流产品的功能矩阵和定价策略,帮我找到了差异化定位——“极简 + 全功能免费 + PWA 离线”
  • PRD 文档:输出了完整的产品需求文档,包括功能优先级排序(MVP 先做什么、V2 再做什么)
  • UI 设计方案:基于"移动优先"原则,给出了日视图/周视图/月视图的布局方案,配色走清新简洁路线

这一步大概花了十几分钟,但省掉了我在纸上画草图、纠结功能优先级的半天时间。

2. 用 SOLO 搭技术骨架——“我负责想法,它负责实现”

需求清楚了,我切到 SOLO 模式开始写代码。我对 SOLO 的第一句话是:

帮我从零搭建一个日程清单应用,前端 React + TypeScript + Vite + Tailwind,后端 FastAPI + SQLAlchemy + SQLite,要支持 PWA 离线和 Android 打包。

SOLO 几分钟就给我搭好了整个项目骨架:

├── src/                    # 前端源码
│   ├── api/                # API 请求层
│   ├── components/         # UI 组件
│   ├── hooks/              # 自定义 Hooks
│   ├── store/              # Zustand 状态管理
│   ├── sync/               # 离线同步队列
│   ├── utils/              # 工具函数
│   └── presentation/pages/ # 页面
├── backend/                # Python 后端
│   ├── app/
│   │   ├── models/         # SQLAlchemy 模型
│   │   ├── routes/         # API 路由
│   │   ├── schemas/        # Pydantic 校验
│   │   └── services/       # 业务逻辑
│   └── Dockerfile
├── public/                 # PWA 静态资源
└── capacitor.config.ts     # Android 打包配置

91 个源文件,前后端分层清晰。说实话,如果让我自己从零搭这个结构,光是想目录命名就要纠结半天。

3. 核心功能开发——“最难的部分 SOLO 都帮我扛了”

任务 CRUD + 乐观更新

这是整个应用的核心。用户创建、编辑、删除、完成任务,每一个操作都要即时响应——不能让用户点了"完成"之后转圈等两秒。

SOLO 帮我在 Zustand store 里实现了 乐观更新 + 失败回滚 机制:先更新 UI 给用户即时反馈,再异步调后端 API,如果失败了自动撤回并提示错误。12 个 CRUD 操作全部覆盖,体验非常丝滑。

日/周/月三种视图

这个功能我自己估计要写两三天——三种完全不同的布局逻辑、任务卡片的位置计算、滚动联动……SOLO 帮我在一个下午就搞定了,日视图按时间轴排、周视图按七天网格排、月视图按日历格子排,切换的时候动画过渡也很自然。

重复任务

“每天早上 9 点喝咖啡”、“每周一开周会”、“每月 1 号交房租”——这种重复任务实现起来比想象中复杂。要处理重复间隔(每天/每周/每月)、结束条件(永不结束/指定日期/指定次数)、例外日期(这周二不开会)……

SOLO 帮我设计了一套完整的 recurrence 数据结构,前端用 RecurrenceSettings 组件配置,后端用 recurrence_utils 模块解析,生成未来的任务实例。

PWA 离线 + 数据同步

这是我最想要的功能——断网也能用。SOLO 帮我实现了:

  • Service Worker 缓存静态资源,断网时从缓存加载
  • 离线操作自动写入本地同步队列(localStorage)
  • 联网后自动将队列中的操作同步到后端
  • 同步失败自动重试

Android 打包

通过 Capacitor 把 Web 应用打包成 Android APK。SOLO 帮我配好了 capacitor.config.ts,处理了 Android 权限声明、状态栏适配、返回键拦截等原生端的问题。

4. 踩过的坑

坑一:日期处理的时区地狱

这个坑差点把我逼疯。项目里需要处理"今天"、“明天”、"这周"等相对日期概念,但 JavaScript 的 Date 对象在不同时区下行为不一致。SOLO 一开始也踩了——用了 getFullYear() 而不是 getUTCFullYear(),导致不同时区的用户看到的"今天"不一样。

后来 SOLO 统一到了一套 UTC 方案:所有日期在服务端以 UTC 存储,前端显示时根据用户本地时区转换。中间还做了向后兼容处理,确保已有的数据不会因为这次修改而出问题。

坑二:Zustand 状态和后端数据的同步

乐观更新听起来简单,但真正做起来全是边界情况:用户快速连续点击怎么办?网络请求顺序乱了怎么办?用户在请求还没回来的时候又编辑了同一条任务怎么办?

SOLO 帮我处理了这些并发场景——每次操作生成唯一 ID,回滚时精确匹配;API 响应回来后用服务端数据覆盖本地临时数据,确保最终一致性。

坑三:测试环境的 import.meta 不兼容

Vite 用 import.meta.env 读环境变量,但 Jest 测试环境不认识这个语法。SOLO 试了好几种方案都翻车了,最后用了一个很聪明的办法——直接 mock 掉整个 API 模块,测试代码完全不触碰 import.meta


四、成果展示

项目信息

  • 项目名称:List Finished
  • 项目仓库GitHub - vernal-breeze/DailyList_app
  • 技术栈:React 18 + TypeScript + Vite + Zustand + Tailwind CSS + antd-mobile(前端)、FastAPI + SQLAlchemy + SQLite(后端)、Capacitor(Android)

核心功能

功能 说明
多视图切换 日视图 / 周视图 / 月视图 / 日程列表,一键切换
子任务嵌套 支持多级子任务,大任务拆小,逐步搞定
重复任务 每日/每周/每月重复,支持自定义间隔和结束条件
PWA 离线 Service Worker 缓存 + 离线操作队列,断网也能用
撤销/重做 Ctrl+Z 撤销,Ctrl+Shift+Z 重做,手滑不怕
快速添加 Ctrl+N 全局快捷键,想到什么立刻记下来
Android 客户端 Capacitor 打包,装到手机上就是原生 App 的体验
数据同步 离线操作自动入队,联网后无缝同步到后端
无广告 永远免费,永远无广告,代码开源

技术亮点

亮点 说明
乐观更新 + 回滚 12 个 CRUD 操作全部覆盖,UI 响应零延迟
离线优先架构 Service Worker + 同步队列,弱网/断网场景完整支持
全局异常处理 后端 422/500 统一错误格式,前端不再白屏
API 分页/过滤/排序 支持按优先级、分类、完成状态筛选
CI/CD GitHub Actions 自动跑 lint + 类型检查 + 测试 + 构建
Docker 部署 多阶段构建 + 非 root 用户 + 健康检查

极速启动

# 1. 克隆仓库
git clone https://github.com/vernal-breeze/DailyList_app.git
cd DailyList_app

# 2. 启动后端
cd backend && pip install -r requirements.txt && python -m uvicorn app.main:app --reload &

# 3. 启动前端
cd .. && npm install && npm run dev

打开浏览器访问 http://localhost:5173,开始管理你的日程。


五、效果与总结





从"用户"到"创造者"

说实话,这个项目对我最大的意义不是"我写了一个 App",而是我第一次完整经历了从想法到产品的全过程

以前我用别人的 App,遇到不满意的地方只能吐槽、写反馈、然后等半年也不一定改。现在我不爽了直接打开 TRAE 改代码,五分钟就能上线新功能。这种掌控感是任何第三方工具给不了的。

SOLO + MTC 的分工体验

整个过程中,SOLO 和 MTC 各司其职,配合得非常自然:

阶段 用什么 做了什么
需求分析 MTC 竞品分析、PRD 文档、UI 设计方案
技术选型 SOLO 确定技术栈、搭建项目骨架
核心开发 SOLO 前后端全部功能实现
代码优化 SOLO 重构、加测试、搭 CI/CD
文档输出 MTC README、部署文档、参赛文章

MTC 让我在写代码之前就把产品想清楚,SOLO 让我在想清楚之后快速实现。两个模式组合起来,就是一个完整的"单人产品团队"。

说点掏心窝的话

我之前一直觉得"独立开发"是专业程序员的事——要会前端、会后端、会设计、会运维……一个人怎么可能搞得定?但 TRAE SOLO + MTC 真的把这个门槛降到了"只要你有想法"。

我不是说它完美无缺。中间也踩了不少坑,有些地方 SOLO 生成的代码我也要自己改一改。但关键是——它让我迈出了从 0 到 1 的那一步。没有 SOLO,这个项目可能永远只存在于我的脑子里。

下一步规划

  • 认证系统:加用户登录,支持多设备数据同步
  • 日历集成:接入系统日历,和其他 App 联动
  • 小组件:Android 桌面小组件,不用打开 App 就能看到今天的待办
  • 主题定制:支持自定义配色和字体

想和大家聊聊

  • 你最受不了现有日程/待办 App 的什么"反人类设计"?
  • 如果让你自己做一个 App,你最想解决自己生活中的什么痛点?
  • 对于"非专业开发者用 AI 做产品"这件事,你怎么看?

欢迎在评论区交流!如果有什么功能建议,直接说,我可能下一个版本就加上了。


参与贡献

欢迎提交 PR 或 Issue,一起把这个 App 做得更好!

  1. Fork 本仓库
  2. 创建特性分支(git checkout -b feature/AmazingFeature
  3. 提交更改(git commit -m 'Add some AmazingFeature'
  4. 推送到分支(git push origin feature/AmazingFeature
  5. 打开 Pull Request
  6. github网址

开源协议

本项目采用 MIT License 协议开源。