Skip to content

Independent product / built solo

Holdfast.

A fasting timer that lives outside the app.

My role
Sole engineer
Working with
Solo
When
2026
Holdfast / product screen
Holdfast / product screen

The problem

A fasting timer is an app you deliberately do not want to open. The whole job happens while the phone is in your pocket: knowing how far in you are, and being told the moment you are done. Most fasting apps treat the timer screen as the product, which means the one thing you actually need — the state of your fast at a glance — is the thing that costs you a launch, an unlock and a tap.

What I built

My part
in the product.

Built alone — research, design, build and store release.

  1. 01

    A Live Activity and Dynamic Island presentation so the running fast is readable from the lock screen without opening anything.

  2. 02

    Home-screen and lock-screen widgets rendered in SwiftUI through WidgetKit.

  3. 03

    A real alarm at the end of a fast using AlarmKit, rather than a notification that a silent switch or a focus mode can swallow.

  4. 04

    Fasting stages, history, and a correction flow for when you forget to start or stop the timer — which is the normal case, not the edge case.

  5. 05

    Insights over accumulated history, and a paywall gating the widgets and insights while the timer itself stays free.

A closer look

The actual product.

Holdfast / product screen
Holdfast / product screen
Holdfast / product screen
Holdfast / product screen

Decisions worth explaining

Why it works
this way.

01

AlarmKit instead of a local notification. A notification is best-effort and can be silenced; the end of a fast is a commitment the user made and it should behave like an alarm clock, not a suggestion.

02

The core timer stays free. The paid tier is the surface area outside the app — widgets, Live Activity extras and insights — so the free version is genuinely usable rather than a trial.

03

Correction as a first-class flow rather than an edit dialog buried in settings, because mistimed starts are the most common thing that happens to a fasting timer.

Tools used on this project

Expo / React Native / SwiftUI / WidgetKit / AlarmKit

Next project

Promote ↗︎

Campaigns for brands. Paid participation for creators.

← Back to this project in selected work

Summer 2027 co-op · flexible term length

Let’s make it work.

MohammedAbdulla.

Getting things ready