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.
Jump to
New Web Accessibility Small business Simple, Accessible Web Presence
Santa Cruz Scent: Calm, Readable Storefront for a Local Brand
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
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
Sociotechnical System Design for Human Performance
Mavericks Fitness: Physical Environment + Digital Operational Platform
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.
Operational friction items (not wiping equipment, leaving late). Low severity, high frequency. Erode facility quality over time. Worth 1 strike.
Schedule damage items (session overruns, early entry, late cancellations). These directly impact the next operator. Worth 2 strikes.
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
Cognitive Load, Decision-Making & Usability
Fit Evaluations: Physiological Testing & Feedback System
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
Human-Computer Interaction in Physical Systems
Sprintbok App for NOHrD Treadmill
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
Behavior Change & Feedback Loop Design
Habit-Based Training & Nutrition 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.