Inspiration
Every summer, backyard fruit trees produce far more than any household can eat. Oranges, plums, lemons, and pomegranates often rot on the ground while neighbors down the street would gladly take them. I saw this in my own neighborhood and wanted to fix it. Not with a food bank or a complex exchange system, but with a simple, trust-based platform that lets neighbors share their surplus directly.
What it does
Fruity is a community fruit-sharing platform that connects homeowners who have surplus fruit with neighbors who want it.
Donors create listings for their trees, including fruit type, quantity, and pickup window. Requesters browse an interactive map to find fruit nearby. Once a request is sent and accepted, both parties coordinate pickup time through in-app messaging, without needing to exchange phone numbers.
After pickup, both sides can leave ratings, building trust in the community. A leaderboard celebrates top sharers, and an announcements board lets people broadcast large seasonal harvests.
A key privacy feature is that the map shows only approximate locations, around 500 meters away, until a request is accepted.
How I built it
- Frontend: Next.js with TypeScript and CSS
- Maps: Leaflet for the interactive listing map and Mapbox Geocoding API
- Backend: Next.js API routes handling the full request lifecycle, including listings, pickup requests, scheduling, in-app messaging, ratings, leaderboards, and waitlists
- Database and Auth: Supabase PostgreSQL with Row-Level Security (RLS) policies, along with Supabase Auth for email/password sessions
- Privacy layer: Real GPS coordinates are stored server-side, and the full address is only revealed to the requester after the owner accepts the request
- Property verification: GPS-based detection confirms that a user is physically at the address they claim, within 50 meters, which helps prevent fraudulent listings
Challenges I ran into
One challenge was designing the platform so it stayed easy to use while still supporting realistic pickup coordination. Users needed more than a simple accept-or-decline system. They needed a way to schedule pickup times, negotiate availability, and chat within the platform.
Building that request lifecycle in a clean way was one of the hardest parts of the project.
Accomplishments that I'm proud of
- The entire app runs on free-tier Supabase
- The full pickup cycle works: property setup, listing creation, request submission, scheduling negotiation, messaging, completion, and rating
- The scheduling counter-proposal flow solves a real usability problem by reducing the back-and-forth usually needed to agree on a pickup time
What I learned
I learned that privacy needs to be built into community platforms from the start. Features like approximate map locations and delayed address reveal are essential for user trust.
I also learned how practical Supabase is for storing user data securely and managing authentication. I saw how important database policies are when building an app with private user information.
What's next for Fruity
- AI-powered harvest predictions using weather data to estimate when trees in an area are likely to be ready
- A seasonal harvest calendar showing which fruits are commonly available by month in a region
- A mobile app version, since the map-based experience is a natural fit for a phone app with location and camera support
- AI powered systems that can detect the the expiry of a fruit to automatically take out the listing.
Built With
- css
- geocoding-api
- leaflet.js
- mapbox
- next.js
- supabase
- vercel
Log in or sign up for Devpost to join the conversation.