我一开始只是想做一辆小狗咖啡车
我最开始真没把它想得那么严肃。
当时脑子里大概只有几个东西:小狗、咖啡、骨头、等级、一个暖一点的点单页面。
尾巴咖啡刚开始的时候,我把大部分心思都花在小狗店长、骨头、成就、等级和分享卡上。用户来到这里,应该有名字、物种和自己的档案。他喝过几杯,攒了多少骨头,解锁过什么成就,我对这些东西的兴趣远高于“下单成功”四个字。
这部分做起来很开心。按钮可以换成毛茸茸的文案,个人页可以铺暖色,等级和成就也能带一点 Furry 圈的身份感。每改一处,页面就更像尾巴咖啡。
真实订单进来以后,我开始把注意力从这些细节上挪开。
第一笔订单来了
用户点下支付后,钱、券、库存和订单状态必须一起对上。打烊后要拦住下单,余额不足要给出明确结果,优惠券随取消订单返还。前端传来的金额不能照单全收,店员接单以后,用户那边也要及时更新。
我之前总盯着 C 端。页面滑起来顺不顺,动效舒不舒服,文案有没有尾巴咖啡的气口。涉及真钱以后,用户更关心余额有没有扣错,订单卡住时能不能恢复。
我开始补数据库事务、后台权限和订单校验,也补取消时的回滚、库存扣减、商品上下架。哪一步写错,都可能扣错钱或卡住订单。
用户打开页面先找车
固定门店的地址可以几年不变,coffee truck 每次出摊都可能换地方。用户打开页面,先看车在哪、有没有营业,确认能找到以后才会翻菜单。
首页因此要显示营业状态、距离和下单入口。打烊时还得告诉用户下一次安排去哪里看。地图上的点也要跟着店长更新,后台则要负责切换营业状态、记录停靠点和处理跨城距离。
我原本把位置当成地图上的一个组件,后来它占据了首页最重要的位置。用户愿意多翻两下菜单,却没耐心猜车停在哪。
Pad、收银台和打印机
后台在电脑上看着很整齐。换到横屏 Pad,店员还要同时收钱、接单、听提示音、贴标签,原先那些“差不多能用”的地方马上会露出来。
新订单要醒目,取餐号要大,规格和备注要一眼看完。接单、出餐不能挨得太近,右侧 POS 展开时也不能把制作队列挤成一条窄缝。店员忙起来不会研究界面,他只想少点一次,少找一秒。
现场收银接进来后,系统还要区分线上订单、待收款和线下补单。支付状态混在一起,店员就可能把没收钱的订单当成已付款。
热敏打印又添了一组问题。屏幕上的标签看着清楚,到了纸上可能字太小、方向转错,灰阶也会糊成一片。标签贴到杯子上以后,店员只扫一眼,用户还可能把它带走。
后来我做了 Android WebView 壳、打印桥、接单后自动打印和真实尺寸预览。二维码、小票插图和品牌样式都要服从纸张尺寸。实物打出来不对,我就回去继续改。
用户不会天天打开点单页
用户某天路过喝了一杯,下一次想起这辆车可能已经是两周后。页面做得再顺手,也很难让他凭空想起尾巴咖啡。
我于是加了 PWA、QQ bot、分享卡、抽奖和商城。用户可以把页面留在桌面,也可以在群里查营业状态、位置、签到、排行榜和卡券。群员问一句车在哪,其他人也能顺便看到;有人抽奖或晒分享卡,群里就多一次关于尾巴咖啡的消息。
骨头、等级和成就负责记录用户来过几次。喝完一杯以后,账户里会多几根骨头,等级往前走一点,偶尔还能解锁成就或换点东西。下一次打开页面时,他能看到上次留下的记录。
功能越多,后台要核对的东西也越多。店长得知道骨头从哪来,优惠券有没有发对,抽奖记录能不能追到具体用户。
我开始看经营数据
店长需要知道哪款商品卖得动,几点最忙,线上和现场各有多少订单。游客会不会注册会员,哪个停靠点有人召唤,库存和成本为什么对不上,这些也得从后台查出来。
只凭当天忙不忙,很容易判断错。某款新品卖了几杯,也未必值得立刻加量。我可以从后台按日期、时段、商品、用户和地点往回查,看看那天究竟发生了什么。
我也开始处理生产环境的问题。登录挂了,用户进不来;订单接口挂了,店员接不到单;地图出错,用户会去错地方。数据库里一条状态写错,会员奖励和库存都可能跟着乱。
代码上线以后,当天出摊的人和已经付钱的人都会碰到它。我得知道服务有没有启动、部署能不能回滚,数据库出了问题该从哪里查。
现在我会多检查几件事
项目里现在有 Next.js、Supabase、Realtime、R2、自托管服务器、Nginx 和 systemd。它们要能部署、排错和回滚。登录失败、地图空白或者订单卡住,用户都会记很久。底层用了哪些技术,他不关心。
我想写一句轻松的文案,得先把错误态处理好;会员卡做得再漂亮,等级规则和历史奖励也要对齐。标签想做出贴纸感,先过热敏打印的黑白和尺寸。抽奖开出去以后,后台必须查得到谁中了奖。
我现在看到一个新页面,还是会先在意它好不好看。接着就会去检查按钮会不会误点,固定底栏有没有挡住内容,订单状态能不能同步,生产数据出了问题该怎么补。
尾巴咖啡还很小,也会继续改。出摊那天,有人会拿它找车、付钱,店员会靠它接单和打印。只要这些事情还在发生,我就得把它当成一套正经系统维护。
我一开始只是想做一辆小狗咖啡车
