Web·Still cooking
AnnaDaan
A food donation app connecting donors and recipients, with an ML layer on the way
4-phase
claim flow
- Role
- Built the foundation and screens 1-5 (Splash, Login, Home, AddDonation, DonationDetail), Firebase auth, live Firestore donations, Cloudinary photo upload and native Google Sign-In. 50/50 split with Mukta.
- Team
- Team of 2, with Mukta
- When
- Ongoing
Problem
A food donation app that connects donors and recipients. The base app was judged too basic, so an ML layer is being added to make it smarter about food safety and demand.
Approach
Started in Flutter, then rebuilt as a responsive React web app, with Capacitor wrapping it for mobile. Donations follow a 4-phase claim flow: Post, Request, Pickup, Delivered. A recipient's request can be cancelled while it's still pending. Planned, not built yet: a cooked-meal freshness classifier and donation-volume forecasting. A rule-based FSSAI safety layer comes first, a 50-60 image pilot dataset acts as a go/no-go gate before any CNN training, and Grad-CAM is planned for explainability.
Result
In progress. The base app is built; the ML layer is still planned and not built yet.
How it fits together
- 1. Postdonor posts food, donation: available
- 2. Requestrecipient requests it, claim: Pending
- 3. Pickupdonor accepts, then marks picked up, claim: RequestAccepted
- 4. Deliveredclaim: Claimed, leaves the available lists
Features
- Firebase auth with native Google Sign-In
- Live Firestore donations
- Cloudinary photo upload
- Screens: Splash, Login, Home, AddDonation, DonationDetail
- Responsive web app, wrapped for mobile with Capacitor
Challenges
signInWithPopup breaks inside the Capacitor WebView, fixed by switching to @capgo/capacitor-social-login. GitHub also flagged a leaked Google API key, so I rotated it and moved it to .env.local.
What I learned
Web code can behave differently inside a Capacitor WebView: Google sign-in only worked after switching to a native plugin. A leaked API key flagged by GitHub taught me to rotate it and keep secrets in .env.local. The professor's feedback that the base app was too basic is why the ML layer is being planned.
Tech
ReactViteTailwindshadcn/uiCapacitorFirebase AuthFirestoreCloudinaryLeaflet + OpenStreetMap