04 / Case study
Vinted Monitor
A local tool for finding promising second-hand listings quickly.
I built a real-time Vinted research tool that watches saved searches, values new listings and sends the strongest candidates to a clear local dashboard.
View repository- Year
- 2026
- Role
- Product design · TypeScript and Python engineering
- Built with
- TypeScript · Node.js · Python

The problem
What needed to work better.
Good second-hand listings can disappear quickly, but checking the same searches by hand creates noise. A low price is not enough on its own: the model, condition, likely resale value, fees and demand all affect whether an item is worth reviewing.
What I built
The monitor watches chosen searches, ignores the first scan, scores only new listings and presents the useful evidence in one place. It supports local, Telegram, Hermes and Windows notifications without automating purchases.
Main areas
What I worked on.
- 01Multiple saved-search monitors
- 02Seeded scans and deduplication
- 03Photo-based product and condition checks
- 04Resale comparison routing
- 05Profit, ROI and confidence gates
- 06Local live dashboard and alerts
My role
Designing the product and the scoring system end to end.
I built the TypeScript monitoring application, the Python fetcher service, the scoring pipeline, local dashboard, notification routes, Docker setup and test suite.
I also researched how to compare listings fairly. The system separates an interesting discount from a properly checked candidate, so the dashboard can explain why an item was surfaced or rejected.
Key decisions
Making the result useful, not simply fast.
The first scan is seeded and produces no alerts. Later scans deduplicate listing IDs, build an internal price index and only spend more work on items that pass basic eligibility and value checks.
Resale estimates can come from matched eBay sold listings, optional provider APIs, the monitor’s own observed cohort or a lower-confidence Gemini estimate. The first reliable result is used, and wide or irrelevant comparison sets are rejected.
Margin calculations include buyer cost, inbound postage, selling fees and outbound postage. A candidate must then clear profit, ROI, resale, confidence and condition thresholds.
Product intelligence
Combining images, demand and real costs.
When enabled, Gemini analyses listing photos to suggest the model, colourway, condition and authenticity risk. Ambiguous items can go through a second confirmation pass, with daily limits and caching to control usage.
A local cohort records when listings appear and later disappear. Rechecks distinguish sold items from removals, building sell-through and time-to-sale signals that feed the sellability score.
What I learned
A useful alert needs evidence behind it.
This project taught me to separate collection, enrichment, valuation and decision rules so each part can fail without hiding the rest of the result. The code uses bounded caches, provider fallbacks and isolated notification failures.
I added 101 automated tests across price buckets, margin maths, comparison matching, eligibility, scoring hardening, cohort metrics, vision requests and notifications. I also prepared a clean public release without credentials, personal searches or runtime data.
Tools used