I Built a Thrift Store Arbitrage Calculator in One Night
By Jacobo · dev blog
Last Saturday I was at a Goodwill, holding a Patagonia fleece with a $15 price tag, and I did what I always do: opened three browser tabs, searched the item on Depop, checked eBay sold listings, looked up Vinted. Five minutes later I had a rough number — but by then someone else had grabbed it.
I needed something faster. So I built it.
The Problem
Thrift flipping is a real hustle. People make real money doing it. But the research loop is slow: search each platform, filter by sold (not listed — listed prices are fiction), mentally average the results, factor in fees, and then decide if the $15 ask is actually worth it.
Most people eyeball it and get it wrong. Either they overpay, or they leave good flips on the rack because they weren't sure.
What I wanted was a calculator. Type in the brand and item type, get a number. Done.
The Core Insight
You don't need real-time API data to get a useful estimate. What you need is a model.
Resale value follows a pretty predictable pattern:
- Brand tier is the biggest lever. A Patagonia fleece and a generic fleece are not the same thing. Luxury brands (Ralph Lauren, Supreme) multiply baseline value by 3–5x. Fast fashion is 1x at best.
- Category is the second lever. Sneakers command a premium. Denim holds value. Graphic tees are hit or miss.
- Platform shifts the number by ±15%. Depop buyers pay a hype tax. Vinted buyers are bargain hunters. eBay is in the middle but has broader reach.
So the formula becomes:
const estimatedResale = (
thriftPrice *
brandMultiplier[brand] *
categoryMultiplier[category] *
platformFactor[platform]
);That's it. No API key. No database. Just a lookup table and some multiplication.
Building It
I used Next.js 15 with the App Router, Tailwind v4, and shadcn/ui for components. TypeScript throughout.
The pricing engine lives in a single file — lib/pricing.ts. I built out a brand tier table with about 30 brands across four tiers (luxury, streetwear, athleisure, vintage/heritage), and a category multiplier table covering the main thrift categories.
The flip score is the part I'm most proud of. It's simple:
const flipScore = Math.min(
((bestResalePrice - thriftPrice) / thriftPrice) * 10,
10
);It normalizes the profit ratio into a 1–10 scale. A Von Dutch hat at $3 that flips for $55? That's a 10. A North Face jacket at $40 that resells for $55? That's a 3.75 — probably not worth the hassle.
What Surprised Me
The pre-loaded demo data made the biggest difference in how the app felt. I almost shipped without it, thinking "the user will just type something in." Wrong. An empty tool looks broken. Adding five pre-calculated flip cards — Levi's jacket, Nike sneakers, Ralph Lauren polo, Von Dutch hat, Patagonia fleece — made the page feel alive and immediately communicative. You understand what the tool does before you touch it.
The other surprise: the dark theme + profit-green color scheme was the right call. I tried a light version for about 10 minutes. It looked like a homework assignment. The dark version looks like a trading terminal. That matters — it tells the user this is a serious tool.
What I'd Do Next
- Real brand database with ~500 entries (right now it's ~30)
- Condition multiplier (excellent/good/fair — a faded Levi's is not the same as a pristine one)
- Mobile camera flow: point at the clothing tag, OCR reads the brand, auto-populates the form
- Recent flips tracker: "You've saved $340 in bad buys this week"
The OCR flow is the real vision here. You're standing in the aisle, you hold up your phone, and in 2 seconds you know whether to grab it or put it back. That's the product.
Try It
The calculator is live at thrift-flip.limed.tech.
Type in any brand you know — Nike, Levi's, Supreme, Carhartt, Patagonia, whatever's on the rack — pick the item type, enter what they're asking, and see if it's worth the flip.
If you use it at a thrift store, I want to hear about it.
— Jacobo