BUILD · 0072026mobileLIVE
A mobile-first mindfulness platform that unifies meditation, mood, assessments, and human therapy

ClearedMind

One React + Capacitor codebase shipping a full wellness loop — meditations, journaling, assessments, and therapist booking — to iOS, Android, and web.

ClearedMind is a comprehensive mental wellness platform that pairs guided meditations, mood journaling, and clinically-shaped self-assessments with on-demand booking of vetted therapists. It ships from a single React/TypeScript codebase to web, iOS, and Android via Capacitor, on top of a custom native-abstraction layer that lets the same components feel native on a phone and graceful in a browser.

ROLE
Lead engineer & architect
TIMELINE
1 MO
TEAM
2
STATUS
LIVE
ClearedMind app home screen on mobile showing mood tracking and meditation cards

The big idea

Most wellness apps pick one lane: a meditation player, a mood tracker, or a therapy marketplace. The compromise is the user — they end up stitching three apps together and losing context exactly when they need it most. ClearedMind is built around the opposite bet: one surface for the whole loop, where today's mood entry, last week's assessment score, and tomorrow's therapy session all share the same data model and the same UI grammar.

Architecture: a native-web hybrid that doesn't lie to either platform

The app is engineered as a native-web hybrid with a strict separation between platform-aware and platform-agnostic code.

  • NativeProvider at the root wraps the entire React tree and bootstraps Capacitor plugins (status bar, splash, haptics, keyboard, push notifications, local notifications, voice recorder). On web, it short-circuits to no-ops so the same components render without conditional spaghetti downstream.
  • Capability hooks, not capability checksuseHaptics, useStatusBar, useKeyboard, etc. encapsulate Capacitor.isNativePlatform() so feature code never branches on platform.
  • Feature-folder structuresrc/components/{home,journey,mindful,profile,onboarding,layout,native,ui} instead of a generic components/ dump.
  • App state machine lives in src/pages/Index.tsx: Splash → Auth Check → Onboarding → Home, driven by supabase.auth.onAuthStateChange() plus a useOnboarding hook.

Innovative features

  • Glass-morphism bottom navigation with safe-area awareness using pb-[env(safe-area-inset-bottom)].
  • Haptic-first interaction model — every primary action emits a tuned haptic.
  • AI CHAT – This isn’t just another chatbot. It’s the proof-of-concept for my Universal AI Agent: a modular, provider‑agnostic backend that drops into any app and instantly feels personal. Instead of brittle, one‑off integrations, I built a dynamic core that adapts to each host application through lightweight adapters. The result? A single agent that can reason, understand, and converse with you directly — while every app demonstrates its own unique flavor of AI interaction.
  • Assessments as data, not screens — definitions live in MongoDB with multiple question types and three scoring modes.
  • Premium content gating at the edge via a single canAccess(resource, user, subscription) helper.
  • Mood-to-recommendation loop feeding personalised content via React Query caches.
  • Therapy booking inside the app via Calendly behind the same UI shell as a meditation card.
  • Custom sage/forest design system tuned for low-arousal palettes.

Outcome

  • Shipped to TestFlight with a working end-to-end flow.
  • Migrated the data layer from Rails + Supabase to a self-hosted Node.js + MongoDB stack without breaking a single shipped feature.
  • The native-abstraction pattern has been lifted into other Capacitor projects as a reusable starter.
PLATES

In detail.

01In App
02Welcome
03In App 2