Inspiration

This idea came straight out of working in a restaurant. Almost every night we ended up with perfectly good food that simply did not sell before closing, and most of it went into the bin. It always felt wrong, because there are plenty of people nearby who would happily eat that food if it were a little cheaper. The merchant already wants to move it rather than waste it, and the customer already wants a good meal for less. The only thing missing was a simple platform that connects the two before the food is gone. Here in Australia that gap is everywhere, from cafes and bakeries to lunch bars, so we built NoMoreWaste to close it.

What it does

NoMoreWaste is a marketplace for surplus food. A merchant can join in minutes, add a listing, and put it live straight away. There are two ways to sell. A Surplus Box can be grabbed any time before its pickup window closes, and a Daily Drop is a small batch of deeply discounted items that unlock at one exact moment, first come first served. Stock can never go below zero, so a venue never oversells even when a crowd rushes the last item. Merchants stay in control of their own high quality leftovers and can schedule drops to recur, while shoppers browse what is near them on a live map, grab a deal in one tap, and get a pickup code to show at the counter. Payment happens in person, so there is nothing to integrate on day one.

How we built it

The whole thing is one Next.js app deployed on Vercel, where the same project serves the user interface and the backend API route handlers. We scaffolded the front endquickly with v0 and then wired it to the real backend. Every venue, liingle Amazon DynamoDB table. A claim is one atomic conditional write,which is what makes overselling impossible, and the opening time of a Daily Drop is enforced inside that same write on the server so a tampered client cannot claim early. Finding deals near you runs off a geohash index on the table and is plotted on an interactive map. Expired drops clean themselves up with TTL. On top of that an EventBridge schedule triggers a Lambda that publishes a fresh set of drops on its own, so the marketplace always has something live. We built the whole thing in a singweekend. Challenges we ran into The hardest part was correctness under pressure. When many people claiame instant, the system has to let exactly the right number through andcleanly turn everyone else away, with the stock landing exactly on zero and never going negative. We solved that with a single atomic conditional write rather than reading and then writing. We also learned the hard way that slamming one item with ten thousand simultaneous claims creates a hot partition that DynamoDB throttles, while the same load spread across many venues flows through with no throttling ao real traffic. Keeping the live site populated for someone who mightopen it on any random day was another puzzle, and we solved it with a scheduler that creates a new batch and then prunes the old one, so the site is never empty and never shows duplicates. We also hit a deployment snag where our local commit email did not match the connected account, which quietly blocked builds until we tracked it down.

Accomplishments that we're proud of

We are proud that the no oversell guarantee is proven, not just claimend shoppers claiming across a hundred venues went through with zerothrottling and zero oversell, and twenty thousand claims across five hundred venues still sold exactly the right number of units with the stock never going negative. We are also proud that the weekend prototype is already the production des locally and on real AWS. The app is live and public, the consumermarketplace and the merchant console are cleanly separated, and the marketplace refreshes itself on a schedule with no babysitting.

What we learned

We learned a lot about designing a data layer for correctness under contention rather than just storing rows. Single table DynamoDB design, atomic conditional writes, geohash sharding over a global secondary index, TTL, and streams all came together around real access patterns. The hot partition lesson was a genuine surprise and reshaped how we think about scale. On the product side we learned how much a countdown and a flash sale change behaviour, turning a one off bargain into a reason to come back. And we learned how fast a polished front end can come together wact is clear.

What's next for NoMoreWaste

Next we want real merchant onboarding with proper accounts and role based access so any cafe can sign up on its own. We will add real browser geolocation so near me uses the shopper's actual position, and bring in payments so the whole tran. Push notifications when a drop opens nearby would add real urgency,and our realtime websocket path, which is already designed, can light up live stock changes for everyone watching. From there it is about growing beyond Melbourne to more cities and more kinds of venues, from bakeries and cafes to grocers and full restaurants.

Built With

Share this project:

Updates