← All posts
Design
2 min read

Three moments to ask for an install, and only three

PaceStreak held back the browser's install prompt and then hardly ever offered its own. Now it asks on the first visit, on a later day and after the first session, once each, and Settings still works any time.


PaceStreak is a web app you can install: it opens from the home screen, works without signal and logs a session in two taps. Until today, though, almost nobody was told that. You had to go into Settings and find the button.

Why the browser didn’t ask

Chrome fires a beforeinstallprompt event when it decides a site is installable. The app calls preventDefault() on it and keeps the event, so the browser’s own mini-bar never appears and the app can show the real prompt later, at a better moment. That part is standard and right: the browser’s bar shows up on the first page load, before anyone knows what the app is.

The problem was the “later”. The only automatic offer was a card on Today that appeared after your first logged session, waited 14 days after a dismissal, and competed with every other card for the same spot. In practice, it rarely won.

The three moments

There’s now a small banner, above the tab bar on a phone and in the corner on a desktop, at three moments:

  1. The first visit after signing in. The plainest offer: what installing gets you.
  2. The first visit on a later day. Coming back is the best signal that the app is worth a home-screen spot.
  3. Right after your first logged session. The moment the “two taps from your home screen” promise means something.

Each one is shown at most once per device. Seeing it counts, not just answering it, so an ignored welcome doesn’t come back the next day pretending to be new. Saying “Not now” to one doesn’t cancel the others, and it also rests the Today card for 14 days, so the same offer doesn’t follow you around the app.

It never shows when the app is already installed, when the browser can’t install it, or in the middle of a live workout.

iPhones

Safari has no install API at all; there is nothing for a button to call. On iOS the banner says what to do instead: Tap Share in Safari, then Add to Home Screen, and its button just says Got it.

Whenever you like

None of this replaces the button that was already there. Settings → App → Install works at any time, and the Today card still turns up for people who log sessions. The banners are for people who didn’t know; Settings is for people who do.

AlzyWelzy

Building PaceStreak. GitHub

Related

  • Design

    Body weight is data you can see, not a score you earn

    PaceStreak stores weight and tape measurements the same way it stores anything else you choose to log: privately, for your own use, and completely disconnected from the streak, the XP or anything that ranks you against another person.

    2 min
  • Design

    The weekly target leaves room for rest

    A daily streak has no concept of a planned day off: every rest day looks identical to a missed one. Counting weeks against a target you set yourself is what lets rest be a decision instead of a risk.

    2 min
  • Design

    Freezes are earned, not sold

    A freeze protects a bad week from ending a streak you've kept for months. It has to come from consistency, not a purchase, or it stops meaning anything about the person holding it.

    2 min

Build the habit. Keep the week.

PaceStreak is a habit and streak tracker for training and everything else worth doing regularly.