Flame Tree Pick 起源于一个很小的烦恼:每到饭点,我们都会问彼此今晚吃什么,最后却总是绕回同样的三家店。我们想做一个能打破僵局的工具,但它应该有一点轻盈和手感,而不是算法的压迫感。
石子的隐喻
我们不想设计一个普通的“随机选择器”。这个品类里已经有太多老虎机式界面和强势的新手引导。于是我们换了一个问题:一个温暖的随机工具应该长什么样?答案是一颗石子——你把它握在手里,掂一掂,轻轻摇一下,然后看它落定。
摇一摇,让命运来挑。决定不是你做的,你只是帮它落地。
为什么 local-first
Pick 没有账号、没有 analytics、没有云同步。你的选项列表只存在本地 SQLite 文件里。我们这么做,是因为这个产品许下了一个承诺:“这是你的工具,不是我们的工具。”当你只是想在拉面和披萨之间做个选择,却必须先登录时,这个承诺就破了。
- 核心流程没有任何网络请求——在飞机上、地下室里,甚至很久以后,它都能继续工作。
- SQLite 意味着你的决策数据不会被应用绑死:你可以用任何工具打开那份文件。
- 即使我们明天关闭工作室,你的数据也仍然留在它一直所在的地方——你的设备上。
打磨物理手感
摇一摇交互使用设备加速度计,但真正的手感来自大量细小调参。最后我们选了一组偏柔的弹簧参数,带一点点 overshoot:石子会越过目标大约 6% 再回落。眼睛几乎察觉不到,但身体会读出“重量”。
final spring = SpringDescription(
mass: 1.2,
stiffness: 180,
damping: 14, // just under critical → 6% overshoot
);
我们学到了什么
大多数决策工具优化的是正确性:基于历史、权重、机器学习,给你一个“正确答案”。我们优化的是收束感:终于做出决定后的那一点轻松。事实证明,最温暖的工具,往往是那个及时退到一边的工具。