Empowering coastal communities through crowd-sourced reporting and real-time ocean safety information
- About Sangam
- Key Features
- Screenshots
- Getting Started
- Installation
- Configuration
- How to Use
- App Architecture
- Technologies Used
- Contributing
- Support
Sangam is a comprehensive mobile application designed to protect ocean ecosystems and ensure the safety of coastal communities. The app combines crowd-sourced hazard reporting with real-time weather data and emergency services to create a safer, more informed maritime environment.
To empower fishermen, coastal residents, and ocean enthusiasts with the tools they need to report environmental hazards, access critical weather information, and stay safe while at sea.
A connected community working together to preserve our oceans and protect lives through technology and collaboration.
- Real-time hazard visualization with Google Maps integration
- Crowd-sourced reports from community members
- Verified and unverified reports with distinct visual indicators
- Location-based filtering (30km radius from your current location)
- Hotspot circles showing hazard zones (12km for verified, 5km for unverified)
- Report categories: Pollution, Water Quality, Marine Life, Plastic Waste, and more
- Upvote system to validate community reports
- Image attachments for visual evidence
- Current weather data with beautiful gradient UI
- 5-day weather forecast for planning ahead
- Ocean-specific conditions:
- Wind speed and direction
- Visibility
- Humidity
- Atmospheric pressure
- Sunrise and sunset times
- Fishing Safety Indicator - AI-powered safety assessment based on:
- Wind conditions (unsafe if > 25 km/h)
- Visibility (unsafe if < 1 km)
- Weather conditions (storms, heavy rain)
- Location-aware weather using GPS
- Capture hazard photos directly from the app
- Image upload with reports for verification
- Gallery access for existing photos
- Permission handling for camera and storage
- 24/7 emergency contact (9420473470)
- One-tap calling for urgent situations
- Water-related emergency assistance
- Hazard reporting support
- Real-time translation of all app content
- Support for multiple languages to reach diverse communities
- Seamless language switching
- Localized user experience
- Secure login and signup system
- User profiles with personalized dashboards
- Report history tracking
- Activity monitoring
- Session management
- GPS integration for accurate positioning
- Automatic location detection
- Permission management
- Offline location caching
Before you begin, ensure you have the following installed:
- Flutter SDK (3.10.1 or higher) - Install Flutter
- Dart SDK (3.10.1 or higher) - Comes with Flutter
- Android Studio or VS Code with Flutter extensions
- Git for version control
- A physical device or emulator for testing
- Windows: Windows 10 or later
- macOS: macOS 10.14 or later
- Linux: 64-bit distribution
- Disk Space: At least 2.8 GB (excluding IDE/tools)
- RAM: Minimum 4 GB recommended
git clone https://github.com/yourusername/sangam.git
cd sangamflutter pub getflutter doctorFix any issues reported by Flutter Doctor before proceeding.
For Android:
flutter runFor iOS:
cd ios
pod install
cd ..
flutter runFor Web:
flutter run -d chromeThe weather feature requires a free API key from OpenWeatherMap. Follow these steps:
- Visit OpenWeatherMap
- Sign up for a free account
- Verify your email address
- Navigate to API Keys
- Copy your API key
- Open
lib/services/weather_service.dart - Find the line:
static const String _apiKey = 'YOUR_API_KEY_HERE';
- Replace
YOUR_API_KEY_HEREwith your actual API key:static const String _apiKey = 'a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6';
- Save the file
Note: New API keys may take 10-15 minutes to activate.
- Get a Google Maps API key from Google Cloud Console
- Open
android/app/src/main/AndroidManifest.xml - Add your API key:
<meta-data android:name="com.google.android.geo.API_KEY" android:value="YOUR_GOOGLE_MAPS_API_KEY"/>
- Open
ios/Runner/AppDelegate.swift - Add your API key:
GMSServices.provideAPIKey("YOUR_GOOGLE_MAPS_API_KEY")
The app requires the following permissions (already configured in the project):
Android (android/app/src/main/AndroidManifest.xml):
ACCESS_FINE_LOCATION- GPS locationACCESS_COARSE_LOCATION- Network locationCAMERA- Photo captureINTERNET- API callsWRITE_EXTERNAL_STORAGE- Save photosREAD_EXTERNAL_STORAGE- Access gallery
iOS (ios/Runner/Info.plist):
NSLocationWhenInUseUsageDescription- Location accessNSCameraUsageDescription- Camera accessNSPhotoLibraryUsageDescription- Photo library access
-
View Hazard Reports
- Open the app to see the interactive map
- Red circles indicate verified hazards (12km radius)
- Gray circles indicate unverified reports (5km radius)
- Blue dot shows your current location
-
Submit a Report
- Tap the camera/report button
- Take a photo of the hazard
- Select hazard type (Pollution, Water Quality, etc.)
- Add description
- Submit report
-
Upvote Reports
- Scroll through the reports list at the bottom
- Tap the upvote button to validate reports
- Verified reports (with enough upvotes) appear in green
-
View Report Details
- Tap on any report card to expand
- See full description, images, and location
- Check verification status and upvote count
-
Check Current Conditions
- Navigate to the Weather tab
- View current temperature, feels-like, and conditions
- See weather icon representing current state
-
Fishing Safety
- Check the safety indicator card
- Green "Safe" = Good conditions for fishing
- Red "Unsafe" = Dangerous conditions (high winds, poor visibility, storms)
-
Detailed Ocean Conditions
- Wind speed and direction
- Humidity percentage
- Visibility distance
- Atmospheric pressure
- Sunrise and sunset times
-
5-Day Forecast
- Scroll down to see upcoming weather
- Each day shows temperature, conditions, and safety status
- Plan your activities accordingly
-
Refresh Data
- Pull down to refresh
- Or tap the refresh icon in the header
-
Access Emergency Services
- Navigate to the Emergency tab
- View the 24/7 helpline number: 9420473470
-
Make Emergency Call
- Tap the "Call Now" button
- Your phone will dial the emergency number
- Available for water-related emergencies and hazard reporting
-
Emergency Information
- Read the information card for guidance
- Available 24/7 for immediate assistance
-
Access Your Profile
- Tap the profile icon in the top-right corner
- View your account information
- See your report history
- Check activity statistics
-
Manage Settings
- Change language preferences
- Update profile information
- Manage notifications
- Log out
- Change Language
- Access settings from the dashboard
- Select your preferred language
- All text will be translated in real-time
- Supports multiple regional languages
sangam/
βββ android/ # Android-specific files
βββ ios/ # iOS-specific files
βββ lib/
β βββ constants/ # App constants and configurations
β βββ extensions/ # Dart extensions
β βββ models/ # Data models
β β βββ tweet_model.dart # Report/Tweet data structure
β β βββ weather_model.dart # Weather data structure
β βββ providers/ # State management (Provider pattern)
β β βββ auth_provider.dart # Authentication state
β β βββ user_provider.dart # User data state
β β βββ language_provider.dart # Language state
β βββ screens/ # UI screens
β β βββ home_screen.dart # Map & reports
β β βββ weather_screen.dart # Weather & forecast
β β βββ emergency_screen.dart # Emergency helpline
β β βββ camera_capture_page.dart # Photo capture
β β βββ user_dashboard_screen.dart # User profile
β β βββ citizen_login_screen.dart # Login
β β βββ citizen_signup_screen.dart # Registration
β β βββ getting_started_screen.dart # Onboarding
β βββ services/ # Business logic & API calls
β β βββ api_service.dart # Base API service
β β βββ auth_service.dart # Authentication
β β βββ tweet_service.dart # Report management
β β βββ weather_service.dart # Weather API
β β βββ translation_service.dart # Language translation
β β βββ permission_service.dart # Permission handling
β β βββ storage_service.dart # Local storage
β βββ widgets/ # Reusable UI components
β β βββ translated_text.dart # Auto-translating text widget
β βββ main.dart # App entry point
βββ assets/ # Images, icons, and resources
βββ test/ # Unit and widget tests
βββ pubspec.yaml # Dependencies and configuration
βββ README.md # This file
The app uses Provider for state management:
AuthProvider- Manages authentication stateUserProvider- Manages user data and sessionLanguageProvider- Manages language preferences
- User Action β UI Screen
- Screen β Service (API call or local operation)
- Service β Provider (update state)
- Provider β UI (rebuild with new data)
- Flutter 3.10.1+ - Cross-platform UI framework
- Dart 3.10.1+ - Programming language
| Package | Version | Purpose |
|---|---|---|
provider |
^6.1.1 | State management |
google_maps_flutter |
^2.5.0 | Interactive maps |
geolocator |
^12.0.0 | GPS location services |
camera |
^0.10.5+9 | Photo capture |
http |
^1.2.2 | API communication |
translator |
^1.0.4+1 | Multi-language support |
url_launcher |
^6.3.1 | Phone calls & links |
permission_handler |
^11.3.1 | Permission management |
shared_preferences |
^2.3.2 | Local data storage |
path_provider |
^2.1.4 | File system access |
flutter_svg |
^2.0.10+1 | SVG image support |
cupertino_icons |
^1.0.8 | iOS-style icons |
- OpenWeatherMap API - Weather data and forecasts
- Google Maps API - Map visualization and location services
- Custom Backend API - User authentication and report management
We welcome contributions from the community! Here's how you can help:
- Check if the issue already exists
- Create a detailed bug report with:
- Steps to reproduce
- Expected behavior
- Actual behavior
- Screenshots (if applicable)
- Device and OS information
- Fork the repository
- Create a feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
- Follow Dart style guide
- Use meaningful variable and function names
- Add comments for complex logic
- Write unit tests for new features
Issue: Weather data not loading
- Solution: Check your OpenWeatherMap API key and ensure it's activated (wait 10-15 minutes after creation)
Issue: Location not detected
- Solution: Enable location services in device settings and grant permission to the app
Issue: Map not displaying
- Solution: Verify Google Maps API key is correctly configured in AndroidManifest.xml or AppDelegate.swift
Issue: Camera not working
- Solution: Grant camera permission in device settings
Issue: Build errors after flutter pub get
- Solution: Run
flutter cleanthenflutter pub getagain
- Emergency Helpline: 9420473470 (24/7)
- Email: support@sangam.app
- Documentation: Full Documentation
- FAQ: Frequently Asked Questions
- Discord: Join our community
- Twitter: @SangamApp
- Facebook: Sangam Community
This project is private and proprietary. All rights reserved.
- OpenWeatherMap for providing weather data API
- Google Maps Platform for mapping services
- Flutter Community for excellent packages and support
- Coastal Communities for their valuable feedback and testing
- All Contributors who have helped make Sangam better
- Push notifications for nearby hazards
- Offline mode with cached data
- Social sharing of reports
- Advanced analytics dashboard
- Integration with coast guard services
- Marine life identification using AI
- Tide predictions
- Ocean current information
- Community forums
- Gamification and rewards system
- Initial release
- Interactive map with hazard reporting
- Weather and ocean conditions
- Emergency helpline
- Multi-language support
- User authentication
- Camera integration