← Creative Lab
Personal Venture — 2026

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.

1
Day, Idea to Ship
47
Sales Scraped
98
Items Catalogued
The hard part

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.

Client
Personal Venture
Role
Creator / Developer Scraping Ethics / AI Vision / Scoring Systems
Timeline
March 2026
Try the scorer98 real items — the scoring runs in your browser

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.

0 shown 0 worth the drive grades — median comp — best —

Snapshot of the archive. Prices are eBay sold comps recorded at scrape time, not live listings.

Watch a real find travel the pipeline

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.

◆ live walkthrough · real run data
1
Collect
5 sites · robots-aware
robots.txt ✓ allowed
sourceestatesales.org
saleRailroad Antiques
polite delay · 2s + jitter
2
See
Claude vision
detected item
claude-sonnet-4
detectedSignal Lantern
era1900s–40s
confidence0.90
3
Price
comps · 14 categories
category → Industrial/Railroad
comp low$75
median$200
comp high$500
est. buy$50–80
4
Score
profit-per-mile
profit (mid)+$135
distancelocal
score83.5
profit 60% · distance 25% · confidence 15%
5
Decide
deal feed + route
A
✓ worth the drive
score ≥ 55 · < 60 mi · profit > $20
→ added to Saturday route
idlePress Play to send this find down the pipeline — or click any stage to jump to it.

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.

The app, in use

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.

localhost:5000/screen capture
A real 25-second session — deal feed → ranked opportunities → sale detail. Recorded headless, unedited.
localhost:5000/opportunitieslive
ranked opportunities
Ranked by flip potential — the walkthrough's exact scores; the Waltham watch sits at B, 164 mi.
localhost:5000/sale/1live
sale detail photo grid
Sale detail — every scraped photo, click-to-select, hover for the item Claude catalogued.

Estate-sale photos are third-party listing images — fine for a portfolio demo; worth blurring or self-shooting if this goes fully public.

The problem

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.

How it works

Five stages, one AI call, everything else deterministic.

1 · Collect
Five site scrapers (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).
2 · See
Claude reads the photos. Each sale's images go to a vision call that returns a strict-JSON catalog — name, style, era, material, size & weight class, brand, and a 0–1 confidence per item. Dual-mode: real API, or an in-session manifest so it runs on a subscription. Anything under 0.6 confidence gets flagged for a human glance.
3 · Price
Each item is bucketed into one of 14 categories (fine jewelry, sports cards, silver, railroadiana…), which picks a tailored eBay-sold comps query. That returns a low / median / high — and an estimated buy-price band based on how estate sales actually price things.
4 · Score
Fully deterministic: geodesic distance from home, estimated profit (low/mid/high), then a weighted score — profit 60%, distance 25%, confidence 15% — mapped to an A–D grade. This is the part that turns a pile of listings into a ranked plan.
5 · Decide
A find is 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.
What actually ran

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.

47
sales scraped & stored
98
items Claude catalogued
320
photos downloaded
1
day, idea → shipping

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.

What I'd tell another builder

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.

Python 3.11Anthropic · claude-sonnet-4FlaskSQLAlchemy · SQLiteBeautifulSoupProtego robotsGeopyPandas
Scope

Project Elements

Ethical ScrapingAI Vision CatalogingComps ValuationDeterministic ScoringDeal-Feed UITrip RoutingRapid Prototyping
Next Project
DETOUR →

Have a Project in Mind?

Animation direction, VFX and creative technology. Message me on LinkedIn or get in touch.