Josh Ramirez
← Back to the journal

Departed Summer 2025

Health App

my body · iOS app · Shipped

Logger, scanner, and the body, all dark-mode.

Departure

MyFitnessPal is for someone else's body — a fitness influencer's, a generic adult's, a database average. I wanted Josh-shaped: my lifts, my macros, my cadence, with no nag screens or paywalls between me and the numbers I just generated. Max personalization isn't a feature — it's what's left when you delete every assumption a generic app has to make about who you are.

Approach

  • Swift
  • Gemini Vision
  • Supabase
  • AVFoundation

Phone-only — every entry has to be one-thumb-fast or I won't log it mid-set, and that's the whole game.

Field log

  1. Summer 2025 — opening

    Generic trackers ask the body to fit the schema. I wanted the schema to fit the body. Three screens: log a set, log a meal, see the month.

  2. First lift logged

    Dumbbell Bench Press, SET 1: weight, reps, RIR. Three numbers, three taps. The schema for the entire app is essentially that row.

    The whole app, in three fields.
  3. RIR over 1RM

    Picked Reps in Reserve instead of estimated 1RM. 1RM is a theoretical number; RIR is what I actually felt at the top of the set. Honesty in the moment beats a fiction I'd recompute later.

  4. Pointing the camera at a Fairlife bottle

    Photographing replaced typing. Aim, snap, write to meal_logs. The only way logging survives a real day.

    150 kcal, 30g protein, no typing.
  5. Macros, four bars

    Calories, Protein, Carbs, Fat — four progress bars across the top of the Nutrition Log. Targets are mine, not a database default for a 30-year-old male.

  6. Radar chart of the body

    Six axes — Back, Chest, Core, Shoulders, Arms, Legs — pulled from 30 days of sets. Leg day becomes undeniable when the polygon is visibly lopsided.

    The split, drawn by the data.
  7. meal_logs, raw

    Opened the Supabase dashboard and saw it all unfiltered. Typos and all — that's the truth of the week.

    The backend doesn't lie about what I ate.
  8. Mid-July, the gap

    Sets per day, meals per day, macro intake — all three rolling averages drop to exactly 0 for a week. That's Belize. The graph already remembered; the slide just had to admit it.

    Belize, drawn as a hole.

From the gallery

The month at a glance.
Logged between sets, never after.

What I came back with

30-day training view, end-to-end on my own data.

Lesson from the terrain

Building a tracker for your own body is a different problem than building one for everyone's — there's no edge case I have to politely accommodate, no field I have to surface because some other user might want it. The radar is calibrated to my split, the macro targets are mine, meal_logs is full of the things I actually eat. The graph also remembers the things I didn't do — mid-July is just zero, and the zero is honest.

Cross-links