A few months ago I was trying to sell a second-hand PlayStation. I spent 45 minutes searching eBay, scrolling Facebook Marketplace, trying to figure out if €280 was a fair price or if I was leaving €80 on the table.
That's a solved problem. It shouldn't take 45 minutes.
So I built ValueScan — an AI-powered item valuation tool. You describe an item or upload a photo, and it gives you the retail price, resale range, a recommended listing price, and exactly where to sell it. In about 10 seconds.
Here's what I built it with, what I learned, and where it stands today.
The tech stack
Frontend: React 19 + Vite. Nothing exotic — just a chat interface with a valuation card renderer. The whole UI is one App.jsx file which I probably should have split up but here we are.
AI: Google Gemini 2.5 Flash via a Vercel serverless function. I chose Gemini over GPT-4 for two reasons: vision support for photo uploads is solid, and the cost per token is significantly lower for a use case that generates long structured responses.
The prompt is doing a lot of the work. The AI returns a strict structured format — ITEM:, RETAIL:, RESELL:, SELL:, PLATFORM:, FLIP:, CONFIDENCE: — which I then parse with regex and render into a proper card UI. No JSON, no function calling, just reliable structured text output with a tight system prompt.
Auth + database: Supabase. Email/password auth with hCaptcha, Google OAuth, and a subscriptions table that tracks Pro status. Valuation history is stored per user for Pro subscribers.
Payments: Stripe. €5/month subscription with a webhook that updates Supabase on payment events. The whole checkout flow is one serverless function.
Deployment: Vercel. The API routes live in /api/ and deploy as Edge Functions automatically. Zero config.
PWA + Android: The app is a PWA with a manifest, service worker, and a TWA wrapper for Google Play. So it runs in the browser, installs on desktop, and is listed on Android — same codebase.
The interesting engineering bits
Location-aware pricing. When a user first opens the app, I use the Geolocation API to reverse-geocode their coordinates via Nominatim (OpenStreetMap's free geocoder). That city + country string gets injected into every Gemini prompt. So a user in Cyprus gets Bazaraki.com and Facebook Marketplace CY suggestions, while a user in Germany gets AutoScout24 and eBay.de. Same model, completely different output.
The scanner. I used html5-qrcode for barcode scanning — point your camera at any barcode and it reads the product, then triggers a valuation automatically. For Pro users only (one free try on the free plan). The scan event gets logged to Supabase with detected item, confidence, and whether a valuation was triggered, which gives me useful data on what people are scanning.
Free limits in localStorage. The free plan is enforced client-side with localStorage counters — message count, image count, scanner uses. Yes, a technically savvy user could clear storage and reset. That's fine. The people who do that were never going to pay anyway, and it keeps the server completely stateless.
What I got wrong
The README is still the Vite boilerplate. I shipped everything else and forgot to write documentation. If anyone tries to run this locally they'll have no idea what environment variables to set. Do the README first.
I built the scanner before validating it. The camera-based scanner was the hardest feature to build and it's the one people use least in testing. I should have validated with text input first and added the scanner later.
No analytics at launch. I have no idea how people are using the app in closed testing because I didn't add any event tracking. I'm adding Google Analytics now but I've already missed two weeks of data.
Where it stands today
Six days into a 14-day closed testing period on Google Play. The app is live at valuescan.app, the Android version is in closed testing, and I'm working through the SEO and marketing foundation before the public launch.
The pricing is €5/month for Pro. The free tier is generous enough to try it properly — 10 messages, 2 image uploads, one free scanner scan.
The niche is real. People genuinely want to know what their stuff is worth before selling. The question "how much is my item worth?" gets searched millions of times a month and there's no clean, fast, AI-native answer for it yet.
What's next
Public launch on Google Play (8 days)
Product Hunt launch on the same day
Blog posts targeting specific search queries ("PS5 resale value", "how much is my iPhone worth")
Adding more local marketplace awareness — right now it knows about the big ones but I want to expand the local database
If you're building something in the resale / secondhand space, or you just want to check what something's worth, give it a try at valuescan.app. Free to start, no card required.
Follow the build:
X / Twitter: @valuescan_ai
Instagram: @valuescan
TikTok: @valuescan
Built by a solo founder in Cyprus. Questions welcome in the comments.
Top comments (0)