Stride: an offline-first running app with a mascot that runs with you

Our own running and walking tracker for Android, with iOS next: live GPS that keeps going with the screen locked, no account needed, and Moop cheering every finished run.

  • android now · ios next
  • flutter + firebase
  • built in indore
  • open source

why we built it

a running app that just lets you run.

Many running apps want your email before your first step, then fill the screen with feeds, challenges and upgrade prompts. We wanted the opposite: open it, press one big button, go.

many running apps stride
sign up before the first run tap "start tracking now"
feeds, challenges, upgrade prompts a map, one button, your streak
needs a connection to save a run works with no network at all
your runs on their servers your runs on your phone, cloud optional
a stray tap can end a run pause, then hold for a second to finish

It's also our showroom. Stride is a real app, coming to Google Play now and iOS next, built exactly the way we build apps for clients, with the code open for anyone to read.

  • design system first
  • offline from day one
  • tested on 360 px phones
  • open source

the app, screen by screen.

Five screens, in the order you meet them.

screens 01–02 · welcome & home

start running, no account.

The welcome screen has one job: get you moving. "Start tracking now" works with no sign-up and no network; Google or email sign-in sits below, only for backups. Home is a map, one big start button, your streak and this week's distance.

  • live distance, time, pace and steps
  • while running, only a pause button
  • to finish: pause, then hold for a second
Stride welcome screen with Start tracking now and optional Google or email sign-in
Stride home screen with the map, start run button, streak and weekly distance

screens 03–04 · onboarding

five questions, then go.

Goal, experience, units, height and weight, and how active you are, one question per screen with a progress bar on top. Height and weight drive the calorie estimate, and the body mass index updates as you type, in kilograms and pounds.

  • one question per screen
  • kilometres or miles, kilograms or pounds
  • Moop keeps you company on every step
Stride onboarding: what is your primary goal, with three options
Stride onboarding: height and weight with the body mass index

screen 05 · splash, and Moop

Moop runs with you.

Our mascot isn't a picture: in the app, Moop is drawn in code from the same shapes as the moops.in logo, the very one bouncing next to the screenshot. It breathes, blinks, has five moods, runs on the splash screen and cheers each of 14 badges, from "First stride" to a 30-day streak.

  • five moods, from sleepy to shocked
  • 14 badges and levels to unlock
  • sharp on every screen: no image files
Stride splash screen with Moop, the Moops mascot

one brand, site and app.

Stride uses the same colours and fonts as this website, in a style we call cute neo-brutalism: flat pastel blocks, 2.5 px ink outlines, hard 4 px shadows, 20 px corners, one colour per card, everything on one spacing grid. A matching dark theme ships with it.

  • cream#F8F8F3background
  • ink#211F1Btext, outlines, shadows
  • olive#3F6B35brand, main buttons
  • butter#FFE58Ahighlights, streaks
  • blush#FFDCE5badges, stop
  • sky#C8E4FFweekly stats
  • sage#E5F0CEcalm cards
  • coral#D96979your dot on the map

good morningFraunces · headings

Start tracking nowGeist · interface

0.0 KM THIS WEEKGeist Mono · numbers

Fonts are bundled in the app, so it never waits for the network to draw text.

built like it'll be used.

The parts you don't see are where most apps fail: bad networks, locked screens, budget phones. This is how Stride handles them.

  • 8,400lines of Dart
  • 113automated tests
  • 14badges to unlock
  • 2themes, light and dark
  1. offline first, sync second

    Every change goes into SQLite on the phone first. Signed in, changes upload in chunks under Firestore's batch limit, and a rejected record is retried on its own, so one bad run never blocks the rest. Changes waiting to upload win, deleted runs travel as markers, the newest profile edit wins.

  2. GPS that survives a locked screen

    Location runs in a small native service of our own, Kotlin on Android and Swift on iOS, bridged to Flutter. It keeps measuring with the screen off and shows a notification for as long as a run is live.

  3. private by default

    No account needed, no ads, no analytics SDK. Firestore rules let each person touch only their own data, in the exact shape the app writes. App Check (Play Integrity) keeps fake clients out; crash reports run in store builds only.

  4. tested at 360 px

    113 automated tests: the sync engine against a fake Firestore, plus splits, pace, streaks and badges. Every screen is rendered in light and dark at a 360 px budget-phone width with real fonts, and fails on any overflow.

what this means for your app

  • designed as a system first, so new screens stay consistent
  • offline from day one, for patchy mobile networks
  • tested on the 360 px phones your customers actually use
  • privacy policy and account deletion ready for the Play Store
  • your code and your store accounts, in your name

stride, in facts

  • 113 automated tests, including every screen in light and dark at a 360 px phone width
  • works fully offline; signing in is only for backing up runs
  • each person can read and write only their own runs, checked by Firestore rules

built with

  • Flutter
  • Riverpod 3
  • SQLite (sqflite)
  • Firebase Auth
  • Cloud Firestore
  • Kotlin & Swift location services
  • flutter_map + MapTiler
  • Firebase Crashlytics
  • App Check (Play Integrity)

your app could be next.

Tell us who it's for and what it should do. Free 20-minute call, fixed price in ₹ after that. Apps start at ₹75,000.