Skip to content
The feel

The weight room itself.
Not the Instagram version of it.

Most workout apps treat set-logging as data entry — type a number, press save, move on. flexRep treats it as a physical act. The plate buttons have weight. The spring settles slower when the bar is heavy. The haptic gets deeper. The number morphs, doesn't flash. The receipt row slides in like a plate landing on a stack.

This is the signature bet: physicality in a digital tool.

Touch the app

Try the plate physics, right here.

A working facsimile of LogView in your browser. Tap +5 — a light tap. Tap +45 — a slower settle. Press past 245 and the orange ignites. Hit Log to send a set into the stack.

The real app adds CoreHaptics under your finger. Your phone speaks the language of the gym floor.

9:41
REST 02:00 · 1 SETS · 1,125 lbs
SESSION · BENCH DAY
Barbell Bench Press
Elapsed
42:18
WEIGHT · lbs
205
PR TERRITORY
REPS
6
REPS
S1 225 × 5 RPE 7.5 42m
First one down.
Signature moments

Nine things only flexRep does.

Lifted from the brand identity playbook (docs/marketing/brand-identity.md). Each one already ships.

01

Weight-aware plate physics

Press +5 — quick light spring (response 0.2s, damping 0.72). Press +45 — slower, heavier spring (response 0.4s, damping 0.62). The number visually settles like a plate landing on the bar. The haptic escalates: light → medium → heavy. The app is speaking the language of the gym floor.

02

PR territory glow

When weight exceeds the previous max for this exercise, a soft orange warmth ignites behind the number — radial gradient, 4.4-second breathing cycle, opacity 0.5 → 1.0. No banner. No "NEW PR!" trumpet. You feel it before you read it.

03

Receipt row parallax

Log a set and the row slides in from below. The weight number arrives 30ms before the reps — as if the heavier element has more inertia. The volume counter in the footer odometers upward (.contentTransition(.numericText())). Set 10 gets a brief border flash. Definitive.

04

Workout rhythm waveform

A Canvas-drawn signature of every session: each set is a peak (height ∝ weight, width ∝ reps), each rest is a valley (depth ∝ duration). Two days of the same program look completely different. Your workout has a shape, and the shape is yours.

05

Strength glyph

A generative radial shape built from your movement-pattern volumes — push, pull, squat, hinge, carry, lunge, core, rotation. Color warmth scales with training frequency; symmetry scales with muscle balance. Not an avatar. A fingerprint.

06

Gym color temperature

Walk into a different gym — the background mesh gradient shifts hue by ±15°. The app reads your CLLocation, hashes the gym name to a deterministic angle, and gently warms or cools the room. Subtle enough you might not consciously notice. Present enough that the app feels like it knows where you are.

07

Rest timer breathing guide

A circle expands and contracts behind the rest timer bar — 4-second cycle, 12% opacity. After 30 sets, the cycle slowly extends to 5 seconds, mirroring the deeper recovery you actually need in a long session. The app adapts to you. No label. No toggle.

08

Deep session recognition

After 20 sets, the mesh gradient's drift speed decreases by 30%. The background literally slows down with you, breathing deeper. Barely perceptible. Subconsciously grounding. The app notices you're in the long haul and adjusts its register.

09

Calm coach voice

PR logged → "New PR. Nice." Missed three weeks → "10 days since last session." Bench stalled → "Bench e1RM unchanged for 3 weeks." Never hypes. Never panics. Acknowledges with one measured word. Opinionated, never prescriptive. Observation mode.

Motion vocabulary

Every animation passes one test.

Would this annoy me on set 47? If yes, cut it or make it shorter.

Gesture / event
Motion style
Duration
Feel
Tap a plate button
Weight-aware spring
0.2–0.4s
Physics. Heavier = slower.
Log a set
Scale pulse + settle
0.3s spring
Satisfying thunk. Definitive.
Begin workout
5-phase ignition
700ms total
Launching into something.
Rest timer tick
None (steady state)
Clock-like certainty.
PR detected
Glow fade-in
Instant on, 0.3s off
Ambient, not interruption.
Undo banner
Slide + opacity
0.25s snappy
Gentle recovery option.
Strength glyph — how it's built

A shape, not a badge.

flexRep tracks every set's movement pattern — push, pull, squat, hinge, carry, lunge, core, rotation. Each pattern is an axis in a radial coordinate system. Your sets-in-the-last-90-days fills the axis. The shape is built by smoothing quadratic curves through the midpoints of those eight radial points.

Color is computed from training frequency: hue = 0.08 + (1 − freq) × 0.55. More frequent → warmer (orange). Less frequent → cooler (blue).

Symmetry is computed from muscle balance: a less-balanced lifter gets more jitter on each axis (jitter = (1 − balance) × 0.3 × sin(i × 2.7)). The shape literally tells you, at a glance, where you're under-trained.

Pick up the bar.

Free tier — generous. One-time purchase — for life. Subscription — only for server sync.