CHOP IRON

Chop Iron is an offline-first bodybuilding tracker with a Nigerian voice. It logs workouts from a built-in library of 53 exercises, detects personal records across four categories — weight, reps, volume and estimated 1RM — and turns training history into streaks, achievements, progress photos and analytics. No account, no server, no subscription: everything lives in a local SQLite database, wrapped in a spring-physics motion system and written in fluent pidgin. No dull. Go chop iron.

Year2026
CHOP IRON Hero

I built Chop Iron because every fitness app I tried felt like it was built for someone else. Some were bloated with social feeds and paywalls; the rest were sterile — perfectly functional, completely soulless. None of them sounded like the voice I actually need when training is the last thing on my mind. So the voice became the starting point: 'No dull. Go chop iron.' From there, every decision answered one question — does this help me log a set faster and train harder? I designed around the only moment that matters: standing in the gym, phone in one hand, picking up exactly where the last session ended.

CHOP IRON screen 1
CHOP IRON screen 2
CHOP IRON screen 3
CHOP IRON screen 4
CHOP IRON screen 5
CHOP IRON screen 6
CHOP IRON screen 7
CHOP IRON screen 8
CHOP IRON screen 9
CHOP IRON screen 10
CHOP IRON screen 11
CHOP IRON screen 12
CHOP IRON screen 13
CHOP IRON screen 14
CHOP IRON screen 15
CHOP IRON screen 16
CHOP IRON screen 17
CHOP IRON screen 18
CHOP IRON screen 19
CHOP IRON screen 20
CHOP IRON screen 21
CHOP IRON screen 22
CHOP IRON screen 23
CHOP IRON screen 24
CHOP IRON screen 25
CHOP IRON screen 26

Challenge

On the surface, fitness tracking is a solved problem — every app can log a set. The real challenge was making the data underneath honest while keeping the surface effortless. A streak can't count workouts; it has to count consecutive distinct calendar days, and survive the awkward cases — training twice in a day, or missing today but training yesterday. A personal record isn't one number: a single set can break a weight PR, a rep PR, a volume PR or an estimated-1RM PR, and detecting them correctly means replaying every workout in chronological order. Achievements can't just unlock — when a workout is deleted, the app re-checks every threshold and re-locks what no longer qualifies. And all of it had to feel alive: offline-first on SQLite, 60fps motion, with a personality that makes the app a training partner, not a spreadsheet.

Action

Building for myself

Chop Iron wasn't a portfolio exercise — it was the app I wanted on my own phone, which gave every decision a strict test: does this help me log a set faster or train harder? The pidgin copy isn't decoration; 'Omo, you never log anything o' hits different from 'No workouts found.' The dark theme and yellow accent were tuned for a dim gym, bottom trays put every action under my thumb, and even the animations have jobs — spring-loaded progress bars and streak celebrations exist to make progress feel physical. Using my own app every session became the review that matters most.

Technical foundations

Built with Expo 54 and React Native 0.81 in TypeScript, with Expo Router handling file-based navigation across four tabs and a stack of modal flows. State lives in a single Zustand store over an expo-sqlite database — 12 tables covering workouts, sets, PR history, photos, achievements and profile, written transactionally in WAL mode. The PR engine is custom: it walks workout history chronologically, computes Epley estimated 1RM and tracks four record types per exercise, with bodyweight sets handled as a special case. The 53-exercise library ships with illustrations that download once and cache offline to the device. All motion runs on Reanimated 4 shared values — trays, sliding pills, directional tab transitions — with Lottie powering the streak flame and confetti marking celebrations.

Problems while building

iOS only presents one native modal at a time, and I learned that the hard way: an achievement popup and a PR toast firing after the same workout meant one silently swallowed the other. The fix was a queue — achievements, streak celebrations and PR toasts all funnel through pending state in the store and present in strict order. Gestures fought animations too, with tray dismissals and spring entrances competing for the same transform until I separated what the gesture owns from what the animation owns. I even built a shared-element morph — the workout icon flying into the detail screen — then removed it when the complexity outweighed the payoff. Adding weight data is easy; making streaks and achievements honest is not. That's where trust in a tracker is won or lost.

Result

Chop Iron is the app I actually open every session — the only review that matters. Five days, from empty repo to complete offline-first product: full workout logging, a four-type PR engine, streak celebrations, achievements with a sense of humour, progress photos, weight and muscle-group analytics, and a motion system that makes the whole thing feel alive. Beyond the features, it became my proving ground for offline-first architecture, gesture design and building software with a voice — lessons I carry into everything I build next.