No.002 · Channel22 · design + build · 2026
SNIFFIT
Point a phone at a piece of furniture in a thrift store and learn what it is worth before you carry it home. It helped us earn over $4K in flipping profit in six months.
- PROBLEM
- In a thrift store you have seconds to decide whether a piece is worth carrying home, and no way to tell what it is or what it would sell for.
- ROLE
- Design and build: on-device Core ML and Vision, a streamed Claude valuation, real marketplace comparables, and a harness that scores the pricing against what pieces later sold for.
- RESULT
- Over $4K in flipping profit in six months for the side hustle my wife and I run on it. Every price weighs Claude's visual estimate against comparables from 50,000+ product listings across five marketplaces, so it rests on market evidence, not just the model's judgment.
- Studio
- Channel22
- Role
- Design + build
- Year
- 2026
- Stack
- Core ML · Vision · Claude Sonnet 4 · Gemini · Turso
- Status
- Live
OPEN SNIFFIT.XYZDOWNLOAD ON THE APP STORE
THE PROBLEM
In a thrift store you have seconds to decide whether a piece of furniture is worth carrying home, and no way to tell what it is or what it would sell for.
IN USE
From the first scan to a whole lot at once.
Think Vivino, but for furniture. Scan a piece and in a few seconds you get what it is, what it's worth and the likely profit. After that, the app helps with the rest: planning the restoration, tracking expenses, writing the listing and recording the sale.
HOW IT'S BUILT
Speed matters most, so the screen never sits empty. On-device Core ML and Vision text recognition run together and give a first guess in about a second. Two slower jobs then run in parallel: Claude Sonnet for identification and valuation, and a Turso edge-SQLite query for real marketplace comparables.
HIDING THE WAIT
The Claude response is streamed, and the fields that matter (what the piece is and what it's worth) come first, before the restoration tasks and inspection questions that make up most of the response. As soon as they arrive, the screen updates and the comparables query starts, so the database lookup happens while the model is still writing instead of after it. If streaming fails, the same steps run one after another.
BACKING THE PRICE WITH LISTINGS
Sniffit weighs Claude's estimate against comparables from more than 50,000 product listings across five marketplaces, and the database keeps growing. A price the model guessed and a price backed by five close matches shouldn't look the same, so they don't. Comparables are scored for relevance, and the range is worked out one of three ways: from market data with five or more strong matches, blended with the model's estimate with two to four, and from the estimate alone below that. The screen says which one it used. Relevance ignores how close a listing's price is to the model's guess, because listings picked for agreeing with the estimate can't be evidence for it.
WEIGHTING THE LISTINGS
Each comparable is weighted by its relevance squared, how recent it is, which marketplace it came from and how reliable that source is. The range comes from weighted percentiles rather than an average, so one badly priced listing can't skew it. Visual similarity adjusts the weights again, using on-device Vision feature prints (the same technology behind similar photos in Photos), which is free and needs no API key. Condition is graded from the photos and only lowers the bottom of the range, applied after the blend so listings in perfect condition can't cancel it out.
TESTING THE PRICES
The app has a built-in test harness that re-runs the comparables pipeline on every scan on the device and scores three things: how often there was enough market data to price at all; precision and recall of the strong-match cutoff against comparables I labelled by hand; and whether the final range contained what the piece actually sold for, with the median error when it didn't. Any run can be saved as a baseline, so every change to the scoring or the scraper gets a before-and-after.
THE RESULT
My wife and I run a flipping side hustle on Sniffit, and in its first six months it helped us make over $4K in profit: pieces we would have walked past, or priced by guesswork, bought and listed using its numbers.
MARKETING
The marketing site, sniffit.xyz, on a phone.
The name doesn't explain the app, so the subtitle has to, and the screenshots show the loop (scan, value, profit) before anyone reads a word. Two kinds of people find it: resellers looking for a valuation tool, and casual thrifters who didn't know one existed. They get separate product pages instead of one page trying to speak to both.
SEARCH ADS
The searches worth paying for are the specific ones (what is this worth, what is this chair, is this real) rather than broad terms like furniture app. So Search Ads targets those, along with the names of competing apps, where someone already wants this kind of tool and is just choosing which one.
WHAT I LEARNED
A model's number needs its evidence next to it. Every price says whether it comes from market listings or the model's estimate, and comparables are never picked for agreeing with the model.