All projects
2025 · Design + Engineering

Flame Tree Pick

A Companion for Life's Little Dilemmas

A decision-making companion with the soul of a warm pebble. No algorithms, no login walls — just satisfying physics and pure randomness.

FlutterSQLiteLocal-FirstMaterial 3
Flame Tree Pick interface screenshot
iOS · Android

Flame Tree Pick started from a small annoyance: every dinner-time we’d ask each other what to eat, and every night we’d land on the same three places. We wanted a tool that could break the deadlock — light and tactile, not algorithmic pressure in disguise.

The pebble metaphor

We didn’t want to design a “random picker” app. The category is full of slot-machine UIs and aggressive onboarding. Instead we asked: what does a warm version of randomness look like? The answer was a pebble — something you hold, weigh, give a little shake, and watch settle.

Give fate a shake. The decision wasn’t yours; you just helped it land.

Why local-first

Pick has no account, no analytics, no cloud sync. Your option lists live in a local SQLite file. We chose this because the product makes a promise — “this is your tool, not ours” — and that promise breaks the moment you have to log in to choose between ramen and pizza.

  • Zero network calls in the core loop — the app works on a plane, in a basement, forever.
  • SQLite means your decisions outlive the app: you can crack open the file in any tool.
  • If we shut the studio down tomorrow, your data stays where it’s always been — on your device.

Building the physics

The shake interaction uses the device accelerometer, but the feel came from a lot of small tuning. We landed on a softened spring with a tiny over-shoot — the pebble nudges past its target by ~6% then settles, which reads as “weight” to the body even though the eye barely registers it.

final spring = SpringDescription(
  mass: 1.2,
  stiffness: 180,
  damping: 14, // just under critical → 6% overshoot
);

What we learned

Most decision tools optimize for correctness — giving you the “right” answer based on history, weights, ML. We optimized for closure: the small relief of having decided. Turns out the warmest tool is the one that gets out of the way.