SnapList AI — Project Story


Inspiration

Every week, tens of millions of people sell on eBay, Poshmark, Vinted, and Facebook Marketplace — thrift flippers, estate sale hunters, and casual resellers clearing out their closets. Talking to resellers, we kept hearing the same frustration: sourcing is fun, but listing is a grind. Writing a single product title, description, condition note, and price for one item takes 5–15 minutes. At 50 items a month, that's an entire workday lost to copy-pasting and guessing prices.

We were inspired by a simple question: what if you never had to write a listing again? Just snap a photo, and let AI handle the rest — not just the words, but the price, the condition, and even which platform gives you the best chance of selling fast.


What it does

SnapList AI is a multimodal listing generator built for resellers. A user uploads a photo of any item and within seconds receives:

  • A SEO-optimized listing title tailored for the right marketplace
  • A full product description written in the tone of the target platform (casual for Poshmark, keyword-rich for eBay, narrative for Etsy)
  • An AI condition assessment — New, Like New, Good, or Fair — with visible flaws called out automatically
  • A live competitive price range (High / Average / Low) pulled from real sold listings via Google Shopping
  • A platform recommendation — eBay, Poshmark, Vinted, Etsy, or Facebook Marketplace — based on item category and current demand

Users can generate listings individually or in batch, copy them with one click, and track their listing history. Access is gated by a freemium subscription model with Hustler, Flipper, and Pro tiers.


How we built it

We built SnapList AI as a full-stack Next.js application with the following core stack:

  • Next.js + TypeScript for the frontend and API routes
  • Convex as our real-time backend — handling user data, listing history, and subscription state
  • Clerk for authentication, with post-sign-in redirect to the /analyze flow
  • OpenRouter to access multimodal vision models — the photo is sent directly to the LLM which identifies the product and generates the full listing in a single prompt
  • SerpApi (Google Shopping) to fetch live sold pricing data and power our High / Average / Low price range feature
  • DodoPayments for hosted subscription checkout across three plan tiers, with webhook sync back to Convex
  • Tailwind CSS for a mobile-first, responsive UI optimized for resellers working on their phones

The core listing pipeline flows from image upload → base64 encoding → OpenRouter vision API call → structured JSON response parsing → UI render, all within a single /api/analyze route.


Challenges we ran into

Multimodal accuracy on obscure items was our biggest technical challenge. Generic or heavily worn products — a no-brand ceramic mug, a damaged jacket with no visible tags — would sometimes confuse the vision model or produce vague titles. We solved this by engineering a detailed system prompt that instructs the model to infer category, likely brand tier, and condition from visual cues alone, even when labels aren't readable.

Real-time pricing relevance was tricky. Google Shopping results include both new and used listings, which would skew price suggestions high for secondhand items. We added a filtering layer that strips new/retail results and weights toward "used," "pre-owned," and "sold" signals to give resellers a realistic, achievable price range.

Subscription state sync between DodoPayments webhooks and Convex required careful handling of out-of-order webhook delivery and idempotency — ensuring a user's plan tier was always accurate even during payment edge cases.


Accomplishments that we're proud of

  • Built an end-to-end multimodal pipeline — photo in, publish-ready listing out — in a single API call with no intermediate classification step
  • The platform tone adaptor genuinely rewrites the same listing for each marketplace's audience, which resellers in our beta said felt "shockingly on-brand" for each platform
  • Achieved sub-10-second listing generation for most items, which was our core product promise from day one
  • Shipped a clean, mobile-first UI that works as well on a phone in a thrift store aisle as it does on a desktop at home
  • Integrated live pricing comps that surface real-world sold data rather than asking resellers to guess — this feature alone consistently got the strongest reaction in user testing

What we learned

We learned that prompt engineering is product engineering. The quality of the listing output is almost entirely determined by how well the system prompt is constructed — the model's raw capability matters far less than how precisely you instruct it to structure the output, handle uncertainty, and adapt tone per platform. We iterated on the core prompt over a dozen versions before it felt production-ready.

We also learned that resellers care more about pricing confidence than listing speed. We originally assumed the time savings of auto-generated copy would be the headline value. But in every conversation with users, "is this price actually right?" was the first question they asked. The live comp feature went from a nice-to-have to the core trust signal of the product.

Finally, building with Convex taught us how much complexity a reactive backend abstracts away — real-time listing history, subscription state, and user sessions all "just worked" without us managing WebSocket infrastructure manually.


What's next for SnapList AI

  • Direct platform publishing — one-tap push to eBay, Poshmark, and Etsy via their APIs, eliminating the copy-paste step entirely
  • Sourcing intelligence — reverse the flow: scan a price tag in-store and get an instant "buy / pass" recommendation based on current resale market prices before you commit to the purchase
  • Listing Report Card — a free tool that grades any existing eBay or Poshmark listing and shows resellers exactly what they're leaving on the table with weak titles or mispriced items
  • Draft Vault with category templates — save and reuse listing structures for recurring item types (vintage denim, Nike sneakers, kitchen appliances) so repeat categories never start from scratch
  • Team & store mode — multi-seat access for resellers running small teams or consignment operations, with shared listing history and role-based access

Built With

Share this project:

Updates