An intelligent mobile assistant app built with React Native and Expo that provides voice-controlled calendar management, reminders, and smart notifications with cross-platform compatibility. Powered by Google Gemini AI for natural language processing and featuring a modern, responsive UI with dark/light mode support.
- Natural Language Processing: Powered by Google Gemini AI for intelligent conversation
- Cross-Platform Speech Recognition: Works on Android, iOS, and Web
- Voice Commands: Create, update, and delete events/reminders using voice
- Speech Feedback: Text-to-speech responses for accessibility
- Smart Event Creation: AI-powered event scheduling with natural language
- Calendar Integration: Seamless integration with device calendar
- Conflict Detection: Intelligent scheduling to avoid overlapping events
- Event CRUD Operations: Full create, read, update, delete functionality
- Intelligent Scheduling: Automated reminder notifications
- Interactive Notifications: Reply and interact directly from notifications
- Background Processing: Reliable notification delivery
- Custom Categories: Organized notification types
- Dark/Light Mode: Automatic theme switching with system preference
- Responsive Design: Optimized for all screen sizes and orientations
- Smooth Animations: Polished UI transitions and interactions
- Error Boundaries: Graceful error handling with user-friendly messages
- OTP-Based Authentication: Secure email-based sign-in/sign-up
- Profile Management: Customizable user profiles with settings
- Session Management: Secure session handling across devices
- Privacy-First: No password storage, secure token-based auth
| Category | Technology |
|---|---|
| Framework | React Native with Expo SDK 53 |
| Navigation | Expo Router with typed routes |
| Database | Supabase (PostgreSQL) with RLS |
| AI/ML | Google Gemini Pro API |
| Speech | @react-native-voice/voice |
| Notifications | expo-notifications |
| State Management | Zustand |
| Styling | React Native StyleSheet + Custom Theme |
| Development | TypeScript, ESLint, Metro |
| Build/Deploy | EAS Build, Expo Dev Client |
Before getting started, ensure you have the following installed:
- Node.js 18+ (Download)
- Package Manager: npm, yarn, or pnpm
- Expo CLI: Install globally with
npm install -g @expo/cli - Git: For version control
- Code Editor: VS Code recommended with React Native extensions
- Android: Android Studio + Android SDK 34+ (for Android builds)
- iOS: Xcode 15+ and Command Line Tools (macOS only, for iOS builds)
- EAS Account: Sign up for cloud builds (recommended)
- Physical Device: Expo Go app for quick testing
- Emulator/Simulator: Android Virtual Device (AVD) or iOS Simulator
# Clone the repository
git clone <repository-url>
cd Aura
# Install dependencies
npm install
# or
yarn installCreate a .env file in the root directory with the following variables:
# Supabase Configuration
EXPO_PUBLIC_SUPABASE_URL=https://your-project.supabase.co
EXPO_PUBLIC_SUPABASE_ANON_KEY=your_supabase_anon_key
# Google Gemini API
EXPO_PUBLIC_GEMINI_API_KEY=your_gemini_api_key
β οΈ Important: Never commit your.envfile to version control. Add it to.gitignore.
Getting Your API Keys:
-
Supabase:
- Create account at supabase.com
- Create new project
- Go to Settings β API to find your URL and anon key
-
Google Gemini:
- Visit Google AI Studio
- Create API key for Gemini Pro
- Enable Generative Language API in Google Cloud Console
-
Create a Supabase project at supabase.com
-
Set up database schema by running the SQL migrations:
-- Navigate to Supabase Dashboard β SQL Editor -- Copy and execute the SQL from supabase/migrations/ files: -- 1. First run: 20250629140123_muddy_sound.sql -- 2. Then run: fix_delete_policies.sql
-
Configure Row Level Security (RLS):
- Tables
profiles,events,remindersshould have RLS enabled - Policies allow users to access only their own data
- Authentication required for all operations
- Tables
-
Test the connection:
# Verify connection in your app npx expo start # Check for connection errors in development tools
- Get API Key from Google AI Studio
- Enable APIs in Google Cloud Console:
- Generative Language API
- (Optional) Cloud Translation API for multi-language support
- Set usage quotas to prevent unexpected charges
- Test API access:
curl -X POST \ -H "Content-Type: application/json" \ -d '{"contents":[{"parts":[{"text":"Hello"}]}]}' \ "https://generativelanguage.googleapis.com/v1beta/models/gemini-pro:generateContent?key=YOUR_API_KEY"
# Start development server
npx expo start
# or with yarn
yarn expo start
# Run on specific platforms
npx expo start --android # Android emulator/device
npx expo start --ios # iOS simulator/device
npx expo start --web # Web browser
# Build and run locally (requires native setup)
npx expo run:android # Local Android build
npx expo run:ios # Local iOS build (macOS only)
# Clear cache if needed
npx expo start --clear- Install Expo Go app on your mobile device
- Scan QR code from the terminal
- Or use emulator/simulator for testing
- Enable permissions when prompted (microphone, notifications)
- If you see metro bundler errors, try
npx expo install --fix - For Android: Ensure USB debugging is enabled
- For iOS: Trust the developer certificate in Settings
- For web: Use a modern browser (Chrome, Firefox, Safari)
Aura/
βββ π± app/ # App screens (Expo Router)
β βββ (auth)/ # Authentication flow
β β βββ index.tsx # Sign-in screen
β β βββ sign-up.tsx # Sign-up screen
β βββ (tabs)/ # Main app tabs
β β βββ index.tsx # AI Assistant tab
β β βββ calendar.tsx # Calendar management
β β βββ reminders.tsx # Reminders list
β β βββ settings.tsx # User settings
β βββ auth/
β β βββ confirm.tsx # OTP confirmation
β βββ _layout.tsx # Root layout with providers
β βββ index.tsx # App entry point
β βββ +not-found.tsx # 404 error page
β
βββ π§© components/ # Reusable UI components
β βββ ErrorBoundary.tsx # Error boundary component
β
βββ π¨ constants/ # App constants
β βββ Colors.ts # Theme color definitions
β
βββ πͺ hooks/ # Custom React hooks
β βββ useColors.ts # Theme color hook
β βββ useFrameworkReady.ts # Framework initialization
β βββ useResponsiveScreen.ts # Responsive design utilities
β
βββ π lib/ # Core business logic
β βββ assistantCalendarService.ts # AI calendar operations
β βββ gemini.ts # Google Gemini integration
β βββ notificationService.ts # Notification management
β βββ platformUtils.ts # Platform-specific utilities
β βββ speech.ts # Text-to-speech service
β βββ speechRecognition.ts # Speech-to-text service
β βββ supabase.ts # Supabase client
β
βββ π plugins/ # Expo config plugins
β βββ withAndroidManifestFix.js # Android build fixes
β
βββ πͺ stores/ # State management (Zustand)
β βββ useAuthStore.ts # Authentication state
β βββ useThemeStore.ts # Theme state
β
βββ ποΈ supabase/ # Database schema
β βββ migrations/ # SQL migration files
β
βββ π types/ # TypeScript definitions
β βββ database.ts # Database types
β βββ web-speech.d.ts # Speech API types
β
βββ π― assets/ # Static assets
β βββ images/ # App icons and images
β
βββ βοΈ Configuration Files
βββ app.json # Expo configuration
βββ eas.json # EAS Build configuration
βββ package.json # Dependencies and scripts
βββ tsconfig.json # TypeScript configuration
βββ metro.config.js # Metro bundler configuration
# Development
yarn dev # Start Expo dev server (alias for expo start)
yarn expo start # Start development server
yarn android # Run on Android device/emulator
yarn ios # Run on iOS device/simulator
# Building & Deployment
yarn build:web # Build optimized web bundle
yarn lint # Run ESLint code analysis
# EAS Build (Cloud Building)
eas build --platform android # Build Android APK/AAB
eas build --platform ios # Build iOS IPA
eas build --platform all # Build for both platforms
eas submit # Submit to app stores
# Development Tools
expo doctor # Check development environment
expo install --fix # Fix dependency compatibility
npx expo start --clear # Clear Metro cache and restartThe project includes optimized EAS build profiles in eas.json:
{
"build": {
"development": {
"developmentClient": true,
"distribution": "internal"
},
"preview": {
"distribution": "internal",
"android": { "buildType": "apk" }
},
"production": {
"android": { "buildType": "aab" }
}
}
}- Hot Reloading: Instant code updates during development
- TypeScript: Full type safety and IntelliSense
- Error Boundaries: Graceful error handling in production
- Cross-Platform: Single codebase for Android, iOS, and Web
- EAS Build: Cloud-based building and deployment
graph TB
A[React Native App] --> B[Expo Router]
B --> C[Authentication Layer]
C --> D[Main App Tabs]
D --> E[AI Assistant]
D --> F[Calendar]
D --> G[Reminders]
D --> H[Settings]
E --> I[Speech Recognition]
E --> J[Gemini AI]
E --> K[Text-to-Speech]
F --> L[Calendar Service]
G --> M[Notification Service]
I --> N[Voice Processing]
J --> O[Natural Language Understanding]
K --> P[Audio Output]
L --> Q[Supabase Database]
M --> Q
C --> Q
Q --> R[Row Level Security]
Q --> S[Real-time Subscriptions]
- User Input β Voice or text input received
- Speech Processing β Convert speech to text (if voice)
- AI Processing β Gemini AI analyzes intent and entities
- Action Execution β Perform calendar/reminder operations
- Database Update β Store changes in Supabase
- UI Update β Reflect changes in real-time
- Notification β Schedule relevant reminders
- Voice Feedback β Provide audio confirmation
- Authentication: OTP-based, passwordless authentication
- Authorization: Row Level Security (RLS) in Supabase
- Data Encryption: HTTPS for all communications
- Local Storage: Expo SecureStore for sensitive data
- API Security: Environment variables for API keys
- Input Validation: Client and server-side validation
