Khalifa Seck

byOne

Product design + iOS

Build a training habit, not another spreadsheet.

A focused workout companion that turns a plan for your real week into a calm gym session and an honest view of progress.

Role
Product design + iOS
Platform
Native iPhone app
Built with
Swift + SwiftUI
Status
Shipped to App Store
byOne dashboard showing an Upper Body workout ready to train
byOne analysis screen with recent wins and training focus

The product thesis

A good workout app should reduce decisions at the moment of effort.

Fitness trackers often make people choose between a generic program, a dense logging screen, and a dashboard that says very little. byOne is designed around the moment someone needs to know exactly what to do next.

The result is a private, local-first product loop: start with a plan that fits the week, focus during the session, and return to feedback that respects the work that was actually logged.

What I owned

I carried the product from its first decision through App Store release.

My role spanned product strategy, information architecture, interaction and visual design, SwiftUI implementation, training-domain logic, local persistence, analytics, sharing, QA, testing, and release preparation.

  1. 01

    Today first The first screen answers what to do next instead of making people decode a dashboard.

  2. 02

    Less between sets Gym Mode keeps the next useful decision within reach, without turning training into spreadsheet work.

  3. 03

    Progress, honestly Trends and personal records compare meaningful training data instead of overstating the result.

The complete loop

A quieter path from plan to progress.

The information architecture follows the rhythm of a training habit, so each moment carries only the context someone needs next.

  1. 01

    Plan Build a training week around a real goal, schedule, equipment, and session length.

  2. 02

    Today See the next useful workout, a flexible schedule, and the context to begin.

  3. 03

    Gym Mode Log working sets one exercise at a time without losing momentum.

  4. 04

    Progress Understand training trends, records, and the wins worth sharing.

A plan that fits

Personal enough to begin. Flexible enough to keep going.

Initial planning asks only for choices that materially change the recommendation: a goal, training days, equipment, session length, and a preferred starting point. The plan stays editable when a real week inevitably changes.

byOne workout focus sheet for changing a scheduled training day
Move a planned day or take a rest day without losing the balance of the week.
byOne movement swap screen with alternative exercises
Swap a movement or create a custom one without abandoning the plan.

The daily surface

The Home screen responds to the person’s actual training state.

I treated Home as a state-aware decision surface rather than a calendar. A week strip supplies planning context, but the primary card changes according to what has really happened.

  1. 01

    Scheduled workout Preview the session, see prior results, edit the exercise list, then begin.

  2. 02

    Rest day See the next planned session or intentionally choose an optional workout.

  3. 03

    In-progress session Resume the saved draft instead of forcing someone to begin again.

  4. 04

    Completed session Review the result, restart if needed, or create a share card from a real milestone.

Gym Mode

One exercise at a time. One less thing to think about.

Gym Mode is a dedicated, distraction-light workout environment: one exercise per page, persistent session context, and a clear action dock. It deliberately avoids making someone navigate a dense form between sets.

byOne Gym Mode for logging dumbbell bench press sets
  1. 01

    Set-level logging Working sets record weight, reps, units, and optional perceived effort without obscuring the next action.

  2. 02

    Useful session context Elapsed time, completed sets, volume, rest timing, and the active exercise stay visible at a glance.

  3. 03

    Adaptable in the moment A person can add an exercise during the workout when the plan needs to change around available equipment.

  4. 04

    Cautious load guidance External load only increases after two complete sessions at the top of a prescribed rep range; near-failure effort and partial sessions hold the recommendation.

  5. 05

    Resilient by design The active workout is a durable draft. Resume or Discard makes interruption explicit while preserving sets, timer state, elapsed time, and the active exercise.

  6. 06

    Graceful platform support Live Activity context and notifications are useful additions on supported devices, not requirements for completing a session.

Feedback worth trusting

Progress only matters when it tells the truth.

The Analysis tab turns history into a focused review across a month, three months, six months, or all time. I designed the metrics around data integrity—not around filling a dashboard with numbers.

byOne session focus analysis visualizing training-set balance
  1. 01

    Compare like with like Assisted and externally loaded movements are not silently merged into a single exercise trend.

  2. 02

    Use an honest total The all-training trend shows weekly external-load work instead of implying unrelated sessions belong on one progression line.

  3. 03

    Keep records meaningful Personal records are calculated from working sets and retain the previous best when a worthwhile comparison exists.

  4. 04

    Respect partial work Incomplete sessions remain in a person’s history without being overstated as full completions.

Sharing

A celebration layer, not a social network.

The share composer appears only after a real milestone—completed workout, streak, personal best, or weekly progress. Someone chooses a story, can optionally add a gym photo, previews the result, and shares it.

Visuals are rendered with ImageRenderer at a final 1080 × 1920, handed to Instagram Stories when it’s installed, with the native iOS share sheet as a fallback. It is not a feed, an image editor, or another competing destination in the app.

Technical decisions

Trust is a feature, not a footnote.

I organized byOne around product domains rather than a single oversized view layer. Feature-focused SwiftUI surfaces sit on explicit training-domain models, so scheduling, logging, progression, analytics, backup, and sharing derive from the same reliable data.

  1. 01

    Explicit domain models Plans, scheduled workouts, logged sets, completions, and metrics are distinct types—not incidental UI state—so multiple features derive from one source of truth.

  2. 02

    Atomic, file-backed persistence Primary data is stored in Application Support as JSON. Each write is atomic and retains the previous valid version as a recovery copy before replacement.

  3. 03

    Recoverable data handling If a saved file cannot be decoded, byOne preserves it instead of silently replacing a person’s training history with an empty state.

  4. 04

    Versioned import and export People can export readable JSON, validate it before restore, and explicitly control whether it replaces local training data.

  5. 05

    Permission-aware platform features ActivityKit, local notifications, and Live Activities add session context when available without becoming prerequisites for training.

Correctness

A polished screen can still produce the wrong training recommendation.

Workout data compounds over time: one logged set can influence a progression nudge, a trend, and a personal record. Swift Testing covers progression rules, scheduling behavior, calendar boundaries, and prescription parsing—not just the happy path.

  1. 01

    Incomplete sessions remain as partial records instead of disappearing.

  2. 02

    An interrupted session can resume without losing saved sets or the active exercise.

  3. 03

    Automatic load increases are withheld after partial sessions or near-failure effort.

  4. 04

    Schedule coverage extends forward without duplicating days or rewriting completed history.

  5. 05

    Backup files are validated before any local data is replaced.

Process

From the first product decision to a shipped native app.

  1. 01

    Defined the smallest complete loop Make a plan, know what to do today, log without friction, see evidence of progress, and return with better context.

  2. 02

    Designed for normal interruptions Rest periods, locks, equipment changes, and schedule changes are expected gym conditions—so drafts are durable and scheduling is flexible.

  3. 03

    Modeled the data before polishing charts Completed workouts, exercise results, working sets, units, status, and timestamps were defined so recommendations and analytics draw from the same record.

  4. 04

    Used progressive disclosure Today before planning, one exercise before an entire form, a summary before a detailed chart.

  5. 05

    Shipped, then extended the loop The initial release established the complete training loop. A later sharing update adds celebration without compromising the private, focused core.

Next

PithA private place to think out loud before the thought disappears.