Home·Things I build.
Portfolio

Things I build. Systems that fit human capability.

Websites, scheduling platforms, movement-data tools, embedded displays, and operational systems. Each one designed around what a real human actually needs to see, decide, and do.

New Web Accessibility Small business

Simple, Accessible Web Presence

Santa Cruz Scent: Calm, Readable Storefront for a Local Brand

System Type: Small-business marketing site with accessibility as the core constraint

My Role: Sole designer and developer

Human Problem

A small local brand needed a web presence that felt like the product: quiet, specific, and calm. Most template-driven small-business sites optimize for density and novelty. They're full of motion, autoplay media, low-contrast type over imagery, and carousels that interrupt reading. For a visitor who wants to understand what the brand sells and how to reach them, that's friction.

The second constraint was accessibility. Many small-business sites fail WCAG basics (contrast ratios, focus states, alt text, keyboard navigation) because accessibility is treated as a compliance checkbox rather than a design input. Designing for accessibility first tends to produce a better site for everyone, not just users relying on assistive tech.

Design Principles

Readable before decorative

High-contrast type, generous line-height, short line lengths. The brand voice lives in the copy, so the copy has to be easy to read in any lighting condition on any device.

No surprise motion

No autoplay video, no scrolljacking, no animated hero. Motion is reserved for direct user input (hover, focus, click). This respects prefers-reduced-motion automatically and reduces cognitive load for everyone.

Keyboard-first navigation

Every interactive element is reachable and visibly focused via keyboard. Skip links, semantic landmarks, and proper heading hierarchy give screen-reader users the same information architecture sighted users see.

Fast on a slow connection

Static HTML, optimized images, no heavy framework. The site loads cleanly on a 3G connection, which matters more than benchmark scores. Small-business customers don't all browse on gigabit fiber.

Insight

Accessibility and taste aren't in tension. A site that's calm, readable, keyboard-navigable, and fast is a site that's good for everyone. Treating accessibility as a design constraint rather than a retrofit produces cleaner visual design, simpler code, and a site that holds up over time.

Technical Scope

  • Static site build with semantic HTML, responsive layout, and optimized asset delivery
  • WCAG 2.2 AA: color contrast, focus indicators, keyboard support, reduced-motion support
  • Lighthouse accessibility and performance scores above 95 on mobile
  • Structured content model that non-technical owners can update without touching code
New Scheduling TV display Data integration Client delivery

Full Training Operations Suite

Rock Your Body: Scheduling, VO₂ Integration, In-Session Display, Post-Session Delivery

System Type: Four-part training operations stack: schedule, program, run, deliver

My Role: Sole designer, developer, and daily operator

Visit: rockurbody.com

Human Problem

A personal training practice is four jobs at once: booking clients, designing their programs, running the session in real time, and handing them something useful to take home. Most trainers glue these together with calendar apps, a notes doc, a whiteboard, and a text message after the session. Every seam between those tools is where information gets dropped and the client feels it.

I built the suite as one connected system so the data moves cleanly: a client books, their VO₂ and assessment data shape the program, the program displays on a TV during the session with live timers and round counts, and the finished workout is delivered to them afterward with notes. No retyping. No whiteboard photos. No "I'll send it to you later."

Module 1: Scheduling App

A scheduling layer built on top of Cal.com with a credit wallet and availability rules calibrated to a real training week. Clients see only the slots that match their session type and trainer. Back-office logic handles cancellation windows, rescheduling credits, no-shows, and automatic reminders.

Design priorities: a booking link must display real-time availability and affordability in one glance. The system must never let a booking happen that the backend can't fulfill. When the user's state changes (credit balance, cancellation count), the interface updates without a page reload.

Module 2: VO₂ Data → Workout Integration

Internal tooling that imports VO₂ max test results and translates them into training zones that actually drive the program. Raw test data (max, ventilatory thresholds, recovery curves) gets mapped to the training model: zone definitions, interval lengths, rest ratios, and session RPE targets.

When I write a workout for a specific client, the tool auto-fills their zone numbers, paces, and load prescriptions based on their most recent test. If they retest and their thresholds move, their future workouts update automatically. The program is always calibrated to current physiology, not whatever numbers I remember.

This is where physiological testing stops being a report and starts being a live input into training. The gap between "your VO₂ is X" and "today's intervals should be Y at Z pace" is exactly where most testing services fail clients. The integration closes it.

Module 3: TV Display App (In-Session)

An app that mounts on the gym TV and displays the current workout during the session. Built for glanceability under physical load, not for browsing.

Current block, large type

The exercise, sets/reps, and target load dominate the screen. One block visible at a time. Upcoming blocks are collapsed so the client isn't reading ahead and losing focus on the current set.

Live timer and round counter

Interval countdown, rest countdown, and round count update in real time. Color flips on the last 10 seconds of work and the last 5 seconds of rest so the client sees the transition coming without watching a clock.

Readable across the room

High-contrast numerals, fixed-width digits so the layout doesn't jitter between "9" and "10." No animations. No sound. The display is a heads-up reference, not a stimulus.

One-tap control from my phone

I advance blocks, pause timers, and adjust load from my phone. The client doesn't touch the TV. This keeps the display clean and lets me run the session without breaking contact with the client.

Module 4: Post-Session Delivery

At the end of the session, the workout the client just did, along with the actual loads lifted, any RPE notes I logged mid-session, and the prescription for the next session, gets delivered to their client dashboard. They can replay the exact block list, see their progression across sessions, and read my coaching notes without asking.

This matters because memory is the worst part of training. Nobody remembers what they did three Tuesdays ago. A week later the client can't reconstruct what weight they used on the final set. The delivery layer makes the session a permanent, searchable record. Progressive overload stops being a guess.

System Insight

The value isn't in any single module. It's in the flow between them.

  • Booking is an input to programming. When a client books a session, the program generation step knows who they are, what their current physiology is, and what the last session looked like.
  • Programming is an input to the live display. The workout I wrote this morning is the workout running on the TV tonight. No copy-paste, no version drift.
  • The live display is an input to delivery. What actually happened in the session, including loads I changed on the fly, becomes the record the client sees afterward.

A single source of truth per client, flowing forward through every step of their training. That's the system.

Technical Scope

  • Scheduling layer on Cal.com with custom credit wallet, availability logic, and webhook reconciliation
  • VO₂ import and zone-mapping tool that propagates test data into active workout templates
  • Big-screen TV display app with live interval timers, round counters, and remote control from the trainer's phone
  • Client-facing workout history with session-by-session progression, coaching notes, and load tracking
  • Shared data model across booking, programming, session, and delivery so every view reads from the same source
  • Supabase + Next.js stack with row-level security for client data
Full-stack Sociotechnical Behavioral enforcement

Sociotechnical System Design for Human Performance

Mavericks Fitness: Physical Environment + Digital Operational Platform

Private training environment at Mavericks Fitness

System Type: Physical environment + digital operational platform + behavioral enforcement system

My Role: Sole designer, developer, and operator

Visit: mavfit.com

Human Problem

Most fitness environments fail two distinct user populations at the same time. Clients hit cognitive overload from excessive stimuli, unclear norms, poor equipment layout, and the kind of social pressure that keeps people from showing up consistently. Independent trainers hit a different wall: operational friction from shared-space conflicts, unpredictable scheduling, opaque pricing, and zero feedback on their own behavior within the space.

The conventional solution treats the gym as a container. I treated it as a system with interacting human operators, overlapping task demands, shared resources, and failure modes that propagate across users.

Human Constraints Identified

For Clients

  • Cognitive overload in busy, multi-stimulus environments
  • Anxiety around observation and social evaluation (spotlight effect)
  • Physical variability, injury history, and movement apprehension
  • Poor spatial ergonomics that increase injury risk and reduce compliance

For Trainers (Operators)

  • No situational awareness of facility state between sessions
  • Social ambiguity around shared-space norms
  • Decision fatigue from managing scheduling, pricing, and logistics alongside client care
  • No feedback on their own behavioral patterns over time

System Design: Physical Environment

The physical facility applies human factors principles typically used in control rooms, cockpits, and clinical environments.

Private, appointment-only access

Reduces social density and eliminates the bystander dynamics that suppress participation in traditional gyms. This mirrors isolation strategies in safety-critical environments where reducing distractors improves task performance.

Equipment layout based on movement flow, not aesthetics

Placement follows task analysis: warm-up zone near entry, primary strength equipment centrally located, conditioning and recovery equipment arranged to minimize cross-traffic during sessions.

Controlled sensory input

Minimal visual clutter, consistent lighting, no competing audio sources. The environment functions as a low-noise channel for the trainer-client communication loop.

System Design: Digital Operational Layer

I designed and built a full operational platform that manages the human side of facility operations. It spans scheduling, resource management, behavioral enforcement, and decision support, all integrated to reduce human error and operator burden.

Pre-Entry: Trainer Selection as Predictive Filtering

Rather than relying on interviews, which are poor predictors of operational behavior, I built an automated scoring system that evaluates applicants across six weighted dimensions: client stability, pricing power, schedule predictability, independence, environment fit, and cleanliness commitment. Each dimension maps to an operational outcome.

The model produces four decision outcomes (auto-approve, interview, waitlist, reject) without subjective judgment. This mirrors task-analytic selection methods used in aviation and healthcare, where the goal is predicting operational behavior, not evaluating personality.

Situation Awareness: The Trainer Dashboard

The dashboard is built around Endsley's three levels of situation awareness:

Level 1: Perception

Real-time credit balance, upcoming session details, active strike count, and a live countdown to their next session. Glanceable, always-visible status indicators.

Level 2: Comprehension

A 6-month cost trend chart, a day-of-week by hour-of-day booking heatmap, and a usage breakdown (peak vs. standard vs. off-peak) help trainers understand their behavioral patterns over time. The heatmap reveals booking clustering the trainer may not consciously recognize.

Level 3: Projection

Booking links display real-time affordability, grayed out and disabled when credits are insufficient. The "next consequence" warning under the strike system tells the trainer exactly what happens if they accrue another violation. These elements let the operator anticipate system states before they occur.

This three-level architecture is deliberate. Novice operators need Level 1. Experienced operators benefit from Level 2 and 3 to optimize their behavior over time.

Error Prevention: Constraint-Based Design

The system uses Norman's constraint taxonomy to prevent errors before they propagate:

Physical constraints

If a trainer can't afford a session, the booking link isn't just disabled. It's replaced with an "Insufficient credits" indicator. The system doesn't allow the error to occur. This mirrors lockout mechanisms in safety-critical systems.

Semantic constraints

Credit pricing uses time-of-day weighting (peak hours cost 32% more, off-peak costs 22% less). This redistributes behavior across time slots without explicit rules. Trainers shift toward off-peak hours because the system makes it economically rational, not because they're told to.

Logical constraints

If a booking gets made with insufficient credits (a race condition), the webhook handler catches the error, auto-cancels via the Cal.com API, and restores the credits. The system self-corrects rather than requiring human intervention.

Behavioral Enforcement: Mechanical Accountability

The violation and strike system is explicitly mechanical. Human judgment is removed from enforcement because inconsistent enforcement degrades compliance.

Level 1

Operational friction items (not wiping equipment, leaving late). Low severity, high frequency. Erode facility quality over time. Worth 1 strike.

Level 2

Schedule damage items (session overruns, early entry, late cancellations). These directly impact the next operator. Worth 2 strikes.

Level 3

Trust violations (sharing door codes, unauthorized users). System integrity breaches. Instant suspension.

Escalation is deterministic: logged silently at 1 strike, warning at 2, 72-hour booking lock at 3, 14-day suspension at 4, termination at 5. No discretion, no negotiation. Strikes decay after 60 days without violation, rewarding sustained compliance.

Three detection channels feed the system: next-trainer check-in (a structured shift-handoff protocol), self-reporting (logged identically to third-party reports, no penalty reduction), and admin override. The self-reporting channel matters because it normalizes error reporting, which is one of the central challenges in safety culture research.

Client-Facing Decision Support

For prospective clients choosing a trainer, I built a guided decision tool that routes users through four questions about goals, experience, training style preference, and specific concerns. The recommendation engine maps answer combinations to specific services. This reduces choice overload directly: instead of presenting six-plus options and expecting self-selection, the system narrows the field based on stated needs. A direct application of decision support system design for users who lack the domain expertise to evaluate options independently.

Human Factors Insight

This project demonstrates that human factors principles transfer directly from safety-critical domains to service environments. The same frameworks that make cockpits and control rooms function reliably also apply to managing shared physical spaces with multiple operators and variable-skill end users.

Three design principles carried through every decision:

  • Systems constrain behavior more reliably than rules. The credit system, automated enforcement, and affordability checks make undesirable actions structurally difficult rather than merely prohibited.
  • Feedback loops must match the operator's information needs at each expertise level. Without all three levels of situation awareness, errors increase.
  • Error reporting only works when reporting is normalized and consequences are procedural. Making enforcement mechanical and enabling self-reporting without penalty amplification builds a reporting culture rather than a concealment culture. This is the central insight from safety culture research in aviation and healthcare, applied here to a fitness facility.

Technical Scope

  • Full-stack platform: Next.js, TypeScript, Supabase (PostgreSQL + Auth), Cal.com integration, Tailwind CSS
  • 9 database tables with row-level security, automated triggers, and atomic RPC functions
  • 10 API endpoints covering application scoring, booking management, violation tracking, and community features
  • 229 SEO landing pages with internal linking architecture
  • Automated cron systems for credit allocation, strike decay, and wallet management
  • Real-time dashboard with data visualizations, behavioral analytics, and decision support tools

This is a live system managing real trainers, real bookings, and real behavioral feedback loops. The facility operates daily and the digital layer runs alongside it, collecting data that will refine every design decision over time.

Protocol design Decision support Health data

Cognitive Load, Decision-Making & Usability

Fit Evaluations: Physiological Testing & Feedback System

Physiological testing and assessment

System Type: Data-driven human decision-support system

My Role: System architect, test administrator, interpreter, educator

Visit: fitevals.com

Human Problem

Most physiological testing services are measurement-focused, not decision-focused. They produce numbers (VO₂ max values, resting metabolic rates, body composition percentages) and hand them to people who don't have the framework to interpret them. The result is data without direction.

The failure isn't in the testing. The equipment works. The protocols are standardized. The failure is in the human interface: the moment where complex quantitative output has to become something a real person can understand, trust, and act on.

Three things typically go wrong. First, results are presented in technical language that creates anxiety instead of clarity. Second, too many metrics are delivered simultaneously, overwhelming working memory. Third, there's no connection between what was measured and what to actually do differently tomorrow. The system I designed addresses all three.

Human Constraints Identified

For Test Subjects

  • Low health data literacy: most people don't know what VO₂ max represents or what a "good" RMR looks like
  • Anxiety and defensiveness during results delivery, especially around body composition
  • Anchoring bias: fixation on a single number (body fat percentage) while ignoring more actionable metrics
  • Prior exposure to contradictory health advice that creates skepticism and confusion
  • Limited working memory capacity during a session that's already cognitively and physically demanding

For Practitioners

  • Time pressure during interpretation: the window for meaningful results delivery is short
  • The temptation to present all collected data rather than the actionable subset
  • Difficulty calibrating explanation depth to the individual's comprehension level
  • Managing emotional reactions to data (disappointment, denial, anxiety) while maintaining clinical accuracy
  • No standardized framework for translating measurements into behavior-specific recommendations

System Design: Test Protocol Architecture

Tests are sequenced to manage cognitive and physiological load, not for operational convenience. The order in which information is collected affects both data quality and the subject's capacity to receive results.

RMR first: low exertion, high curiosity

Resting metabolic rate requires physiological calm and produces the data subjects are most curious about. Positioning it first captures accurate readings before any physical stress and gives the subject an early anchor point: something concrete and personally relevant before moving into more demanding tests.

Body composition second: emotional processing time

Body composition is the measurement most people have strong priors about. Many arrive with anxiety about this number specifically. By positioning it before higher-exertion tests, the protocol gives the subject time to process emotionally charged data while still cognitively fresh, and gives the practitioner a window to reframe the numbers before cognitive load increases.

VO₂ max last: highest physical demand

VO₂ max testing is the most physically demanding protocol and leaves the subject in a state where complex data interpretation isn't feasible. This data is collected last and interpreted later, after recovery. Attempting to deliver VO₂ max results immediately post-test would be asking someone at peak physiological stress to perform complex cognitive work.

System Design: Results Interpretation Framework

Results are never presented as raw scores. Every metric is translated through a three-layer interpretation model designed to close the gap between measurement and meaning.

Layer 1: Where You Are

The measured value, placed on a population-normed range so the subject can locate themselves without judgment. Not a "score." Not a pass/fail. A position within a spectrum that has context. This eliminates the binary thinking ("good number" vs. "bad number") that produces anxiety and anchoring bias.

Layer 2: What It Means

A plain-language interpretation that connects the number to a functional outcome the subject actually cares about. "Your body burns X calories at rest, which means your daily baseline is here" is actionable. "Your RMR is 1,650 kcal/day" is not. Translation from technical units to lived experience is where most testing services fail.

Layer 3: What To Do

One to two specific, actionable recommendations tied directly to the measurement. Not a comprehensive plan. Not a lifestyle overhaul. The smallest meaningful adjustment that addresses what the data revealed. This prevents the common failure mode where a subject leaves with 15 recommendations and implements zero.

Information is delivered in a specific order: metabolic data first (connects to daily habits), then body composition (connects to the metabolic data just discussed), then cardiovascular capacity (contextualizes fitness within the metabolic picture). Each layer builds on the previous one, creating a coherent narrative rather than a collection of disconnected scores.

System Design: Comparative Framing and Retest Architecture

Single-point measurements have limited decision value. The system is designed around longitudinal comparison: initial testing establishes a baseline, and retesting at defined intervals reveals trajectory. The value isn't in any single number. It's in the delta.

Results reports use visual comparison layouts: current values alongside previous values with directional indicators. This eliminates the cognitive work of remembering old numbers and computing change. The system does the comparison; the subject sees the trajectory.

Retest intervals are calibrated to the metric: body composition shifts are meaningful at 8–12 week intervals, cardiovascular improvements at 6–8 weeks, metabolic adaptations at 4–6 weeks. Testing too early produces noise that the subject interprets as failure. Testing too late loses the motivational window where visible progress reinforces behavior change.

Human Factors Insight

The central design insight is that measurement and interpretation are separate cognitive tasks, and most testing services collapse them. When you hand someone a VO₂ max score during the same session where they just ran to exhaustion, you're asking them to perform complex data interpretation under physiological and cognitive load. The system must carry the interpretive burden.

Three principles drive the design:

  • Information sequencing matters as much as information content. The order in which results are delivered affects comprehension, emotional response, and retention. Get the order wrong and you lose the subject before you reach the actionable data.
  • Framing determines whether data produces action or anxiety. "Your VO₂ max is 38" means nothing. "Your aerobic capacity puts you here relative to your age group, and improving it by this much would mean you could sustain this activity for this much longer" connects measurement to motivation.
  • Data must pass through a meaning layer before reaching the user. This is the same principle that makes well-designed medical device interfaces effective: the raw signal is never the display. It's always processed, contextualized, and formatted for human decision-making.

Technical Scope

  • Standardized testing protocols for VO₂ max (metabolic cart), RMR (indirect calorimetry), and body composition (multi-method)
  • Three-layer results interpretation framework applied consistently across all metrics
  • Structured results delivery protocol with sequenced information architecture
  • Longitudinal tracking with visual comparison reports and directional indicators
  • Retest cadence calibrated to physiological adaptation timelines per metric
  • Client-facing educational materials designed to bridge the health data literacy gap

This system directly parallels usability challenges in medical devices and consumer health technology. The same gap between raw measurement and human comprehension exists in patient-facing health data, clinical decision support, and wearable device interfaces.

HCI Embedded Bluetooth LE

Human-Computer Interaction in Physical Systems

Sprintbok App for NOHrD Treadmill

NOHrD Sprintbok treadmill interface design

System Type: Embedded human-computer interaction system

My Role: Problem identifier, interface designer, system builder

Context

The NOHrD Sprintbok is a mechanically elegant, self-powered curved treadmill designed for natural running mechanics. The hardware is exceptional. The software is not. The stock onboard interface undermined the physical experience through poor usability, creating a gap between what the machine could do and what users actually experienced.

Human Problem

Users found the treadmill's native interface frustrating and disengaging, which reduced usage and distorted performance feedback. The interface forced runners to do cognitive work that should have been invisible: converting units, parsing cluttered layouts, waiting for laggy display updates, and mentally filtering irrelevant data points during physical exertion.

The result was a human-machine system where the display actively degraded performance. Runners spent attention on the screen instead of on their movement. They couldn't pace accurately because the feedback loop was broken. Some stopped using the display entirely, losing all the performance data the machine was collecting. Others stopped using the treadmill altogether.

Human Constraints Identified

For the Runner

  • High cognitive load during physical exertion limits interface tolerance to near zero
  • Speed perception is unit-dependent: mph is intuitive for American users, km/h requires active mental conversion
  • Glance time during running is 1–2 seconds maximum; information must be readable in a single fixation
  • Fatigue progressively degrades cognitive capacity, making late-run interface interactions more error-prone
  • Strong expectations from prior treadmill experience: pace, distance, time in familiar positions and formats

For the Interface

  • Bluetooth latency between treadmill sensors and display creates feedback delay that breaks the pacing loop
  • Limited display real estate on the treadmill's built-in screen
  • Self-powered curved design means speed fluctuates constantly, requiring highly responsive display updates
  • The stock interface was designed for feature completeness, not task performance
  • No customization layer available in the manufacturer's software

System Design: Information Hierarchy

The interface prioritizes metrics based on task analysis of what runners actually look at during a run, not what the treadmill can measure.

Primary: Current Speed (mph)

Largest display element, center position. This is the metric runners use as a real-time control input: they adjust effort based on what they see. It must be the most visually dominant element with zero interpretive overhead. Converted from km/h to match the mental model American runners use for pacing and effort regulation.

Secondary: Elapsed Time and Distance

Upper display area, smaller but always visible. These metrics support session planning and progress tracking but don't require the same update frequency or visual dominance as speed. They're reference data, not control data.

Removed: Everything Else

Calories, average pace, heart rate zones, lap splits: all removed from the active running display. Not because they're useless, but because during a run they compete for attention without contributing to the primary task. These are post-run analysis metrics, not real-time performance metrics. Presenting them during exertion adds cognitive noise without functional value.

This hierarchy reflects the Proximity Compatibility Principle: the most critical information for the running task is spatially proximate and visually dominant. Less urgent metrics don't compete for the same attentional resources.

System Design: Feedback Loop Responsiveness

The stock interface updated speed readings approximately every 2–3 seconds, creating a perceptible disconnect between physical effort and visual feedback. The custom app reduced this to sub-second updates by optimizing the Bluetooth data pipeline and smoothing sensor readings to eliminate jitter without introducing perceptible lag.

Responsive feedback matters because runners use the speed display as a closed-loop control system. They adjust their effort based on what they see. When the display lags, the control loop breaks: runners overshoot or undershoot their target pace because the feedback doesn't reflect their current state. On a self-powered curved treadmill where speed changes with every stride adjustment, tight coupling between effort and display is essential. A 2-second delay turns pacing into guesswork.

System Design: Visual Design Under Motion

Every visual decision was driven by the constraint that the user is physically moving, cognitively loaded, and viewing the display through a bouncing visual field.

Typography for motion legibility

Large, high-contrast sans-serif numerals with no thin strokes. The speed display uses a monospace-style typeface so digit width is constant: when speed changes from "6.2" to "7.1," the display doesn't shift or reflow. This prevents the visual instability that forces re-fixation and extends glance time.

Reduced color palette

Two functional colors: white text on dark background for primary metrics (maximum contrast ratio), and a single accent color for the active state indicator. The stock interface used five-plus colors with varying contrast ratios, creating visual noise that competed with the primary task of reading speed at a glance.

Zero animation

No transitions, no fading, no sliding. During physical exertion, motion on a display competes with the user's kinesthetic awareness and can contribute to disorientation. Static elements that update instantly are more legible than animated elements that update smoothly. Every visual transition is a cognitive event the runner has to process.

Human Factors Insight

This project demonstrates that the human factors of embedded displays in physical systems are fundamentally different from screen-based software design. The user is not sitting still, not fully attentive, and not able to interact with precision. Every design decision must account for divided attention, physical instability, progressive cognitive degradation from fatigue, and a feedback loop that directly affects physical performance and safety.

Two principles emerged that apply far beyond treadmill interfaces:

  • Feature reduction is a design strategy, not a compromise. The stock interface failed not because it lacked features but because it had too many. In high-load contexts, every additional display element competes for finite attentional resources. Removing features that don't serve the primary task isn't minimalism. It's load management.
  • The display is part of a human-machine control loop, not an information dashboard. When a runner looks at the speed display, they're not "checking data." They're calibrating their next physical output. The interface must support that calibration with immediacy, accuracy, and zero interpretive overhead. This is the same principle that governs heads-up displays in aviation and real-time process monitoring in industrial control rooms.

Technical Scope

  • Custom application built for the NOHrD Sprintbok's embedded Android display
  • Bluetooth Low Energy data pipeline optimized for sub-second speed updates with jitter smoothing
  • Unit conversion layer (km/h → mph) with pace calculation
  • Redesigned visual hierarchy based on runner task analysis and glance-time constraints
  • High-contrast, motion-stable typography and layout system with fixed-width numerals
  • Zero-animation rendering architecture for maximum legibility under motion

This project solidified my interest in Human Factors and HCI at the intersection of physical systems, embedded displays, and performance feedback. It demonstrated that small interface changes, when grounded in human capability analysis, can fundamentally alter both user experience and system effectiveness.

Behavior change Feedback loops Intake design

Behavior Change & Feedback Loop Design

Habit-Based Training & Nutrition Systems

Habit-based behavior change and feedback systems

System Type: Behavior change system (physical + digital)

My Role: Framework designer, intake architect, behavior analyst

Human Problem

Most behavior change programs fail not because clients lack motivation, but because the starting point is wrong. When you prescribe changes that exceed someone's current capacity, they don't gradually build up. They stop. The system selected for the wrong behavior first.

The other failure mode is systems that rely on willpower rather than structure. Willpower is a finite resource that degrades under stress, fatigue, and competing demands. Any system that depends on it will eventually fail. This is well-established in behavioral psychology but ignored by most consumer health products, which treat motivation as an input rather than an output.

The third failure mode is invisible: systems that can't distinguish between actual behavior and reported behavior. People consistently overestimate healthy behaviors and underestimate unhealthy ones. An intake process that asks "how often do you exercise?" gets an aspirational answer, not a behavioral baseline. Every downstream recommendation built on that answer is miscalibrated from the start.

Human Constraints Identified

For the Client

  • Limited working memory and decision bandwidth: adding habits competes with existing cognitive demands
  • High variance in baseline readiness: two clients with the same goal may need completely different starting points
  • Delayed reinforcement: behavior change rarely produces visible results for weeks, creating a motivation gap
  • Inconsistent self-monitoring, especially when habits are still fragile and not yet automatic
  • Overconfidence in motivation as a reliable driver: "I'll just make myself do it" is a plan that works for about two weeks

For the System

  • Intake must distinguish actual behavior from aspirational behavior: people report what they want to do, not what they do
  • Challenge sequencing must avoid both under-loading (boredom, no progress signal) and over-loading (failure, abandonment)
  • Feedback timing must be frequent enough to catch drift but not so frequent it becomes noise or surveillance
  • The system must adapt to variance in client capacity without requiring the practitioner to manually recalibrate at every step
  • Long time horizons create dropout risk: clients who don't see results in weeks 2–4 disproportionately abandon the program

System Design: The Intake Process

The process starts with a structured intake questionnaire designed to establish a behavioral baseline. Not goals. Not aspirations. Current reality: what the person is actually doing, what they're not doing, what they're already good at, and where the obvious gaps are.

The questions are calibrated to surface the lowest-hanging fruit: the one behavior change that requires the least disruption to the existing routine and has the most downstream leverage. That's where we start. Not because it's easy, but because a successful first habit builds the cognitive model that makes the next one possible.

Critically, the questionnaire is designed to detect the gap between stated and actual behavior. It asks about frequency, timing, context, and barriers. Not just "do you do this?" but "when did you last do this, what happened before and after, and what got in the way the time before that?" This produces a behavioral map that's more accurate than self-assessment alone.

This intake approach is systematic. It produces a clear picture of where someone actually is, which makes the starting point a design decision rather than a guess.

System Design: The Progression Model

Once the starting point is established, the progression follows a consistent structure:

Awareness first

Before asking someone to change a behavior, we build awareness of the existing one. What is the current pattern? When does it happen? What triggers it? What are the environmental cues? People can't modify what they haven't noticed. This phase reduces the gap between stated behavior and actual behavior, and it produces the pattern data needed to design an effective intervention.

Capacity-matched challenges

Challenges are assigned based on the person's current capacity, not an abstract ideal. The goal is a success rate high enough to build momentum (approximately 80–90% completion), not a challenge rate high enough to prove difficulty. When someone completes a challenge consistently, we add the next layer. When they struggle, we reduce load and isolate the constraint. This mirrors progressive overload in strength training: the load is calibrated to the individual, and it increases only when the current load is manageable.

Progressive load, not motivation

The system increases demands gradually. Each completed phase makes the next one more accessible because the underlying habit infrastructure is already in place. Motivation comes from momentum, not the other way around. By the time a client is doing something difficult, it doesn't feel difficult. It feels like the obvious next step from where they already are.

System Design: Feedback Loop Architecture

Behavior change without feedback is guessing. The feedback loops in this system are designed to be short, specific, and actionable.

Drift detection

Check-ins are frequent enough to catch drift before it becomes abandonment. A missed day is data. Two missed days is a pattern. Three missed days without intervention is where most programs lose people permanently. The system surfaces these signals to the practitioner in real time.

Behavior-focused framing

Feedback is framed around the behavior, not the person's character or effort level. "You completed this 5 out of 7 days" is useful. "You need to try harder" is not. The system reinforces the behavior as a data point rather than a moral judgment, which preserves the client's agency and reduces shame-driven disengagement.

Adaptive challenge selection

Data from check-ins directly informs the next challenge selection. If compliance drops below threshold, the system doesn't push harder. It asks why. Was the challenge too complex? Was the timing wrong? Did an external stressor reduce capacity? The answer determines whether to simplify, reschedule, or pause. This keeps the system adaptive rather than fixed.

Pattern visibility

Consistency is tracked over time and made visible to both client and practitioner. Patterns that would otherwise stay invisible, such as "you always miss Wednesdays" or "your compliance drops during travel weeks," become design inputs for adjusting the program rather than evidence of failure.

System Design: Failure Mode Prevention

The most common failure in behavior change programs is abandonment in weeks 2–4. The system is designed to prevent this through three mechanisms:

Early wins architecture

The first habit assigned is selected specifically for high completion probability. This creates a reference experience of success that anchors the client's self-perception as "someone who follows through." Once that identity is established, it's harder to abandon than a program where the first experience is struggle. The starting point isn't the easiest thing. It's the most strategically completable thing.

Progressive disclosure of complexity

Clients initially see only their current habit and their streak. Additional tracking, goals, and complexity are introduced only after the first habit is established. This prevents the dashboard overwhelm common in habit-tracking apps, where new users see a grid of empty habits and feel behind before they've started. Complexity is earned through consistency, not dumped at onboarding.

Graceful degradation on missed days

When a client misses a check-in or breaks a streak, the system doesn't reset to zero or display failure signals. It preserves the overall trajectory and frames the miss as data, not failure. The practitioner receives the notification and uses it to assess whether the challenge level needs adjustment, not to apply pressure. Shame is the primary driver of program abandonment, and the system is designed to never produce it.

Human Factors Insight

The core design insight is that the starting point is itself a design decision, not a given. Most systems skip this step and prescribe from an assumed baseline. When the real baseline is lower than assumed, compliance collapses immediately. When it's higher than assumed, the client is bored and disengages. Either way, the system fails because it wasn't calibrated to the actual human.

Three principles carry through the entire framework:

  • Systems that reduce cognitive demand outperform systems that rely on motivation. Willpower is a depletable resource. Structure is not. A well-designed system makes the desired behavior the path of least resistance, not the path of most effort.
  • Challenge must match capacity, and capacity varies. The same behavior change that's trivial for one person is overwhelming for another. Any system that prescribes the same starting point for everyone will fail for most of them. Calibration isn't optional. It's the design.
  • Feedback loops must be short enough to catch drift and framed to preserve agency. Late feedback produces abandonment. Judgmental feedback produces shame. Both kill compliance. The system that keeps people engaged is the one that notices quickly and responds without blame.

Technical Scope

  • Structured intake questionnaire with behavioral baseline scoring and aspirational-vs-actual detection
  • Progressive habit assignment framework with capacity-matched challenge selection
  • Check-in and tracking protocol with real-time practitioner notification pipeline
  • Longitudinal consistency tracking with pattern visualization (day-of-week, context, compliance trends)
  • Adaptive difficulty model: challenge level adjusts based on compliance data, not calendar progression
  • Graceful degradation system: streak breaks don't trigger resets or shame signals

This framework operationalizes principles from behavioral psychology, habit formation research, and self-determination theory into a repeatable system that adapts to individual variance. The same architecture applies whether the target behavior is nutrition, movement, sleep, or any other domain where sustained change requires more than information and intention.