Inspiration
A photo can make an outfit feel effortless, but recreating it secondhand usually means opening too many tabs, guessing whether individual pieces work together, and discovering shipping has broken the budget at checkout.
ThriftTheLook started with one question: what if an outfit screenshot could become a secondhand basket you can actually buy—not a loose collection of similar items?
What it does
ThriftTheLook turns one outfit photo into complete, delivery-aware secondhand look options.
You choose a delivery country and postcode, set one all-in budget, and upload or paste an outfit image. The app identifies visible pieces, searches official eBay inventory, evaluates likely matches, and assembles complete options under the budget.
Every displayed listing shows its item price and shipping. You can switch between complete look options, inspect the reasoning behind each match, open other options for a specific piece, or click through to the original eBay listing.
How we built it
The frontend is a Next.js 15 and TypeScript outfit board with Tailwind, a scrapbook-inspired visual system, upload/clipboard support, and streamed progress states.
The backend is FastAPI. It uses the official eBay Browse API with client-credentials OAuth, retries, cached duplicate queries, marketplace and delivery-postcode context, image search, and a keyword fallback.
The vision pipeline uses strict structured outputs to decompose an outfit into purchasable garment slots, assess candidate matches, and write the receipt. The provider and model roles are configured through encrypted runtime environment variables, with a fallback path for provider failures.
A deterministic Python solver—not an LLM—chooses complete baskets using delivered prices. This keeps the budget logic auditable and lets the app return honest complete, partial, or over-budget states.
To keep live uploads reliable on serverless infrastructure, the browser accepts large source images and optimizes them before sending the search request. FastAPI streams each pipeline stage to the interface using Server-Sent Events.
Challenges we ran into
The difficult part was not finding one similar listing. It was finding several pieces that work together under one delivered-price budget.
Shipping is inconsistent across marketplace results, so the solver only promises an all-in total when shipping is known. We also had to make delivery country and postcode first-class inputs rather than an afterthought.
Visual similarity can be misleading: a candidate can resemble the reference photo while being the wrong garment type or dominant color. We added strict rejection rules and show alternatives instead of hiding the trade-offs.
Finally, long-running live searches are fragile in serverless environments. We addressed upload limits with client-side optimization and made the streaming layer explicit so users can see what the app is doing instead of staring at a spinner.
Accomplishments that we're proud of
- Turning one outfit photo into multiple complete, buyable secondhand options.
- Treating shipping as part of the budget from the beginning.
- Using official eBay APIs rather than scraping marketplaces.
- Showing progress, match reasons, delivery totals, alternatives, and partial states clearly.
- Keeping the final budget decision deterministic and explainable.
- Providing an offline demo mode that works without keys or network access.
What we learned
We learned that the most valuable product decision is often a constraint, not a recommendation. A pile of visually similar listings is not useful if the user cannot buy the whole look.
We also learned that location, shipping, and budget need to shape search from the start. A polished UI matters too: users need to understand when the search runs, why a piece was selected, and what changing an option will affect.
What's next for ThriftTheLook
Next, we want to validate matching quality with more licensed outfit photos, improve size and preference handling, and add feedback loops that make future searches more personal.
We also want to expand only through official marketplace or partner integrations where available, improve international delivery context, and let users save and compare their favorite complete looks over time.
Built With
- artificial-intelligence
- computer-vision
- ebay-api
- fashion-tech
- fastapi
- next.js
- openai-api
- pydantic
- python
- react
- server-sent-events
- sustainability
- tailwind-css
- typescript
- vercel
Log in or sign up for Devpost to join the conversation.