The problem
Junk removal has a pricing problem. Traditional operators quote by phone, send a crew to inspect, then send a written quote. That workflow loses jobs to faster competitors and misprices a meaningful share of what shows up. ScanJunk needed a way to give honest, instant prices the moment a customer photographs the pile in their garage, across an entire metro area, without growing a phone bank to match. The constraint from day one: it had to feel familiar to someone who has used Uber and DoorDash but has never hired a junk removal service. No phone calls. No “we’ll call you back.” Photograph it, see a price, book a window.
The architecture
The pricing engine runs on OpenAI’s GPT-4o Vision model, scored against an internal calibration set so quotes stay accurate as supply and disposal costs shift. The backend runs entirely on Cloudflare Workers: no servers to maintain, sub-50 ms responses at the edge, and capacity that scales by request instead of by provisioned VMs. Transactional data lives in Cloudflare D1; photos and digital signatures in R2; Stripe handles checkout; Firebase Phone Authentication keeps sign-up frictionless. On the front end we shipped four purpose-built clients instead of a webview wrapper: a customer web app in Next.js, a native iOS app in SwiftUI, a native Android app in Kotlin and Jetpack Compose, and a driver operations app in React Native (Expo), because crews iterate fastest on a shared cross-platform codebase. Every layer deploys independently.
Engineering discipline
A platform this broad fails if quality lives in one developer’s head. We wrote more than 1,300 automated tests across the Workers API, the web client and the mobile apps, so every booking flow, pricing edge case and payment state transition runs in continuous integration before code reaches production. GPS tracking and digital signature capture in the driver app are tested end to end against a simulator. The admin dashboard, used to dispatch crews and reconcile payments, is treated as a first-class application, not an afterthought.
What we shipped
We built the platform to handle photo-priced jobs end to end: quote, booking, payment, dispatch, completion and receipt, with no human in the loop until the driver shows up. You can see it at scanjunkremoval.com. We approach every engagement the same way: build the smallest correct version first, ship it to real users, and expand on what works. If you are evaluating a similar build, we are glad to walk through any of these decisions. Write to [email protected] or use the form below.