乐于分享
好东西不私藏

合和适:我用 AI 做了一个穿搭管家小程序

合和适:我用 AI 做了一个穿搭管家小程序

「每天早上站在衣柜前发呆 10 分钟」——这不是段子,是很多人的日常。

我在解决什么问题

穿衣搭配是高频但低效的决策。你可能也经历过这些场景:

  • 衣柜塞满了,但总觉得「没衣服穿」
  • 买了新衣服回家,发现和衣橱里 80% 的单品搭不上
  • 出门前临时搭一套,到了公司才发现配色违和
  • 旅行打包全凭感觉,到了目的地才发现少带了关键单品

「合适」 就是来解决这些问题的。它不是又一款穿搭推荐 App——它围绕 你自己的衣橱 来工作,AI 的建议基于你真正拥有的衣服,而不是商家想卖给你的。


核心功能一览

1. 智能衣橱管理

拍照或从相册选图,AI 自动抠图去除背景,并识别品牌、颜色、类别。你只需要确认一下,单品就归入你的数字衣橱了。

每件单品支持品牌、材质、花纹、季节标签、价格、购买链接等字段。衣橱不足 5 件时,首页会智能推荐基本款补充缺口。

2. 穿搭编辑器(试衣间)

把衣橱里的单品拖拽到画布上,自由排列组合。支持:

  • 拖拽 & 缩放:手势操作,所见即所得
  • 背景切换:纯色 / 渐变 / 自定义图片
  • 贴纸 & 文字:15 种 PNG 透明贴纸 + 6 色可换文字
  • 穿搭统计:一键查看单品数量、穿着次数、日均穿着率
  • 购买链接:给单品添加购买链接,下次想回购直接跳转

3. AI 造型师

和 AI 聊天式交互,支持:

  • 搭配推荐:「帮我搭一套约会穿的衣服」——AI 会从你的衣橱里挑单品组合
  • 穿搭评价:拍一张穿搭照上传,AI 给出配色、风格、场合适配度评分
  • 旅行打包:输入目的地和天数,AI 帮你从衣橱里选出最精简的打包清单
  • 衣橱缺口:分析你的衣橱,告诉你缺什么类型的基本款

AI 造型师支持 18 种 Persona(9 女 + 9 男),每种有不同的风格视角。

4. AI 色彩分析

上传一张自拍,AI 会:

  1. 分析你的面部特征
  2. 检测匹配的色系
  3. 根据体型进行微调
  4. 输出专属调色板 + 穿搭建议

再也不纠结「我是冷皮还是暖皮」了。

5. 日历穿搭记录

在日历上标记每天穿了什么,支持月视图和日视图。久而久之,你能看到自己的穿衣习惯——哪些单品穿了 30 次,哪些买回来就一直吃灰。

6. 分享穿搭

7. 收藏夹 & 归档

把不常穿的单品归档(不删除),需要时一键恢复。收藏夹支持自定义命名,按风格/场合分类管理。


开发过程中踩过的坑

坑 1:微信小程序的 <Input type="nickname"> 审核机制

微信提供了原生昵称组件,用户点击「使用微信昵称」后,微信会先做一轮审核,审核通过后才通过 onNicknameReview 事件返回最终值。不是onInput 或 onBlur

如果只监听 onInput,用户选了微信昵称但输入框里还是空的——因为审核还没过。这是文档里没有明确说明的细节。

坑 2:云数据库安全规则默认全开

微信云开发默认允许客户端直接读写数据库。也就是说,如果不手动配置安全规则,用户可以通过 wx.cloud.database() 绕过所有云函数直接操作数据。

我们最终将所有集合的权限设为 { read: false, write: false },强制所有数据访问走云函数。

坑 3:NoSQL 注入——不只是一个理论

在 comments 查询中,where.targetId 如果直接接受前端传入的对象(如 { $ne: null }),可以绕过 openid 过滤,导出全库评论。

修复方案是在云函数中新增 sanitizeWhere() 函数,递归拒绝所有以 $ 开头的键。

坑 4:AI 图片 URL 的 SSRF 风险

用户可控的 imageUrl 如果直接传入 axios.get(),攻击者可以请求 http://169.254.169.254/ 获取云服务器元数据。

我们新增了 validateImageUrl() 函数,强制 https:// + 拒绝内网 IP,还做了 DNS 预解析安全检查防止 DNS Rebinding。

坑 5:积分并发超扣

最初积分扣减是先查余额再减,存在竞态条件:两个请求同时读到余额=1,都判断够扣,结果扣成了 -1。

修复为原子操作:where({ openid, aiCredits: _.gte(amount) }) + _.inc(-amount),查询和扣减在同一次事务中完成。

坑 6:upload 路径穿越

原始 sanitizePath 函数的签名中包含了 openid,但从未在结果路径中强制使用,用户可以上传到任意路径。

修复后强制结果路径以 uploads/${openid}/ 开头,同时禁止 .. 穿越和绝对路径。


修复的问题清单

上线前我们做了两轮集中修复:

Phase 1(紧急,5 项)

  • 移除设置页面 5 处误导性「页面正在开发中」文案
  • 单品收藏按钮接入真实收藏逻辑
  • OOTD 评论按钮接入评论页
  • AI 评价移除硬编码随机回复的 Mock 兜底

Phase 2(核心功能,7 项)

  • 单品详情页支持添加购买链接
  • 穿搭详情页接入真实统计面板
  • 通知中心改为真实数据源
  • 穿搭编辑器增加文字 & 贴纸功能
  • 个人资料分享页生成真实小程序码
  • 首页基本款推荐改为动态筛选

安全修复(7 项)

  • NoSQL 注入防护
  • 云数据库安全规则配置
  • AI 函数积分限制
  • SSRF 防护
  • Upload 路径隔离
  • creditHistory 客户端写保护
  • 私密穿搭越权修复

诚实的不足

说了这么多做好的,也必须承认还没做好的。「合适」还远不是一个完成品。

AI 还不够「懂你」

AI 造型师目前还无法在聊天中直接引用你的衣橱单品。当你说「用我那件白衬衫搭一套」,AI 其实不知道你的白衬衫长什么样。附件面板中的「服装」和「收藏」入口还是空的——这是体验上最大的缺口。

AI 试穿:最难也最让人期待的功能

上传自拍 → 选择衣物 → AI 生成换装效果图。这是用户问得最多的功能,也是技术上最有挑战的。混元大模型的换装 API 还在验证效果,暂时没有开放。

色彩分析可以更深

目前的色彩分析给出了一张调色板,但缺少「这些颜色和你衣橱里哪些单品匹配」「你的衣橱缺什么色系」这类更深度的洞察。素材已经准备好了(33 种材质、8 种花纹),代码还没接。

衣橱管理还比较「平」

缺少多维度筛选(品牌/材质/颜色/季节)、缺少可视化的衣橱统计(环形图、分类占比、穿搭价值)。insights 页面有了数据基础,但呈现方式还是列表为主,不够直观。

深色模式:有开关,没灵魂

设置里有「浅色/深色/跟随系统」的切换入口,但大量页面的样式并没有做暗色适配。切到深色模式后,部分页面可能看着有点奇怪。

积分充值和专业版

新用户送 9 积分,但花完了就没了。积分充值的代码已经写好,却因为缺少微信支付商户号无法上线。专业版订阅同样需要企业资质。

社交功能空白

没有社区动态流,没有「搭配在一起」的协作玩法,通知系统也只合成了积分记录。如果你期待的是一个小红书式的穿搭社区,「合适」目前给不了。

但正因为有这些不足,才有迭代的方向。 每一个缺口,都是下一次更新的动力。


未来展望

短期(已在排期):

  • AI 造型师附件选择器:在聊天中直接选择衣橱单品作为上下文
  • 商品搜索 & 网页剪辑:粘贴淘宝链接自动抓取商品信息
  • 材质/花纹选择器接入:33 种材质 + 8 种花纹素材已就绪
  • 收据拍照导入:OCR 识别 → 自动创建单品

中期

  • AI 试穿:自拍 + 衣物 → AI 换装效果图
  • 衣橱过滤器系统(品牌/材质/颜色/季节多维度筛选)
  • 衣橱统计可视化(环形图 + 分类占比 + 穿搭价值)
  • 深色模式全面适配
  • 互动通知(点赞/评论/关注提醒)

长期

  • 会员订阅 & 积分充值体系
  • 社区动态流(搭配在一起)
  • 和时尚品牌/电商的合作推荐
  • 多平台扩展(H5 / App)

技术栈

技术
前端框架
Taro 4.2 + React 18 + TypeScript
状态管理
Zustand
样式
Sass + CSS Variables 设计系统
后端
微信云开发(云函数 + 云数据库 + 云存储)
AI
腾讯混元大模型 + DeepSeek + remove.bg
测试
Vitest + Testing Library

写在最后

做「合和适」的初心很简单:让 AI 基于你真实拥有的衣服给你建议,而不是让你买更多不需要的东西。

它现在还不完美。AI 还不够懂你,试穿还没上线,深色模式只是个半成品,社交功能还是空白。但每一行代码都在让它离「完美」更近一步。

如果你也每天早上在衣柜前发呆,欢迎试试「合和适」。不完美,但合适。