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