I. Stakes

Food waste is a logistics problem dressed up as a moral one. A third of the food we produce never gets eaten, and surplus food and food-insecure people often live in the same zip code. The bottleneck is not supply and it is not demand; it is matching, scheduling, and trust, which is exactly the kind of bottleneck a marketplace can attack.

30–40%Of the US food supply that goes to waste each year (USDA)
44MAmericans food insecure as of 2023

II. Decisions

Protect the donor's 30 seconds

Restaurants need to post in under 30 seconds or they won't.

The supply side of a food marketplace dies on friction, so the post flow is two taps: photo, title, expiry, dietary chips, done. The welcome screen holds the same line, three feature pills and one CTA, no survey, no forced email entry. A restaurant manager at closing time will not fill out a form, and every screen upstream of the feed exists to keep that person posting.

Gate contact behind trust

Recipients request; donors accept or decline with one tap from an approval queue. Contact information is shared only after a donor accepts, and reputation does the rest of the work: ratings and listing history let strangers vet each other before food changes hands.

Keep coordination in the app

Once a request is accepted, pickup gets arranged in a realtime thread over Supabase channels, with online presence and unread state. Pickup happens in DM, not over text, which keeps the listing, the thread, and the reputation in one place.

Rank the feed by distance

The feed sorts listings by location and freshness; search adds radius, category, dietary, and saved-search filters, all backed by Postgres + PostGIS. Proximity is the product: a sourdough loaf is only worth claiming when it sits 0.4 miles away and expires today.

III. What shipped

25+ screens on iOS and Android from a single TypeScript codebase: React Native under Expo Router, NativeWind for styling, TanStack Query and Zustand for state, and Supabase underneath, Postgres with PostGIS for radius search and realtime channels for the pickup threads. The structure below is the live router; the screen map after it is the product in ten lines.

app/Expo Router · route groups
app/
├── (auth)/          # welcome · get started · log in
└── (app)/
    ├── (tabs)/      # home · search · post · messages · account
    ├── listing/     # detail · one-tap request
    ├── chat/        # realtime pickup threads
    └── requests/    # donor approval queue
Fig. 02 — The live Expo Router structure: one auth group, one tab group, three flows.
No.ScreenRoleIn one line
01WelcomeFirst touchThree feature pills, one CTA. No survey, no forced email entry.
02HomeDistance-ranked feedListings sorted by location + freshness. Save with a tap, expand for details.
03DetailListing detailPhoto, distance, expiry, dietary tags, donor reputation, one-tap request.
04PostTwo-tap donor flowImage, title, expiry, dietary chips. Restaurants need to post in under 30 seconds or they won't.
05SearchFiltered discoveryRadius + category + dietary + saved-search support, all backed by Postgres + PostGIS.
06MessagesRealtime threadsDonor and recipient coordinate pickup over Supabase Realtime. Unread dot, last-message preview.
07ChatPickup coordinationIn-thread messaging with online presence. Pickup happens in DM, not over text.
08RequestsDonor approval queueDonors triage incoming claims with one tap. Trust gate before contact info is shared.
09SavedRecipient watchlistHeart any listing to come back later. Synced via Supabase across the recipient's devices.
10AccountReputation + historyProfile shows posts/claims/saves, ratings build trust between strangers exchanging food.
Fig. 03 — The screen map. Ten screens, one line each, from the live product tour.

IV. Results

The honest ledger: the app runs, the market does not exist yet. 25+ screens work on iOS and Android today, but The FoodXChange is pre-launch, so there are no user counts, no pickup times, and no diverted-food totals to report, and this page does not invent them. The first market is Greater Boston, and the numbers that matter, listings posted, claims completed, median pickup time, will come from there or not at all.

V. What I learned

  • Marketplace supply dies on friction. The two-tap post flow is the most important engineering in the app and it barely looks like engineering: every field removed from the donor form is worth more than a feature added anywhere else.
  • Trust has to be built into the product, not written into a policy. The approval gate, the ratings, and the in-app threads exist because strangers exchanging food need a reason to trust each other before the handoff.

Colophon

  • Founding engineer & product leadSmall team · 2023 – Present
  • React Native · Expo Router · Supabase · TypeScriptiOS + Android
  • Pre-launch; first market Greater BostonNo public build yet