QUARRY
An AI picker's assistant that prices estate sales before you arrive
An AI picker's assistant, built in a day. It reads every estate sale near home, prices what it sees in the photos, and grades whether the drive is worth it — before anyone gets in the car.
The scoring engine is fully deterministic: a 60/25/15 weighted split across profit, distance, and confidence. Every part of QUARRY except the Claude vision call is plain Python — no model in the loop for the grade itself.
These are the actual items QUARRY pulled from live estate-sale listings, described by
Claude Vision, and priced against real eBay sold comps. The panel below runs a faithful port of
scorer/scoring.py — profit 60%, distance 25%, confidence 15% — against those real
values. Against the archived inputs it reproduces all 98 stored scores, grades and verdicts exactly.
The point of the tool is the question “is this worth the drive?”, so the interesting control is distance. Every item below came from a sale 245 miles away, which is why almost nothing qualifies. Pull that slider down and watch the board re-grade — distance is a quarter of the score, and the whole thesis is visible in one drag.
Snapshot of the archive. Prices are eBay sold comps recorded at scrape time, not live listings.
From a sale photo to “worth the drive?”
Every card below is real data from the March 2026 run — 47 sales, 98 catalogued items. Press play, or click any stage. Switch the item to watch the scoring gate approve one find and reject another for distance.
The honest detail that sells it: stages 1, 3, 4 and 5 are deterministic Python — the only AI is stage 2. And that vision stage runs two ways: a real Claude API path, and a manifest/import mode where Claude Code does the analysis in-session on a Max subscription instead of paying per API call. The whole app self-demos: python run_web.py against the committed database renders this exact feed with no API key.
Not a mockup — the running app.
Live captures of QUARRY served from run_web.py against the committed March 2026 database — the same finds the walkthrough steps through. No API key, no staging.
Estate-sale photos are third-party listing images — fine for a portfolio demo; worth blurring or self-shooting if this goes fully public.
Estate sales are a data problem wearing a folding table.
The good stuff is buried in blurry listing photos across a dozen sites, priced by people who don't know what they have — and the only way to find out if a sale is worth an hour's drive is to go. I wanted the triage done before I got in the car: what's here, what's it worth, and is the profit worth the miles.
The constraint I set myself: build the whole thing in a day, and never cross a platform's line. No scraping behind logins, robots.txt respected on every request, and no auto-posting anything anywhere. The interesting engineering is everything that falls out of those two rules.
Five stages, one AI call, everything else deterministic.
estatesales.org, .net, .com, EBTH, AuctionNinja) all run through one robots-aware client — it caches each domain's robots.txt, hard-fails on disallow, honors crawl-delay, and adds jitter + backoff. No scraper is allowed a raw request. Results land in a 9-table SQLite store, idempotent on (source, sale_id).worth_the_drive only if it clears all three gates: score ≥ 55, under 60 miles, profit over $20. Survivors land in a dark Flask deal-feed with photo overlays, and checked sales export straight to a multi-stop Google Maps route.Real output, not a mockup.
One end-to-end run on March 24–25, 2026 — and the database + photos are committed, so the feed still renders offline today.
Top of the ranked feed from that run: an Antique Railroad Signal Lantern (grade A, 83.5 — comps $75/$200/$500, +$135 mid profit) and a Rookwood Portrait Vase (grade A, 82.8 — comps up to $2,000). Both cleared the gate. A Waltham gold-filled pocket watch scored a respectable B at 74.2 but got a red ✗ — a genuinely good item, 164 miles away. That rejection is the product working.
The parts worth stealing — and what I left unfinished.
Two ideas here travel well beyond estate sales. The robots-aware polite client is a drop-in for any scraping project. And the dual-mode AI stage — same prompt served by the API or by an agent working an in-session manifest — is a real cost-avoidance pattern for anyone building on a subscription instead of metered API access.
⚠ Honest status — what's not built
- The draft-listing generator (FB/Craigslist/eBay) is scaffolded but empty — I stopped at “know what to grab,” before “write the resale post.”
- No scheduler yet — it's run-on-demand, not the nightly cron the blueprint imagines.
- Two of the five scrapers are less battle-tested than the two that carried the run.
I'm presenting this as a demonstrated capability, not a finished product — which is exactly what it is. The v2 blueprint (written months later) fixes the gaps above; this v1 proved the pipeline end to end in a single day.
Project Elements
Have a Project in Mind?
Animation direction, VFX and creative technology. Message me on LinkedIn or get in touch.