Back to Portfolio

MindMuscle

AIMobile

Coach-led mental performance training platform with a domain-plugin architecture

Description

Mental performance coaches work with individual athletes and teams to maximize their potential by tapping into the mental aspects of performance. MindMuscle is an app allowing coaches to work with individuals to strengthen their motivation and confidence, control their focus and intensity levels, and moderate their emotions. Designed, architected, and developed from concept to delivery for a high school football team in Connecticut.

Visual Demo

Key Technical Decisions

Domain-plugin architecture

The entire content taxonomy — terminology, categories, methods, metadata schemas, rating dimensions — is swappable via a single config file. Adding 'nutrition' or 'academic tutoring' requires zero changes to core infrastructure.

Session store intentionally non-persisted

Sessions are always freshly computed from assignment start date and current date. A 7-day program cycles automatically (dayIndex = daysSinceStart % allDays.length). Athletes never run out of content, and stale state is impossible.

Dual Firebase SDK

Native @react-native-firebase/auth for device-quality auth UX (Google Sign-In), web firebase/firestore SDK for simpler query patterns. The split gives the best of both ecosystems.

Custom Zustand merge function

Demo data always re-seeds on hydration even after persistence, ensuring a functional zero-backend demo. The merge filters user-created content from demo IDs and re-injects demo programs and assignments.

Architecture

React Native app → Firebase Auth + Firestore → Zustand (local state) → Domain Plugin Registry

Tech Stack

React Native Expo TypeScript Firebase Auth Cloud Firestore Zustand Jest Maestro

By the Numbers

13 pre-built mental training drills grounded in sport psychology research

3 pre-built periodized programs

10+ Maestro E2E flows across 3 groupings (smoke, athlete, coach)

Domain-plugin architecture supporting unlimited training domains

Full offline support via Firestore persistence + demo mode