Inspiration

When I sell things on Facebook Marketplace, porch pickup is my go-to. Meetups fall apart all the time, so I just tell people the item will be on my porch and they can grab it whenever. It works, but it runs entirely on trust. I'm sending my home address to a stranger who might never show up, and then hoping they actually leave the cash under the mat or send the money afterward. I wanted the convenience of porch pickup without having to just hope for the best.

What it does

Porch Pickup is a local marketplace built only for porch pickups.

  • Selling takes a few photos. AI writes the title and description, grades the condition from the photos (including visible wear), and suggests a fair price based on what the same item sells for used and new. Sellers can change anything before posting.
  • Your address stays private. Sellers set up their pickup spot, porch instructions and pickup hours once. Buyers only see roughly how far away an item is, and the map shows a general area instead of the house.
  • The payment is held, not charged. Buyers pick a pickup time inside the seller's hours and pay with PayPal or Venmo. The money is held until the sale is done.
  • The address unlocks when the seller confirms. Once the seller agrees to have the item out by then, the buyer gets the address, the porch instructions and any notes.
  • Tap Got it and the seller gets paid. At the porch, the buyer taps Got it and the seller is paid out automatically. If the buyer forgets, the payment goes through on its own 3 days after the pickup time.
  • If the item isn't there, the buyer isn't charged. The buyer can message the seller or report it missing. If the seller doesn't respond within 24 hours, the hold is released and the buyer never pays. If they do respond, an admin reviews both sides.
  • Two-way reviews and reports keep scammers out, and admins can ban users.

How I built it

The app is built with Next.js, TypeScript, Postgres and Prisma, and it's hosted on Render with a cron job that runs every 5 minutes.

The payment flow is built on PayPal:

  • The buy button uses the PayPal JavaScript SDK v6 with both the PayPal and Venmo buttons.
  • Orders are created with the Orders v2 API using the authorize intent, so approving a payment places a hold instead of charging.
  • The Payments v2 API captures the hold when the buyer taps Got it, and voids it when a seller declines, doesn't respond, or an item goes missing.
  • PayPal guarantees a hold for 3 days, so the cron job reauthorizes any hold that's still open after that, which lets pickups be booked up to 4 weeks out.
  • Sellers are paid with the Payouts API to their PayPal email or Venmo.
  • Webhooks keep orders in sync with PayPal.

The AI listing helper sends the photos to Llama 4 Scout, an open-weight vision model, through OpenRouter. It returns the listing text, a condition grade and a list of visible flaws. The main photo then goes to Channel3 image search, which finds matching products along with their current used and new prices. The condition grade picks where the price lands in the used range: like new aims high and fair aims low, and nothing goes above the retail price. Each listing costs a fraction of a cent, and because the model is open-weight, a real platform could host it itself.

Challenges I ran into

  • Finding real used prices. I planned to use eBay's sold listings, but eBay closed that API to new developers and my developer account application was rejected. Channel3 turned out to include used and pre-owned offers from resale sites, so it became the source for both used and new prices.
  • Holds don't last forever. A PayPal authorization is only guaranteed for 3 days, and renewing it is only allowed after that window ends, so the hold renewal had to be built around those exact rules.
  • Keeping addresses truly private. Showing an exact distance would let someone triangulate a house by searching from a few different spots, so every distance and map is measured to a point moved randomly up to 400 meters from the real address.

Accomplishments that I'm proud of

The whole loop works end to end on real PayPal sandbox payments: listing with AI, paying with a hold, the seller confirming, picking up, and the seller getting paid out. Every way a sale can go wrong (a seller who never answers, an item that isn't there, a buyer who forgets to confirm) has an automatic, fair outcome, so neither side ever has to just trust the other.

What I learned

How much a payment platform can do beyond a simple checkout. Authorize and capture, payouts and webhooks together made it possible to build trust into the marketplace itself instead of relying on people to be honest.

What's next for Porch Pickup

  • Push notifications and text alerts when a sale needs attention.
  • A photo taken at drop-off, so the buyer can see the item was put out.
  • Hosting the vision model directly to bring listing costs close to zero.
  • Launching beyond the demo in a real neighborhood.

Try it

To try a sale, pick a buyer from the menu at the top right of the demo, open any listing, choose a pickup time and pay with the sandbox buyer. Then switch to the seller named on the listing to confirm, and switch back to the buyer to tap Got it.

Built With

Share this project:

Updates

Submission history