Skip to content
Back to Work

0A-004 · WEB APP · 2026

JunkZipp: an on-demand junk removal marketplace we built and operate ourselves

Book junk removal online in Miami-Dade: fixed upfront pricing, card held at booking, jobs dispatched to vetted local haulers. Built and run by 0ARCH.

client
0ARCH (in-house product)
industry
Marketplace
shipped
Aug 2026
status
Live
Next.jsCloudflare WorkersD1Stripe ConnectPrisma
JunkZipp: an on-demand junk removal marketplace we built and operate ourselves: 0ARCH project screenshot
01

Why we built it

Most "junk removal near me" searches end at a national lead broker that sells your phone number to five companies at once, and then the phone-tag and haggling starts. We built the version customers actually want: pick your load size, see the exact price up front, book it, and a vetted local hauler shows up. No calls to compare estimates, no lead resale, no surprises on price.

JunkZipp started as a paid directory. Running it taught us the directory model still left customers doing all the work, so we rebuilt it as a full marketplace: JunkZipp prices the job, dispatches it, and handles the money end to end.

02

What we built

Instant upfront pricing. A four-step booking form prices the job from a fixed price table by load size plus itemized surcharges (appliances, mattresses, stairs). One pricing function is the only place a total is ever computed, so the booking form, the admin phone intake, and hauler price changes can never disagree.

A card hold, not a charge. The customer's card is held at booking through Stripe Checkout and only captured when the job is done. If a hauler finds more junk than booked, they propose a change order, the customer approves it from a link, and only then does the price change.

Dispatch that races. The job is offered to every eligible hauler at once; first to tap accept wins, and the race is decided by a single conditional database update so two haulers can never win the same job. If nobody bites, the system automatically escalates: a bonus is added, then the search radius widens, and if it still can't place the job, the hold is released and the customer is told honestly.

Haulers join free and keep 75%. Onboarding checks license and insurance documents, and each completed job generates a payout for the hauler through Stripe Connect, with retries handled by a background sweep.

An operator console. A live dispatch board, phone-order intake for customers who'd rather call (they get texted a payment link, no card read over the phone), and a full audit trail on every job.

03

How it's built

Next.js on the App Router, deployed to Cloudflare Workers through OpenNext, with a D1 (SQLite) database, R2 for documents and photos, and a minute-level cron driving offer expiry, escalation, and payout retries. Payments are Stripe Checkout with manual capture plus Stripe Connect for hauler payouts, with idempotency keys and database constraints making a double-payout impossible. Before launch we ran the entire flow against production for real: booking, forced escalation, the accept race, a mid-job price change, and completion.

04

Why it's in the portfolio

JunkZipp isn't client work, and that's the point. It's a two-sided marketplace we designed, built, and operate ourselves: real money movement, a dispatch race, third-party payouts, and an admin console a non-technical operator can run. When we say we build software that holds up in production, this is one we operate in production ourselves.

05

The stack

  • Framework: Next.js (App Router) on Cloudflare Workers via OpenNext
  • Database: Cloudflare D1 (SQLite) with Prisma
  • Storage: Cloudflare R2 (documents and job photos)
  • Payments: Stripe Checkout (hold at booking, capture on completion) + Stripe Connect payouts
  • Dispatch: blast offers, race-safe accept, timed escalation via cron
  • Email + SMS: transactional notifications with support reference IDs
  • Domain: junkzipp.com

end of file · 0A-004

Start a similar project