App Screenshots
Spirituality, meditation & a private real-time community
An iOS + Android subscription app on RN 0.71 with audio jank, fragile WebSocket chat, and a fragmented multi-stack navigation that slowed feature work and made upgrades risky.
Re-architected the boot pipeline to lazy-instantiate every drawer stack, hoisted a single shared MeditationPlayer modal so all sub-stacks navigate to one player, and consolidated the WebSocket into one provider with heartbeat + exponential backoff. Built the audio engine on react-native-track-player with background playback, offline downloads, and listen-time analytics flushed across cold starts.
- Three React Native upgrades shipped to live subscribers — 0.71 → 0.81.4 → 0.82.1 with the New Architecture
- Firebase namespaced → modular SDK migration without breaking analytics or messaging
- Memory-bounded chat over @shopify/flash-list with 500-message cap, swipe-to-reply gestures, and S3 presigned audio uploads
Live on App Store + Google Play across Free, Seeker, and Mastery tiers — stable WebSocket, smooth 60fps audio playback, and a production-grade upgrade path for future RN releases.
About the Project
Soul33 – The Beacon is a production iOS + Android app shipped to App Store and Google Play, serving Free, Seeker, and Mastery subscribers with guided meditations, journaling, oracle readings, weekly homework, and a private spiritual community. Built on React Native 0.82.1 with the New Architecture (Fabric + TurboModules) and React 19, with TypeScript across slices, components, and hooks.
I led end-to-end development across eleven feature pillars — auth, home dashboard, meditation engine, podcast, video, real-time chat, soul oracle, soul lab quiz, soul journal, weekly homework, and mantra messages. The codebase survived three React Native upgrades (0.71 → 81.4 → 82.1), a full Firebase namespaced → modular SDK migration, and the New Architecture rollout — all delivered cleanly to live subscribers.
The boot pipeline lazily instantiates every drawer stack via getComponent + require(), freezes inactive bottom tabs, mounts a single shared MeditationPlayer modal at the root so all sub-stacks navigate to one player instance, and consolidates the app's WebSocket into one hoisted provider with heartbeat liveness, exponential backoff with jitter, and AppState + NetInfo-driven reconnects.
The audio engine (react-native-track-player) supports background playback with lock-screen controls and Bluetooth / AirPlay handoff, an offline download queue with serial FIFO processing and per-user filesystem layout, and listen-time analytics buffered in AsyncStorage when offline and flushed on next foreground so data survives force-quit. A cross-tab mini-player isolates its ProgressFill into a memoized leaf so only that pixel bar updates at the 4Hz progress tick.
Real-time chat is built on a refactored hook architecture (useChatMessages, useChatAudio, useChatAudioUpload) over @shopify/flash-list, with S3 presigned-URL audio uploads, swipe-to-reply gestures, typing indicators, online presence, a 500-message cap for memory bounds, and admin broadcast voice notes.
A Firebase Remote Config pipeline drives forced-update, feature-update, and notification modals with AsyncStorage seen-message dedup so users only see new messages once. A centralized Axios client with request/response interceptors handles 401 auto-logout via a ResetStore action that preserves downloaded offline content across sessions.
Key Highlights
Technical Breakdown
Feature areas & implementation details
Related Writeups
Technical posts drawn from this project's real challenges