A comprehensive React Native Expo mobile application that provides real-time weather and air quality monitoring with a modern, highly interactive, and visually rich UI/UX.
- Home Dashboard: Current location display with GPS, prominent AQI with color-coded indicators, temperature, humidity, wind speed, air pressure, and dynamic health messages
- Air Quality Details: Detailed pollutant breakdown (CO, COβ, NOβ, SOβ, PM2.5, PM10, Oβ) with interactive charts showing trends and WHO safe limits
- Weather Screen: Current conditions, hourly and 7-day forecasts with charts, feels-like temperature, and activity suggestions
- Alerts & Notifications: Push notifications for AQI thresholds and weather changes
- Settings: Unit management (Β°C/Β°F, AQI scales), multiple location tracking, notification preferences
- Modern, clean card-based UI with smooth scrolling
- Color-coded indicators and charts for quick comprehension
- Responsive layouts for different device sizes
- Intuitive UX with clear navigation hierarchy
- Smooth animations and transitions
- Gradient backgrounds and modern visual elements
- Framework: React Native with Expo
- State Management: Redux Toolkit
- Navigation: React Navigation with Expo Router
- Charts: react-native-chart-kit with react-native-svg
- UI Components: Custom components with Linear Gradients
- Location: Expo Location
- Notifications: Expo Notifications
- Storage: AsyncStorage
- APIs: OpenWeatherMap, WAQI, AirVisual
- Node.js (v16 or higher)
- npm or yarn
- Expo CLI (
npm install -g @expo/cli) - iOS Simulator (for iOS development) or Android Studio (for Android development)
git clone <repository-url>
cd atomsync
npm installYou'll need to obtain API keys from the following services:
- OpenWeatherMap: Get your API key from OpenWeatherMap
- WAQI: Get your token from WAQI
- AirVisual: Get your key from AirVisual
Update the API keys in services/api.ts:
const OPENWEATHER_API_KEY = 'your_openweather_api_key';
const WAQI_API_KEY = 'your_waqi_api_key';
const AIRVISUAL_API_KEY = 'your_airvisual_api_key';- Install EAS CLI:
npm install -g eas-cli - Login to Expo:
eas login - Initialize EAS:
eas init - Update the project ID in
app.json:
{
"expo": {
"extra": {
"eas": {
"projectId": "your-actual-project-id"
}
}
}
}# Start the development server
npm start
# Run on iOS simulator
npm run ios
# Run on Android emulator
npm run android
# Run on web
npm run webatomsync/
βββ app/ # Expo Router pages
β βββ (tabs)/ # Tab navigation screens
β β βββ index.tsx # Home dashboard
β β βββ air-quality.tsx # Air quality details
β β βββ weather.tsx # Weather screen
β β βββ settings.tsx # Settings screen
β βββ _layout.tsx # Root layout with Redux provider
βββ components/ # Reusable UI components
β βββ ui/ # UI component library
β βββ Card.tsx # Card components
β βββ Charts.tsx # Chart components
β βββ Alerts.tsx # Alert components
βββ services/ # API and service layer
β βββ api.ts # Weather & air quality APIs
β βββ location.ts # Location services
β βββ notifications.ts # Push notification service
βββ store/ # Redux state management
β βββ appSlice.ts # Main app state slice
β βββ index.ts # Store configuration
β βββ hooks.ts # Typed Redux hooks
βββ assets/ # Images, fonts, etc.
- Current location display with GPS
- Prominent AQI indicator with color coding
- Weather conditions with temperature and description
- Health recommendations based on AQI
- Quick action buttons
- Detailed AQI information
- Pollutant breakdown with WHO guidelines
- Interactive charts for trends
- Health tips and recommendations
- Current weather conditions
- Hourly and daily forecasts
- Weather metrics (humidity, wind, pressure, visibility)
- Sunrise/sunset times
- Activity suggestions
- Unit preferences (temperature, wind speed, AQI scale)
- Notification settings
- Location management
- App information and privacy policy
The app uses Redux Toolkit for state management with the following key slices:
- Location: Current location and saved locations
- Weather: Current weather data and forecasts
- Air Quality: AQI data and pollutant information
- Settings: User preferences and app configuration
- Notifications: Push notification management
- OpenWeatherMap: Current weather, forecasts, and location data
- WAQI: Air quality index and pollutant data
- AirVisual: Additional air quality information
- Expo Location: GPS location services
- Reverse Geocoding: Convert coordinates to city names
The app includes comprehensive push notification support:
- Air Quality Alerts: Notifications when AQI exceeds thresholds
- Weather Alerts: Severe weather condition warnings
- Daily Summaries: Morning weather and air quality updates
- Customizable: Users can enable/disable different alert types
Users can save multiple locations for tracking weather and air quality.
- Temperature: Celsius or Fahrenheit
- Wind Speed: km/h or mph
- AQI Scale: US EPA or India AQI
- Enable/disable push notifications
- Set AQI threshold for alerts
- Weather alert preferences
- TypeScript for type safety
- ESLint for code quality
- Modular component architecture
- Clean separation of concerns
# Run linting
npm run lint
# Type checking
npx tsc --noEmit# Build for iOS
eas build --platform ios
# Build for Android
eas build --platform android
# Submit to app stores
eas submit --platform ios
eas submit --platform android- Fork the repository
- Create a feature branch
- Make your changes
- Add tests if applicable
- Submit a pull request
This project is licensed under the MIT License - see the LICENSE file for details.
For support and questions:
- Create an issue in the repository
- Check the documentation
- Review the code comments
- OpenWeatherMap for weather data
- WAQI for air quality data
- AirVisual for additional air quality information
- Expo team for the excellent development platform
- React Native community for the ecosystem
Built with β€οΈ using React Native, Expo, and modern mobile development practices.