Back

Builder

Building
Personal Project2025Present

A pull redirection app. When the pull hits, you open Keel, pause, and redirect for 20 minutes. The pull passes. Over time the wiring weakens. Keel shows you the proof.

10Beta users
v1→v3iterations
0servers

the problem

Every wellness app pushed me toward more numbers: calories, macros, steps, HRV. The more I tracked, the further I felt from understanding myself.

I wanted to understand how I feel, and solve something at its root, rather than at the surface level.

V1 → V2 · The gut-mood tracker

v1 → v2

I logged everything for a week and still couldn't tell you why I felt flat on Tuesday.

Beta user, v1

V1 had food tracking, calorie logging, mood tracking, gut score, and a wellness dashboard. Users were logging but not connecting.

V2: removed everything except gut score and mood log. The job is not to track what you eat. The job is to help you notice how food makes you feel.

four features

FEATURE 01

Gut Score

A single daily score reflecting the connection between what you ate and how you feel. Not a metric to optimise. A mirror to observe.

FEATURE 02

Mood log

A simple mood scale logged once a day. No notes, no journaling, no friction. Just a number that builds into a pattern over time.

FEATURE 03

Meal log

Free text input. Gemini categorises the meal into gut-health relevant food groups. No calorie counting, no macro tracking.

FEATURE 04

Your Connection

Weekly insights showing patterns between food and mood. Helps you notice what you would never see logging day by day.

v1 / v2 diagrams

USER FLOW Onboard goal setting Log meal free text to Gemini Log mood scale only Gut Score weighted calc Your Connection insights + patterns SYSTEM ARCHITECTURE React + Vite Tailwind · React Router Gemini 1.5 Flash meal categorisation Score engine mood x food pattern Supabase auth + persistent logs

what I learned from v2

Building something generic is easy. Trying to play safe or satisfy all audiences does not work. In v2 I realised it is important to narrow down to the simplest problem possible and build something that actually solves it.

v2 → v3 · the pivot

Six months after v2 shipped, I asked beta users what problem in their daily life still felt unsolved. Almost none of them said gut health. They talked about the pull: the 11pm phone reach, the scroll that wasn't supposed to happen, the snack when they weren't hungry. V3 is built around that one moment.

The full story: what they actually said, and why the question changed

The pattern was not gut health. It was craving, a specific, embodied pull toward something the rational brain knows it doesn't want. The question changed: what do you do in the moment before you give in?

V3 is not a tracker. It is a redirect. The app is built around a single moment: when the pull hits, you open Keel, pause, and redirect for 20 minutes. The craving passes. Over time the wiring weakens. Keel shows you the proof.

three features

The Moment: feel a pull, hold, and that hold is the pause.

The Redirect: a 20-minute activity you chose in advance, not prescribed live.

The Pattern: after enough redirects, what's actually working becomes visible.

Full feature detail
FEATURE 01

The Moment

That hold is noticing and stopping combined into one motion, before you've even chosen what to do about it.

FEATURE 02

The Redirect

Chosen by you in advance, in a calmer moment, and saved. The app stays quiet while you do it. No tracking mid-activity. No instructions. Just time.

FEATURE 03

The Pattern

Not just which pulls you have most. Which redirect helps, and how often. Which feeling tends to show up right before a pull. For anyone tracking their cycle, which phase asks the most of them. Not to judge. To notice.

the friction problem

The first version of the pull flow had five steps before any relief. I rebuilt it around three principles from behavioural design: Hick's Law, Tesler's Law and Fitts's Law. I cut the flow to two steps.

Why, and what changed

Hick's Law: more choices mean slower decisions. This is the worst possible moment to slow someone down.

Tesler's Law: complexity doesn't disappear, it just has to live somewhere. So it moved to onboarding and setup, where she's calm, instead of the live moment.

Fitts's Law: small, precise targets are hard to hit under stress. Intensity became a wide, forgiving gesture instead of ten small dots.

The redesigned flow: hold, then redirect, immediately. Intensity and emotion still matter, so they moved to an optional check-in during the 20-minute wait, not before it.

The honest trade-off: that data is no longer guaranteed on every pull. Some entries have it, some don't. The pattern screen had to be rebuilt to handle that gracefully instead of assuming complete data every time.

what changed

Gone: gut score, mood log, meal log, food categories, weekly insights. Stayed: the core belief that behaviour change needs proof, not pressure.

design and tech

The PRD came before any code. For visual direction I worked through five directions in Claude Design before landing on the current one. React Native because this lives on a phone, in a moment. Not a browser tab you navigate to.

Full design and tech detail

I used Claude to co-author the PRD: problem framing, hypothesis, user flow, edge cases. Writing the spec revealed gaps that would have cost weeks in code.

For design direction I kept coming back to Tiimo, a calendar app for people with ADHD. Its calm, character-forward approach felt right for a pull app. A moment of pull is already stressful. The interface cannot add to that.

The mechanism itself, what a pull actually is and why redirecting works, became a short animation, shown once in onboarding and replayable any time from the profile.

Character animations use Lottie. Haptics on the timer. No server. No account. AsyncStorage only.

architecture

USER FLOW Feel a pull open app Hold the pause Redirect you choose it Timer runs app stays quiet Pattern updates pull weakens DATA · ALL ON DEVICE AsyncStorage pulls · redirects React Native Reanimated · Lottie Pattern engine local computation No server no account · no sync

what I learned

Three versions, three lessons. A fourth came from rebuilding the pull flow: the right amount of friction is almost always less than you think.

All four lessons in full

V1: feature count is not product quality. Five things shipped, none felt essential. V2: the right problem is not always the loudest one. Gut health was the symptom. Craving was the root. V3: removing the server was a design decision. No login, no sync, no data leaving the device. It changed how the app felt to use.

Every step in the old pull flow felt necessary until I watched someone actually try to use it mid-pull.

vision

Keel starts with pulls because that is the most universal entry point. Everyone has one they want to break.

But the mechanism is bigger. The same neural rewiring that works on a pull works on a thought spiral loop. On overthinking at 2am. On worst case scenarios. On any unhealthy pattern that has formed without your permission.

The long-term vision for Keel is a behaviour change companion. One app that helps you interrupt the loops that are running your life, one redirect at a time.

stack

React NativeExpoAsyncStorageReact Native ReanimatedLottieExpo HapticsExpo AV
Live link available soon
GitHub
LinkedIn