自发项目产品设计 · iOS · 2026

BUBU:
两个人一起减脂。

一个给两个人用的 iOS 应用,同一个八周。你拍下这一餐,这一天自己印成一张小票,七张小票装订成一页你们共同签收的手账。

BUBU

App Store

开发已完成 · 正在准备上架

我的角色
产品设计、UI、插画
范围
23 个界面 · 双人与单人
平台
iOS · iPhone 17
状态
已完成开发 · 做了一轮访谈 · 接下来是 TestFlight
iPhone 上的 BUBU 首页:第 24 天、两个人的进度,以及今天各自记的餐

01 / 它为什么存在

搭子好找,也好散。

搭子只对应一件事:饭搭子、健身搭子。它吸引人的地方在于要求很低,散得快也是同一个原因。没有东西把两个人绑在一起,一周之后就悄悄停了,然后重新开始找。减脂是其中最难的一种,因为它要撑两个月,不是一个晚上。

整个产品建立在三条规则上

01 / 只共享一件事

你们只共享吃了什么。

没有聊天、没有动态、没有主页、没有昵称。在这场挑战里,你们彼此就是一个用户 ID 和一盘饭。

02 / 有固定的终点

它在某一天结束,不靠谁决定。

开始时选 4 周、8 周或 12 周,两个人的页面倒数同一天。没有人需要当那个先退出的人。

03 / 缺席是看得见的

漏掉的那天会印成一块空白。

不催、不发让人内疚的通知。当天的小票上留一个虚线空框,计数写着 MISSED 1 / 3。

02 / 它怎么运作

拍下这一餐,剩下的自己印出来。

没有表格要填。你拍一下盘子,app 把它从背景里抠出来,之后整个产品就是三样印刷品:一天一张小票,一周一页手账,还有一条贯穿整场挑战的跑道。

一天

23:59,这一天自己封成一张小票。

小票本来就读作一个已经结清、已经合计过的日子。封存意味着昨天不能再改得好看一点,这是对方手上那一张唯一值钱的原因。它同时也是今晚吃什么最有用的答案:一顿真实的饭,被一个跟你同一套计划的人吃掉。

两个人当天的小票,并排印在黑色底上一张完整的小票:每一餐带时间、运动那一行,以及这一天的进度

一周

七张小票,装订起来摊开。

手账是整个产品里唯一把两个人显示成一件东西的地方。一页页翻过去是封面、扉页、我的一周、TA 的一周;摊平了看,两周的内容横跨订口一起读。

合着放在桌上的手账我的减脂日记,还有画在衬页上的你们俩七天,每天记着吃了什么、做了什么同一页,由对方记两周横跨订口,各自夹着这一周掉了多少

终点

一条跑道,两个人,尽头是一个日期。

首页把你们俩放在同一条跑道上,挑战页放着规则和计数。日期到了,最后一屏是庆祝,和一张可以分享出去的小票。

挑战页:两个人的进度,对照着规则目标达成页:一个举着手的小人,和最终的数字

03 / 访谈改变了什么

两次访谈,改了两处。

TestFlight 之前,我找了两个从相反方向接触这个 app 的人聊:一个会用它的人,一个做过这类东西的人。

谁
一位有两万粉丝的健身博主
她 / 他说了什么
她喜欢这套界面,喜欢到想自己一个人用。她的意思是,很多人会冲着好看来,手边未必有搭子,app 不该把这些人挡在门口。
改了什么
加了单人模式。同样的首页、手账和挑战,跑道上只有一个人,手账里只有你自己那一周。配对变成以后可以加的东西,不再是进门的条件。
单人模式的首页:跑道上只有一个人单人模式的手账:一周,一页单人模式的挑战页
谁
一位有三年经验的产品设计师
她 / 他说了什么
他担心的是冷启动。新 app 里线上匹配陌生人的体验非常差,因为陌生人还不够多:要么一直等,要么配到一个和你完全不像的人。
改了什么
把匹配改成对你是一对一、对系统是一对多。你只会看到一个搭子,按目标接近、起始体重接近、周期一样长来选。但你看到的这个人可能已经是别人的搭子了,这是允许的。A 和 B 配成一对之后,C 进来时和 A 最像,C 就配给 A;A 看到的还是 B,B 看到的还是 A。没有人需要等到凑齐偶数才能开始。

第三个人进来时

CAB
  • A看到 B
  • B看到 A
  • C看到 A
组队成功页:搭子来了,两个人的目标并排

两次访谈聊的都是原型,那时还没有任何一对真实的搭子跑完过一场挑战。

04 / 视觉

平的纸、细线,照片直接印在上面。

整个 app 只用一种材质。没有东西浮起来,没有阴影,除了手机本身没有圆角。

四个面,一种墨

  • 纸

    #F6F6F4

    除手账和小票以外的每一屏

  • 板

    #C8C5AD

    手账的封面布,以及它躺着的那张桌面

  • 页

    #F6F5EE

    手账自己的纸,比 app 暖一点

  • 墨

    #0E0E0E

    文字、分隔线、黑色按钮和小票底色

两款字,没有第三款

0123456789 · MISSED 1 / 3 · 08:05

所有数字、标签和时间都用 Geist Mono,因为小票是印出来的东西,印出来的数字要对齐。句子用 Noto Sans SC。没有任何一处用手写体:app 里唯一的手写是画上去的,不是打出来的。

这套系统拒绝的东西

  • 不用投影,也没有层级高度。卡片是一条线,不是一层。
  • 不用圆角。哪里都是直角,按钮也一样。
  • 照片不留白边。一餐被从背景里抠出来,直接印在纸上。
  • 每屏只有一个实心按钮,墨色,就是一个矩形。唯一反过来的地方是小票:纸色的字印在黑底上。
设定目标:身高、当前体重、目标体重用等宽字,以及 4、8、12 周的选择
设定目标这一屏。数字用等宽字,4 / 8 / 12 周直接排成三个数字而不是一个控件,整屏只有一个墨色按钮。

05 / 这些小人

一支笔,五段动画。

这个 app 没有吉祥物,也没有插画库。它只有两个小人,用和界面分隔线同一条线画出来,只在产品需要一个人而不是一个数字的时刻出现。

  • 跳绳

    空状态,以及两场挑战之间的间隙

  • 你们俩

    确认组队成功的那一屏

  • 一个人

    单人模式下的首页

  • 冲线

    最后一天撞过终点线

  • 达成目标

    庆祝页,以及从那里分享出去的小票

动画只在进入画面时播放,离开就停。

06 / 全部界面

整个 app,按你第一次用的顺序。

19 个界面,在 iPhone 17 模拟器上截的,从注册到设置。这一排可以横向拖动。

  • 注册01 · 注册
  • 单人还是双人02 · 单人还是双人
  • 设定目标03 · 设定目标
  • 邀请搭子04 · 邀请搭子
  • 组队成功05 · 组队成功
  • 首页 · 双人06 · 首页 · 双人
  • 今日小票 · 双人07 · 今日小票 · 双人
  • 今日小票 · 我的08 · 今日小票 · 我的
  • 手账本 · 封面09 · 手账本 · 封面
  • 手账本 · 我的一周10 · 手账本 · 我的一周
  • 手账本 · 摊开11 · 手账本 · 摊开
  • 挑战 · 进度12 · 挑战 · 进度
  • 挑战 · 规则13 · 挑战 · 规则
  • 目标达成14 · 目标达成
  • 首页 · 单人15 · 首页 · 单人
  • 手账本 · 单人16 · 手账本 · 单人
  • 挑战 · 单人17 · 挑战 · 单人
  • 设置18 · 设置
  • 改名19 · 改名

07 / 上架

做完了什么,离 App Store 还差什么。

这不是一个原型,是一个能跑起来的版本。剩下的工作属于送审,不属于设计。

已完成

  • 23 个界面,设计并开发完成
  • 双人和单人两种模式
  • 小票、手账和分享卡
  • 一对多的匹配,来自第二次访谈
  • 五段手绘动画

离上架还差

  • 一轮 TestFlight,找真实的搭子来用,也是第一次真正测匹配
  • 隐私标签,以及匹配到底需要哪些数据
  • App Store 的截图和文案
  • 送审,以及审核提出的任何要求

有一件事仍然没验证:整个产品压在一个假设上,就是看到一个陌生人的小票是有动力的,而不是让人不舒服。两次访谈推着产品往前走了,但两次访谈不等于八周的使用。TestFlight 就是去看这个的。