Skip to content

xenia19/affirmations-app

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

23 Commits
Β 
Β 
Β 
Β 

Repository files navigation

🎧 Positive Audio Affirmations

A self-hypnosis mobile app for building positive habits through personalized voice affirmations.

Google Play Rating React Native

πŸŽ₯ App Demo (Sound On πŸ”Š)

affirmations-app.mp4

πŸ“± About

Positive Audio Affirmations helps users reprogram their subconscious mind through self-recorded voice affirmations. Based on psychological research showing that hearing your own voice creates stronger neural pathways than listening to others.

I designed, developed, and launched this entire application independently β€” from concept and UX design to Play Store publication and ongoing maintenance.

✨ Key Features

Feature Description
πŸ†• AI Voice Synthesis Integration with ElevenLabs API for ultra-realistic text-to-speech generation.
πŸŽ™οΈ Voice Recording Record personalized affirmations in your own voice
πŸ“š 100+ Affirmations Pre-written content across 10+ categories
πŸ€– AI Generator Smart affirmation suggestions based on user goals
πŸ”„ Auto-Loop Mode Self-hypnosis playback during sleep or relaxation
🎡 Ambient Sounds Ocean waves, rain, fireplace, wind chimes
πŸ”” Smart Reminders Daily notifications
🌍 Multi-language Full support for English, Spanish, Russian
πŸ’Ž Freemium Model Free tier with Premium subscription

πŸ› οΈ Tech Stack

Core Framework

React Native 0.78    
React 19.0           
JavaScript           

State Management & Navigation

Redux + Redux Persist   
React Navigation 7      
AsyncStorage           

Audio System

react-native-audio-recorder-player  β”‚  Voice recording
react-native-sound                  β”‚  Ambient sounds mixing

Backend & Services

Firebase Analytics      β”‚  User behavior tracking
RevenueCat              β”‚  Subscription management
Notifee                 β”‚  Local push notifications
Sentry                  β”‚  Crash reporting & monitoring
ElevenLabs API          β”‚ (Text-to-Speech)
DeepSeek API            β”‚  AI Generator

Localization

react-native-localize   β”‚  Device locale detection
Custom i18n system      β”‚  EN / ES / RU translations

πŸ—οΈ Architecture

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                        PRESENTATION LAYER                      β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”          β”‚
β”‚  β”‚  Onboarding  β”‚  β”‚    Tabs      β”‚  β”‚    Drawer    β”‚          β”‚
β”‚  β”‚    Wizard    β”‚  β”‚  Navigator   β”‚  β”‚   Navigator  β”‚          β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜          β”‚
β”‚         β”‚                 β”‚                  β”‚                 β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”          β”‚
β”‚  β”‚                    SCREENS                        β”‚         β”‚
β”‚  β”‚  Listen β”‚ Record β”‚ Categories β”‚ AI β”‚ Relaxation  β”‚          β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜          β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                        BUSINESS LAYER                          β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”         β”‚
β”‚  β”‚   Redux     β”‚  β”‚   Custom    β”‚  β”‚  Notification   β”‚         β”‚
β”‚  β”‚   Store     β”‚  β”‚   Hooks     β”‚  β”‚    Manager      β”‚         β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜         β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                        SERVICE LAYER                           β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”      β”‚
β”‚  β”‚Firebaseβ”‚ β”‚Revenue β”‚ β”‚  Notifee β”‚ β”‚ Sentry β”‚ β”‚ Audio  β”‚      β”‚
β”‚  β”‚Analyticsβ”‚β”‚  Cat   β”‚ β”‚          β”‚ β”‚        β”‚ β”‚ Player β”‚      β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”˜      β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                        DATA LAYER                              β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                      β”‚
β”‚  β”‚  AsyncStorage   β”‚  β”‚  File System    β”‚                      β”‚
β”‚  β”‚  (Redux Persist)β”‚  β”‚  (Recordings)   β”‚                      β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                      β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

🧩 Technical Challenges & Solutions

1. Complex Audio Management

Challenge: Handling simultaneous voice playback with ambient sounds, background audio, and interruptions (calls, notifications).

Solution:

  • Implemented custom audio focus management
  • Used react-native-track-player for background playback with lock screen controls
  • Created audio mixing system for layering ambient sounds over affirmations

2. Offline-First Architecture

Challenge: Users need full functionality without internet connection.

Solution:

  • All voice recordings stored locally in app's document directory
  • Redux Persist for offline state management
  • Queue system for analytics events when offline
  • Zero audio data uploaded to servers (privacy-first design)

3. Subscription Management

Challenge: Cross-platform subscription handling with trial limits and restore functionality.

Solution:

  • RevenueCat integration for unified subscription management
  • Custom paywall trigger logic based on app launches
  • Automatic entitlement updates via listener pattern
  • Smart reactivation notifications for churned users

4. Multi-language Support

Challenge: Supporting 3 languages with dynamic content and locale-specific UX.

Solution:

  • Device locale detection via react-native-localize
  • Centralized translation system with fallbacks
  • Locale-aware notification content
  • RTL-ready layout structure

5. Intelligent Notification System

Challenge: Driving engagement without being intrusive.

Solution:

  • Notifee for reliable local notifications
  • Motivational content rotation
  • Separate reactivation campaign for non-subscribers

6. Managing High-Cost AI APIs & Quotas

Challenge: Implementing expensive AI text-to-speech features while maintaining a freemium model without bankrupting the project.

Solution:

  • Engineered a quota system on the frontend to strictly limit API calls (character/second limits) based on subscription tiers.

  • Implemented local caching: Generated audio files are saved to the file system (react-native-fs) with a hash map. If a user requests the same phrase again, the app plays the local file instead of calling the API, saving 100% of costs on repeats.

  • Fail-safe architecture: Usage limits are checked locally before any network request is initiated.

πŸ“Έ Screenshots

AI Voices Recording Recording Relaxation

  <img src="proxy.php?url=https%3A%2F%2Fgithub.com%2Fscreenshots%2F02-categories.png" width="180" alt="Categories"/>

πŸ“Š Results & Metrics

Metric Value
πŸ“₯ Downloads 10,000+
⭐ Rating 4.0 (97 reviews)
πŸ“± Crash-free rate 99.5%
πŸ”„ Day-7 Retention ~25%
πŸ’³ Conversion to Premium Confidential

πŸ” Privacy & Security

  • Zero audio uploads β€” All voice recordings stay on device
  • No account required β€” Full functionality without registration
  • GDPR compliant β€” European privacy standards

πŸ”— Links

Resource Link
πŸ“² Google Play Play Store
πŸ”’ Privacy Policy Policy Page
πŸ“§ Support [email protected]
πŸ‘©β€πŸ’» Developer Portfolio

πŸ‘©β€πŸ’» About the Developer

I'm Xenia, a frontend and mobile developer based in Italy. I built this entire application from scratch β€” from initial concept to Play Store launch and ongoing updates.

Why I built this: With a background in Psychology, I understand how self-talk shapes our beliefs and behaviors. This app combines that knowledge with my technical skills to create a tool that genuinely helps people improve their mindset.

What makes this project special:

  • 🎯 Designed, developed, and shipped 100% independently
  • πŸ”„ Continuous updates based on user feedback
  • πŸ“ˆ Organic growth to 10K+ downloads
  • πŸ’° Profitable freemium business model

⚠️ Source Code

This repository contains documentation and architecture overview only. The source code is proprietary as this is an active commercial product.

πŸ“„ License

Β© 2026 Xenia Galaktionova. All rights reserved.

About

Self-hypnosis mobile app for positive affirmations | React Native | 10K+ downloads

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors