Inspiration
Selling second-hand items online takes far longer than it should. Between photographing items, researching comparable prices, writing search-optimised titles, picking the right tags, and reformatting everything for each platform — a single listing can take 15–20 minutes. For someone clearing out a wardrobe of 20 items, that's hours of tedious work before a single thing sells.
I wanted to remove that barrier entirely. The resale market in the UK alone is worth over £5 billion and growing — but the friction of listing is what stops most people from participating. Sell Smart was built to make listing as fast as taking a photo.
What it does
Sell Smart turns product photos into complete, platform-ready resale listings in seconds using Google Gemini's multimodal AI.
You upload up to 12 photos of items you want to sell — mixed products, multiple angles, no problem. Gemini analyses all the images together in a single batch call, automatically groups photos that belong to the same item, identifies the brand, model, condition, colour, size, and category, then generates a full listing tailored to your chosen platform: Vinted, eBay, Depop, or Facebook Marketplace.
Each listing includes:
- A searchable, platform-optimised title
- A 4–6 sentence description written in the right tone for each platform
- A suggested resale price with a confidence rating (High / Medium / Low)
- A "Why this price?" explanation based on visible brand signals and condition
- 8–12 platform-specific tags
- RRP comparison where estimable
Everything runs in the browser. No account needed, no data stored, no originals leave your device. One click copies any field or downloads all listings as a text file.
How we built it
The entire frontend is a single HTML/CSS/JS file hosted on GitHub Pages — no framework, no build step, deliberately lightweight so it works on any device instantly.
The AI pipeline runs through a Vercel serverless proxy that keeps the Gemini API key server-side:
Batch image analysis — All uploaded photos are compressed client-side (canvas API, ~280KB for analysis pass) and sent to Gemini 2.5 Flash in a single multimodal call. The prompt asks Gemini to group matching angles, identify product metadata, and estimate pricing confidence — returning structured JSON.
Per-listing generation — Each grouped item's metadata is passed to a second Gemini call with a platform-specific prompt. Vinted gets casual and size-first copy; eBay gets keyword-rich SEO titles; Depop gets aesthetic and era references; Facebook gets plain and direct.
Client-side rendering — Results animate in as cards with price confidence chips, "Why this price?" explainers, copy buttons, and download options. Platform switching re-renders all cards with updated tone and accent colours.
The use of Gemini's multimodal capabilities — simultaneously processing multiple images, reasoning about which belong together, and extracting structured product intelligence — is what makes the whole experience feel instant and intelligent rather than mechanical.
Challenges we ran into
Batch grouping accuracy — Getting Gemini to reliably group multiple angles of the same item without over-grouping unrelated products took significant prompt engineering. The key was being explicit that every photo must appear in exactly one group and providing a strict JSON schema.
Image compression without quality loss — Sending full-resolution photos to the API was too slow and expensive. I built a two-pass compression system: a small 280KB version for the analysis call and a larger 900KB version for listing generation, both using canvas with adaptive quality reduction.
API key security — A client-side app can't safely hold an API key. I built a Vercel serverless proxy so the key never appears in the frontend code.
Platform tone consistency — Writing listing copy that genuinely feels native to Vinted vs eBay vs Depop required careful prompt design. Each platform has a distinct voice; generic copy that works for one reads poorly on another.
JSON parsing robustness — Gemini occasionally wraps JSON in markdown code fences. I added a strip-and-parse layer and fallback defaults so the app never breaks on a malformed response.
AI cost optimisation — Processing many images with multimodal AI can quickly increase token usage and cost. Image compression, batching all photos into a single analysis call, and prompt optimisation were used to keep API costs minimal.
Processing UX transparency — AI analysis takes several seconds, which can feel slow or broken. Staged loading messages were added to communicate progress across each phase: image detection, grouping, and listing generation.
Visually similar item separation — Similar-looking products (e.g. items of identical colour or shape) could be incorrectly grouped. Product signature logic was refined to prioritise product type and distinct visual attributes over surface-level similarity.
Currency conversion consistency — Switching currencies mid-session required separating the base pricing logic from the display layer, so suggested prices remained realistic rather than being converted twice or losing their original context.
User trust in AI pricing — Pricing suggestions needed to feel credible, not arbitrary. Confidence indicators (High / Medium / Low) and a "Why this price?" explanation were added to each listing so users understand how the estimate was reached.
Accomplishments that we're proud of
- A single Gemini multimodal call that analyses up to 12 images simultaneously, groups them intelligently, and extracts structured product metadata — all in one round trip
- A fully working, deployed product built in a single hackathon day, with zero dependencies and no backend beyond a lightweight serverless proxy
- Price confidence scoring with transparent reasoning — not just a number, but an explanation users can actually trust
- Platform-aware listing generation that genuinely adapts tone, tag style, and formatting to each resale marketplace
- An entirely client-side image pipeline that keeps user photos private — nothing is uploaded to any storage, originals never leave the device
What we learned
Working with Gemini's multimodal API at this scale taught us a lot about prompt engineering for structured outputs — particularly how much the JSON schema definition in the prompt affects reliability. Being explicit about every field, every allowed value, and every edge case (like "every photo must appear in exactly one group") dramatically improved consistency.
I also learned that the hardest part of an AI-powered product isn't the AI call — it's the surrounding resilience: handling compressed images gracefully, retrying on 429s, falling back cleanly when the model returns unexpected output, and making the whole thing feel fast despite network latency.
Building without a framework forced discipline. Every byte matters in a single-file app, and the constraint made us think carefully about what was actually necessary.
What's next for Sell Smart
- Live camera analysis — Use Gemini's Live API for real-time video analysis: point your phone at an item and get a listing drafted as you move around it, before you've even taken a photo
- Real market pricing — Integrate the eBay Browse API to fetch actual recently-sold prices for the identified item, replacing AI price estimation with real sold-listing data
- Direct platform publishing — One-click listing submission directly to Vinted, eBay, Depop, and Facebook Marketplace via their APIs, eliminating the copy-paste step entirely
- Mobile app — A native iOS and Android version optimised for fast photo capture, with the full listing pipeline accessible from your camera roll
- Listing quality scoring — AI-powered scoring that rates your listing and suggests improvements to title, description, tags, and price before you publish
- Improved product recognition — More granular brand detection, logo recognition, and model identification for higher pricing accuracy and better search tags
- Conversational onboarding — Evolve the help and feedback section into a conversational interface that guides new users through their first listing and answers questions in context
- Bulk CSV export — Export all generated listings as a formatted CSV for direct import into eBay and other platforms that support bulk upload
- Live exchange rates — Replace static FX conversion with a live foreign exchange API so currency switching reflects real-time rates
- Privacy controls — Automatic image deletion after listing generation, clearer messaging about client-side compression, and optional end-to-end encryption for sensitive items

Log in or sign up for Devpost to join the conversation.