Inspiration

Farmers drive hours to distribution centers, wait in line, and sell their crops for pennies per pound. Meanwhile, we buy the same produce at the supermarket for many times that price, after it has traveled hundreds or thousands of miles. Selling direct would fix the prices, but no farmer can afford to drive into the city for one customer. We wanted to make direct trade worth the trip.

What it does

Curbstand is a group-buy platform for produce in the Seattle / Puget Sound area.

  • Customers pool demand. One customer starts a group buy with a produce type, a target quantity (e.g. 50 lb), an approved public pickup spot and a pickup window. Neighbors and restaurants join with the amount they want.
  • Local farmers make offers. Only farmers who grow that crop and serve that area can respond. Each offer names a price per pound, how much they can bring, and when they're available.
  • The organizer picks one once the group hits its target. Everyone sees the same live status, from open to funding, matched, ready for pickup and completed.
  • Deposits keep people honest. Joining records a deposit so farmers know the order is real. In the MVP this is clearly labeled as simulated; no money moves.
  • Deadlines are enforced. Joins and offers close on time, and a background job cancels group buys that miss their deadlines.

How we built it

  • Stack: a TypeScript monorepo, with a Fastify API, Prisma on SQLite, and Zod validation shared between the backend and frontend.
  • Shared package: one source of truth for every status, error code, unit and request/response shape, so the frontend and backend can't drift apart.
  • Auth: JWT login, bcrypt password hashes, rate-limited login and signup, and reusable permission checks (customer, producer, owner, operator).
  • Money and weight: stored as whole numbers (cents, hundredths of a pound) and never as floating-point numbers, so prices always add up.
  • Farmer matching: a distance calculation decides which farmers can serve which pickup spot, based on farm location and service radius.
  • Tests: 60+ automated tests that run on every push in GitHub Actions.

Challenges we ran into

  • Two backends at once. We split the work into parallel tasks, and two of us scaffolded the same backend at the same time on different stacks (Hono + Drizzle + Postgres vs. Fastify + Prisma + SQLite). We settled on one stack, rebased, and moved the group-buy logic onto the shared foundation in the middle of the hackathon.
  • Money as decimals. An early version stored prices as JavaScript floats. We moved everything to whole-number cents before it could cause rounding bugs.
  • "Works on my machine." The test suite crashed on a teammate's older Node 20. We tracked it to a dependency that requires Node 22, set that as the project's minimum, and added CI to catch it automatically.
  • Race conditions. Two people could accept an offer at the same moment. We made the critical status changes conditional, so each one happens exactly once.

Accomplishments that we're proud of

  • A full backend for the core flow: sign up, create a group buy, join, make an offer, match, and mark ready for pickup. It's tested end to end.
  • Clean handoffs between parallel workstreams. Each task adds its own route file, and nobody edits the same central file.
  • Being honest in the product: deposits and price estimates are labeled as such, and we never fake a state.

What we learned

  • Agree on the stack before anyone writes code. Ten minutes of alignment saves hours of merging.
  • A shared contract package pays off fast when frontend and backend are built at the same time.
  • Use CI from the first commit. "It passed on my laptop" isn't a test result.

What's next for Curbstand

  • QR check-in at pickup, with manual check-in as a fallback.
  • A supermarket price tracker. An AI agent (Gemini) would estimate current retail prices, so every group buy shows how much you're saving.
  • Real deposits and payouts through a payment processor.
  • Dashboards for customers' group buys and producers' eligible orders, plus recurring weekly group buys.
  • Expanding beyond Seattle, starting with other metro areas that have farmland nearby.
Share this project:

Updates

Submission history