A modern, production-ready AI chat assistant built with React Native and Expo, featuring voice capabilities, animated avatar, and beautiful themes.
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
- Modern Chat Interface: Beautiful message bubbles with smooth animations
- Voice Input/Output: Record voice messages and receive spoken responses
- Animated AI Avatar: Expressive avatar with 5 emotional states
- Theme System: Light, dark, and system themes with persistence
- Google Gemini Integration: Powered by advanced AI with streaming responses
- Real-time Messaging: Optimized performance with virtualized chat history
- Cross-platform: iOS, Android, and Web support
- TypeScript: Fully typed with strict type checking
- Performance Optimized: Virtualized lists, efficient animations
- Modern Architecture: Clean component structure with custom hooks
- Error Handling: Comprehensive error handling for all API calls
- Responsive Design: Optimized for all screen sizes
/src
/components # Reusable UI components
/screens # Screen components
/services # API and external service integrations
/hooks # Custom React hooks
/store # State management with Zustand
/types # TypeScript type definitions
/constants # App constants and configurations
- Node.js 18+
- Expo CLI
- Google Gemini API key
-
Clone the repository
-
Install dependencies:
npm install
-
Create environment file:
cp .env.example .env
-
Add your Google Gemini API key to
.env
:EXPO_PUBLIC_GEMINI_API_KEY=your_api_key_here
-
Start the development server:
npm run dev
- Visit Google AI Studio
- Create a new API key
- Add it to your
.env
file
The app includes configurable voice settings:
- Language selection
- Speech rate and pitch
- Voice selection (platform dependent)
- Full voice recording capabilities
- Haptic feedback
- Background audio support
- Native speech synthesis
- Visual feedback for voice features
- Web Speech API fallback
- Responsive design adaptations
- Virtualized Lists: Efficient rendering of large chat histories
- Memoized Components: Optimized re-renders
- Lazy Loading: Components loaded on demand
- Animation Optimization: Hardware-accelerated animations
- Memory Management: Automatic cleanup of resources
Uses Zustand for lightweight, efficient state management:
- Chat messages and history
- Theme preferences
- Avatar emotional states
- Voice recording state
- Loading states
Comprehensive error handling includes:
- API call failures with user-friendly messages
- Voice permission handling
- Network connectivity issues
- Invalid API key detection
- Graceful degradation for unsupported features
- Service layer functions
- Custom hooks
- Utility functions
- API integrations
- Voice service functionality
- Theme switching
- Complete chat flows
- Voice message workflows
- Theme persistence
npm run dev
# Web
npm run build:web
# Mobile (requires EAS CLI)
eas build --platform all
# Web preview
expo export --platform web
generateResponse(message: string)
: Generate single responsegenerateStreamingResponse(message: string)
: Stream response chunksgenerateWithContext(messages: Message[])
: Context-aware responses
speak(text: string, options?: VoiceConfig)
: Text-to-speechstopSpeaking()
: Stop current speechgetAvailableVoices()
: Get system voices
startRecording()
: Begin voice recordingstopRecording()
: End recording and return URIplayAudio(uri: string)
: Play audio file
- Fork the repository
- Create a feature branch
- Follow TypeScript and ESLint guidelines
- Add tests for new features
- Submit a pull request
MIT License - see LICENSE file for details
For support and questions:
- Check the GitHub Issues
- Review the documentation
- Ensure proper API key configuration
Built with ❤️ using Expo, React Native, and Google Gemini AI