A community-driven mobile application that bridges the gap between volunteers, NGOs, and resource donors to ensure efficient distribution of resources like food, clothing, medicine, and more.
Full Video Demo - here
- 
Geo-based Notifications 
 Notifies the nearest NGO based on the volunteer's real-time location when resources are available.
- 
Fallback Logic 
 If an NGO declines a request, the system automatically forwards it to the next nearest NGO, ensuring no help goes unanswered.
- 
In-App Notification Inbox 
 Both volunteers and NGOs have access to a real-time notification center for seamless communication and coordination.
- 
Impact Analytics (Upcoming) 
 Track resources saved, requests completed, NGO participation, and community impact.
- 
Multi-Language Support (Upcoming) 
 Breaking language barriers by supporting regional languages for inclusive accessibility.
- 
Offline Functionality (Upcoming) 
 Enable resource logging and request queuing in remote areas with poor internet connectivity.
- Flutter β Core mobile app framework for cross-platform development
- Open and Show Map (flutter_map + latlong2) β Interactive maps using OpenStreetMap and distance-based logic
- Firebase Firestore β Real-time NoSQL cloud database for user, donation, and notification data
- Firebase Authentication β Secure user sign-in and session management
- Firebase Performance β Monitoring app performance in real-time
- Cloud Functions (planned/future) β For serverless backend logic (future scope)
- Gemini API (Google AI) β For intelligent text or media generation and assistance
- Google IDX β For AI-assisted development and cloud-based coding
- Geolocator β To retrieve device location for volunteers and NGOs
- latlong2 β For distance calculation and sorting NGOs based on proximity
- Provider β Lightweight state management
- GoRouter β Declarative routing in Flutter
- Shared Preferences β Local key-value storage
- Cached Network Image β Efficient image loading and caching
lib/
βββ π auth/                        # Authentication logic (login, signup)
βββ π backend/                     # Firestore & API interaction layer
βββ π components/                  # Reusable UI components
βββ π filler/                      # Placeholder/dev-stage widgets
βββ π help/                        # Help & support screens
βββ π home_page/                   # Home screen for users
βββ π login_page/                  # Login UI and logic
βββ π main_code/widgets/           # Core functional widgets
βββ π map/                         # Location-based logic using open_and_show_map
βββ π n_g_o_notification_inbox/   # NGO notifications & inbox
βββ π n_g_o_profile/              # NGO profile management
βββ π ngo_landing_page/           # NGO dashboard
βββ π on_boarding_page/           # Onboarding flows for new users
βββ π smart_volunteer_notifier/   # Custom widget for fallback NGO notifications
βββ π stylings/                   # App-wide themes & styles
βββ π volunteer_landing_page/     # Volunteer dashboard
βββ π volunteer_profile/          # Volunteer profile settings
βββ π app_state.dart              # App-wide state management
βββ π index.dart                  # Central export hub for all route widgets
βββ π main.dart                   # Main Flutter app entry point
- 
Clone the Repository git clone https://github.com/akshat2474/Hand2Hand 
- 
Open in IDE of your choice 
- 
Firebase Setup - Enable Firebase Auth (Email/Password)
- Create users,donationsandnotificationscollections
- Add Firestore rules accordingly
 
- 
Configure Geolocator Plugin 
 Ensure location permissions are handled for Android & iOS.
- 
Run the App flutter run 
graph TD
  A[Volunteer logs a donation] --> B[Save in 'donations']
  B --> C[Find nearest NGO by location from 'users']
  C --> D[Create a 'notification' document]
  D --> E[NGO receives in-app notification]
  E --> F{Accept or Decline?}
  F -->|Accept| G[Update donation + notification status]
  F -->|Decline| H[Notify next closest NGO]
    Contains user profiles for both volunteers and NGOs.
- bio(string)
- city(string)
- created_time(timestamp)
- display_name(string)
- email(string)
- latitude(number)
- longitude(number)
- role(string):- "Volunteer"or- "NGO"
- uid(string)
- updatedAt(timestamp)
Each document represents a donation posted by a user.
- description(string)
- itemType(string)
- quantity(number)
- status(string):- "pending",- "accepted",- "completed"
- timestamp(timestamp)
- userId(string)
Tracks messages sent from volunteers to NGOs regarding donations.
- donationRef(reference)
- isRead(boolean)
- location(geopoint)
- message(string)
- recipientID(string)
- recipientName(string)
- senderID(string)
- senderName(string)
- status(string):- "pending",- "accepted",- "declined"
- timestamp(timestamp)
- type(string): e.g.,- "food_donation",- "clothing_donation"
We welcome contributions from developers, NGOs, and tech-for-good enthusiasts!
- Fork the repo
- Create a new branch
- Make your changes
- Submit a pull request
Licensed under the MIT License.
Feel free to use and improve the project with proper attribution.
Made by: Akshat Singh and Anant Singhal