The problem
Restaurants, hotels, caterers and event kitchens throw away edible surplus food daily, while NGOs running community kitchens and shelters nearby struggle to source affordable meals. The gap is coordination, not supply: surplus is perishable, time-boxed to a few hours and scattered across dozens of small donors, so phone-call and WhatsApp coordination collapses exactly when speed matters. A food-donation pickup app closes this gap. The moment surplus appears, the donor posts a listing — what the food is, how many servings or kilograms, vegetarian or not, how it is packed, and the pickup window. NGO volunteers see live listings on a map, claim a pickup so nobody double-books it, get an optimized multi-stop route, and confirm handover only after a food-safety checklist. Every completed pickup feeds a monthly impact report counting meals saved — the auditable numbers NGOs need for CSR partners. The project demonstrates two-sided marketplace design, role-based authentication, real-time sync, location services and push notifications in one Android build.
How it works
The app runs as a donor-to-volunteer pipeline on Firebase. A restaurant staff member signs in and receives the donor role; an NGO volunteer signs in and receives the NGO role — roles are Firebase custom claims assigned by a Cloud Function and enforced by Firestore security rules on every read and write. The donor posts a surplus listing with food details, quantity, veg/non-veg tag, packaging, photos and a pickup window; the write lands in Cloud Firestore with a GeoPoint and a server timestamp. A Cloud Function fans out FCM data messages to volunteers inside the notification radius while snapshot listeners render the listing live on their map. Claiming runs in a Firestore transaction that locks the listing to one volunteer and notifies the donor. The app sorts the volunteer's claims into a nearest-neighbor route, and at each stop the volunteer clears the five-point food-safety checklist, photographs the handover and marks it collected — feeding the monthly impact report.
- Sign-in and role assignment: Firebase Authentication (phone or email); a Cloud Function sets the donor or NGO custom claim, and the client refreshes its ID token so the security rules take effect.
- The donor posts a listing — food details, quantity, veg/non-veg tag, packaging state, photos compressed to 1 MB or less, and a pickup window — written to Firestore with a GeoPoint and server timestamp, queued offline if there is no connectivity.
- Fan-out: a Cloud Function finds verified volunteers inside the notification radius and sends FCM data messages; snapshot listeners render the new listing live on the volunteer map within seconds.
- Claim: the volunteer taps claim; a Firestore transaction locks the listing to that volunteer so concurrent claims cannot double-book it, and the donor receives an acceptance notification.
- Route: the app orders the volunteer's claimed stops nearest-neighbor into one run, shows the approximate total distance, and hands each stop to navigation.
- Handover: the volunteer works through the five-point food-safety checklist with the donor present — the confirm button stays disabled until every check passes — then photographs the handover and marks it collected.
- Report: the completed handover moves to history and increments the meals-saved counters that aggregate into the monthly impact dashboard.
Tech stack:
- Kotlin · Android SDK
- Firebase Authentication
- Cloud Firestore
- Firebase Cloud Messaging
- Google Maps SDK
- Material 3 · Jetpack Compose
- Glide image loading
- Cloud Functions for Firebase
| Parameter | Value |
|---|---|
| Platform | Android 8.0 (API 26) and above (design target) |
| Roles | 2 — donor and NGO volunteer (implemented) |
| Notification radius | 10 km default, configurable (design target) |
| Listing post time | Under 1 minute for a complete listing (design target) |
| FCM delivery | Approximately 2–8 s on a stable network (expected, not measured) |
| Checklist policy | Surplus accepted within 4 h of cooking (design policy, configurable) |
| Photo upload | Compressed to 1 MB or less before upload (design target) |
| Route ordering | Nearest-neighbor across claimed stops (design target) |
| Offline behavior | Firestore persistence; writes sync on reconnect (expected behavior) |
Project features
Three capabilities carry this project. First, true two-sided flows: a donor flow for posting and managing surplus listings and an NGO flow for browsing, claiming and collecting, separated by Firebase custom-claim roles assigned at sign-in — not two apps, but one codebase with role-gated screens. Second, a live pickup pipeline: Firestore snapshot listeners push new listings to nearby volunteers within seconds, FCM data messages drive claim-accepted and pickup-reminder notifications, and a nearest-neighbor route turns scattered claims into one efficient run. Third, a trust layer built for perishable food: a mandatory pre-handover safety checklist plus photo confirmation, addressing the real reason donation logistics fail. Around these sit monthly impact reports with meals-saved, diverted-kg and estimated-CO2e figures, full pickup history, and offline-tolerant caching so a volunteer in a basement kitchen still sees cached listings.
- [Donor listing flow] Post a surplus listing in under a minute: food description, category, veg/non-veg tag, quantity in servings, kg or pieces, packaging state, photos and a pickup window — written to Firestore with a GeoPoint and server timestamp.
- [NGO browse, map and claim] Volunteers browse live listings on a map or list inside a 10 km radius (configurable); one-tap claim runs in a Firestore transaction so two volunteers can never take the same food, and the donor is notified instantly.
- [Optimized multi-stop route] Claimed pickups are ordered nearest-neighbor into a single run with per-stop navigation handoff and an approximate total-distance readout.
- [FCM push notifications] Data-only FCM messages for new nearby listings, claim acceptance and pickup-window reminders, with a locally scheduled fallback for devices where background delivery is delayed.
- [Food-safety checklist at handover] Five checks — cooking recency under a 4-hour policy, packaging integrity, veg/non-veg match, spoilage signs, temperature cue — all must pass before the handover confirms, with photo confirmation.
- [Monthly impact reports] Meals saved, food diverted in kg (approximate) and estimated CO2e avoided, aggregated from completed handovers, with a handover history log and CSV export.
- [Offline-tolerant caching] Firestore persistence keeps cached listings browsable without connectivity; new listings and handover confirmations queue and sync on reconnect.
- [Admin moderation queue] Future scope, not in the base build: donor verification badges and a listing-approval queue for city coordinators.
What is included
- Complete Kotlin source code for both roles (one codebase, role-gated screens)
- Firebase configuration: Authentication setup, Firestore security rules and indexes, FCM setup, Cloud Functions source
- Data-model documentation for listings, claims and handovers
- Setup guide covering google-services.json, the Maps API key and keystore signing
- Project report PDF, PPT presentation and viva Q&A document
- Project abstract PDF
Limitations & prerequisites
- The food-safety checklist is a guided self-declaration, not a lab test — the app cannot detect actual spoilage or pathogens.
- Listings outside the 10 km notification radius receive no push; coverage depends on volunteer density in the area.
- FCM delivery can be delayed on devices or OEM ROMs that force-stop background apps (documented Android behavior); a locally scheduled reminder covers the common case.
- No money handling — food donations only; volunteer transport costs are outside the app.
- Maps navigation needs internet; offline mode caches listings but not map tiles.
- Meal counts come from donor-entered servings, not weighed measurements; kg and CO2e figures are planning estimates.
- Academic prototype, not a food-safety-certified system; NGOs must apply their own food-safety judgment.
Frequently Asked Questions
Is this project suitable for a final-year project?
Yes — for Computer Science, IT and mobile-application programs. It demonstrates two-sided app architecture, Firebase backend design including Auth, Firestore security rules and Cloud Functions, real-time sync, location services and push notifications, all in a genuinely novel domain: donation logistics, not another food-ordering clone. That gives real depth for the design chapter, the implementation demo and viva questions.
How is this different from a food-delivery app?
It is a different product for a different problem. Delivery apps sell food on demand through paid orders; this app rescues surplus food before it spoils. There are no payments, menus or delivery fleets here — instead there are time-boxed donation listings, claim locking so one volunteer collects each listing, multi-stop volunteer routes and a food-safety checklist at handover. The entire data model and workflow are built around perishability and trust, which no ordering app addresses.
What was the hardest technical problem in the actual build?
Two Firebase gotchas shaped the implementation. First, Firestore security rules that read request.auth.token.role fail with PERMISSION_DENIED until the client forces an ID-token refresh with getIdToken(true) after the Cloud Function assigns the role — without it, the donor's first listing write fails at the rules layer. Second, notification-payload FCM messages are swallowed by the system tray when the app is backgrounded, so the reminder path uses data-only messages handled in onMessageReceived, plus a locally scheduled fallback for OEM ROMs that delay background delivery.
Does the app work without internet?
Partially — the app is offline-tolerant but not offline-first. Firestore's offline persistence keeps cached listings browsable without connectivity, and new listings or handover confirmations queue locally until the network returns, then sync automatically. Queued actions are marked clearly in the UI, so nothing is lost or double-submitted. Map tiles, live listing fan-out, claim transactions and push notifications still need internet — the app distinguishes queued actions from live ones, so the volunteer is never misled.
Can this project be customized?
Yes — realistic extensions include an admin moderation queue with donor verification, automatic expiry when a pickup window lapses, recurring-donation schedules for donors with predictable daily surplus, multi-city chapters with coordinator roles, donor-side CSR waste-diversion certificates, and transport-cost splitting among volunteer teams. Each is scoped separately from the base build on request.
What will I receive with the project?
The complete Kotlin source for both roles in one codebase with role-gated screens, the Firebase configuration including security rules, indexes, Cloud Functions and FCM setup, data-model documentation, and a setup guide covering google-services.json, the Maps API key and signing — plus the project report, PPT, viva Q&A and abstract PDF.
Components & software requirements
- Kotlin · Android SDK
- Firebase Authentication
- Cloud Firestore
- Firebase Cloud Messaging
- Google Maps SDK
- Material 3 · Jetpack Compose
- Glide image loading
- Cloud Functions for Firebase
Delivery information
Built-to-order project. Delivery timeline is shared after order confirmation based on current queue.
Support terms
Complete documentation, setup guide, and viva preparation included. Support for setup and explanation provided.
Download free synopsis (PDF)
Enter your name and WhatsApp number — the synopsis PDF downloads immediately. We may send occasional project updates on WhatsApp; no spam.