Home/Our Work/Inner Sphere

Inner Sphere

A personal transformation app combining breathwork, meditation, fasting, mood tracking, and a social network for growth.

Visit live site ↗

Inner Sphere is a comprehensive personal development app weaving breathwork, meditation, fasting, mood tracking, and gratitude into one integrated practice.

Beyond individual tools, the app features a revolutionary social network where users connect around personal development, spiritual growth, and growth hacking — turning self-improvement into a shared journey.

Lucid Code Labs developed the complete product experience — from app to landing page — delivering a cohesive platform the team can extend with new practices and community features.

Mobile appSocial networkWellnessPersonal development

The challenge

Inner Sphere set out to weave breathwork, meditation, fasting, mood tracking and gratitude into one continuous practice, rather than leaving people to piece together several single-purpose apps. The product also rests on a social network where users connect around personal development and spiritual growth, so realtime messaging, presence and privacy had to hold up as first-class concerns rather than bolt-ons. Lucid Code Labs developed the complete product experience, from the mobile app through to the landing page.

Our approach

  • We built Inner Sphere as a single cross-platform codebase in Expo and React Native with TypeScript in strict mode, using NativeWind for styling, Reanimated and Skia for the animation-heavy practice screens, and custom Swift Expo modules and config plugins where the app needed native reach, such as an iOS widget and a notification service extension.
  • Supabase provides the backend, with Postgres under row-level security and SECURITY DEFINER functions, authentication including Apple and Google sign-in, Realtime channels, private storage buckets and 17 Edge Functions, while Redux Toolkit and Redux Persist hold client state and i18next serves English and Spanish.
  • Because release builds read the same production database, the project runs separate sandbox and production Supabase projects with a scripted environment switch and backward-compatible expand-and-contract migrations, so schema changes ship safely ahead of the app versions that depend on them.
  • Subscriptions run through RevenueCat behind a provider-agnostic payment adapter that confines the vendor to two files, with a webhook Edge Function mapping store events onto a subscriptions table. A full user-generated-content safety layer was built to meet App Store Guideline 1.2: a shared English and Spanish term filter enforced at every submit point, in-app reporting, instant blocking that updates every mounted surface, and an alerting Edge Function on each report.
  • Where a guarantee could not be honoured properly we removed it rather than soften the wording. A Signal-inspired end-to-end encryption layer for messaging was implemented and then taken back out, and the privacy policy now states plainly that direct messages are stored on our servers and are not end-to-end encrypted.

What we built

One app, many practices

Sitting and walking meditation with step detection, GPS distance and interval bells; breathwork driven by a cue-scheduling voice engine that pairs inhale and exhale prompts so a swallowed inhale can never leave an orphaned exhale; real-time binaural beat synthesis from two hard-panned oscillators; fasting timers with multi-week programmes that include multi-day fasts; mood tracking, gratitude check-ins and journalling. The codebase spans 108 screens, 47 services and 22 Redux slices against 120 Supabase migrations.

Asynchronous two-player voice game

A turn-based question game where turn order is derived from the rows rather than stored, so a round can only open once the one before it has been answered. Voice answers are written to a private Supabase Storage bucket with a 30-day retention window after a game ends, swept by a maintenance Edge Function that spares any answer a player has saved, while live state syncs over dedicated Realtime channels.

Speech-to-text that stays on the device

Whisper runs locally through whisper.rn, with a quantized multilingual model of about 60 MB downloaded once on first use rather than bundled, and recorded audio decoded natively to 16 kHz mono PCM before transcription. Token timestamps produce near word-level segments so the transcript highlights each word as the recording plays, and no audio leaves the phone to be transcribed.

Achievement engine and 304 collectible cards

A declarative criterion language defines 304 cards across 12 categories and five tiers, evaluated by Redux middleware immediately after a relevant action, by a throttled sweep when the app returns to the foreground, and by a one-shot day-boundary timer for cards that accrue over time. A build script converts the source art to WebP at three sizes with sharp and uploads it to Cloudflare R2, and the on-device cache deduplicates concurrent fetches and evicts by priority tier so earned cards are never dropped.

Realtime social layer with recovery cohorts

Friends, one-to-one chat with reactions and threaded replies, a social feed, shared fasts, and Quit Circles: addiction-recovery cohorts with quit dates, milestone posts, invitations and an SOS buddy alert flow backed by dedicated Edge Functions. Presence is hybrid: a Realtime presence channel carries the online baseline, while meditation, breathwork and game sessions are mirrored into a table as a session-scoped row valid for the declared session length plus grace. An earlier short-TTL heartbeat design was abandoned after one shared Wi-Fi drop expired two devices at once and kicked both avatars mid-meditation.

Offline-first writes and local-first chat

Meditation, breathwork, fasting and recovery writes queue into local storage with per-operation idempotency keys reused across the immediate attempt and the queued retry, and flush when the app changes state. Chat renders from a local SQLite cache first and then reconciles against Supabase Realtime, so conversations open immediately and survive a poor connection.

Technology

Mobile app

  • Expo SDK 54
  • React Native 0.81
  • React 19
  • TypeScript (strict mode)
  • NativeWind 4 with Tailwind CSS 3.4
  • React Native Reanimated 4
  • @shopify/react-native-skia
  • react-native-gesture-handler and svg

State and local data

  • Redux Toolkit with react-redux
  • Redux Persist
  • expo-sqlite local message cache
  • AsyncStorage
  • expo-secure-store
  • i18next and react-i18next (English and Spanish)
  • React Context providers for alerts, toasts, subscription, private vault and theme

Backend and data platform

  • Supabase Postgres with RLS policies and SECURITY DEFINER RPCs
  • Supabase Auth (email, Apple Sign-In, Google OAuth)
  • Supabase Realtime (Postgres changes and presence channels)
  • Supabase Storage private buckets
  • 17 Supabase Edge Functions on Deno
  • Cloudflare R2 via the AWS S3 SDK
  • Expo Push API

Audio, voice and on-device ML

  • whisper.rn (whisper.cpp) for on-device speech-to-text
  • react-native-audio-api for oscillator synthesis and native decode
  • expo-audio and expo-av
  • expo-speech-recognition
  • expo-sensors for step detection
  • expo-location for walking meditation distance
  • sharp for the build-time WebP card pipeline

Native build, release and monetization

  • EAS Build with development, preview, production and sandbox profiles
  • Committed iOS and Android native projects
  • Expo config plugins for widget and notification service extensions
  • Custom Swift Expo modules for WidgetKit data and StoreKit pricing
  • react-native-purchases (RevenueCat) behind a payment adapter
  • PostHog and Sentry
  • patch-package and Jest
  • Separate sandbox and production Supabase projects with a scripted environment switch

Project Gallery

Inner Sphere app — primary view
Core app experience and onboarding.
Inner Sphere app — habit tracking
Habit tracking and daily progress.
Inner Sphere app — mindfulness practices
Mindfulness practices and guided sessions.
← All our work