Android · Kotlin Compose · 本地优先

拍一张照,
这一餐就记完了。

不用选食物、不用填克数、不用算卡路里。按下快门那一刻记录就结束了。
看得清的那部分是数据,看不清的那部分,是留给自己的。

1 步完成一条记录
3 层谁能看到这餐
1717条食物成分
9 张真实饭照
饭记的今天页:早、午、晚三餐已记录,夜宵空着

大多数饮食 App,
都死在“记之前要填太多”。

记一顿饭要选食物、挑份量、找单位,三分钟就没了。坚持不到一周,这个 App 就从手机里消失。 饭记赌的是另一件事:把记录的成本压到接近零,剩下的交给时间。

01 / 记录

快门就是提交键

按下去,这一餐就记完了 —— 自动落到早/午/晚/夜宵,中午吃三次也各记各的,聚合在一行里。 相册补录也一样,不用二次编辑。

02 / 社交

看得见,但看不全

每餐三档:私房、朦胧、一起。选朦胧时对方只看得到时间、马赛克图和心情, 拿不到原图。评论也分三种:锐评、鼓励、监督。

03 / 教练

模型只管看,不算数

视觉模型只负责把照片拆成菜、估个重量;热量和营养由《中国食物成分表》算出来。 数字不交给模型编。

屏幕右下角还挂着一个小助手:问「一碗花甲米线多少卡」,它同样查表算区间; 问「我今天还差多少」,它直接读你的记录回答,不绕模型。

它长这样

下面全部是真机截图,不是设计稿。想自己点的话,进 可点导览。

空白的今天页,四餐都还是加号
今天 · 空一天还没开张
今天页三餐已记录,带心情色点
今天 · 有记录一行一餐,色点是心情
拍照界面,取景框对着饭菜
拍照进来就是取景框
一餐的详情页,大图加教练入口
详情大图 + 心情 + 谁能看
教练看完这一餐给出的点评
教练看过之后一句话,不啰嗦
一餐下面的评论,锐评和鼓励
评论锐评 / 鼓励 / 监督
好友动态,能看到对方吃了什么
好友动态按 ID 加人
一餐多顿的聚合
一餐多顿中午吃三次也不打架
我的页面
我的多账号、示例数据

三块东西,一条链路

App 只认两个地址(Supabase 与教练服务),换域名各改一处;密钥不进 APK。

Client

Android App

Kotlin 2.1 · Jetpack Compose · Room 唯一数据源 · CameraX · Coil。
图片进本地库,UI 只读 Room。

Backend

身份 / 好友 / 同步

Supabase:Auth + Postgres + Storage。行级权限(RLS)写在库里,谁能看原图、谁只配看马赛克,由策略定。

Agent

营养教练 · 小助手

Render 上的独立 Node 服务:DeepSeek 拆菜估重,数字交给 food_composition_full.csv(中国食物成分表第 6 版);小助手的问答(/api/chat)也走它。

装到手机上,才是完整的一次。

网页里能看能点,但拍照、相册、通知这些只有真机给得了。