DEV Community

Vaibhav Agrawal
Vaibhav Agrawal

Posted on

Listing Writer

Hacktoberfest Open-Source AI Challenge Week 2: Side Hustle Submission đź’¸

This is a submission for the Hacktoberfest Open-Source AI Challenge Week 2: Side Hustle

What I Built

Listing Writer is a local-first, AI-powered listing generator for Etsy and eBay sellers.

Imagine a vintage reseller or a handmade crafter with 20 items to photograph and list over the weekend. They don't have a copywriter. They use a generic cloud AI tool, but it forces them to upload photos of unreleased inventory to a server they don't control. Worse, generic AI often hallucinates details—confidently writing "approximately 8 inches wide" for an item it cannot actually measure.

Listing Writer solves this by running entirely on the seller's laptop. It uses an open-weight vision model to read the photo, generate a title, description, tags, and price range, and streams the result instantly.

But its most important feature is honesty: if the model cannot see the size, material, or quantity in the photo, it writes [seller to confirm] instead of guessing. The seller gets a perfect starting point without being fed AI hallucinations.

Demo

(Note: Because I am running Gemma 3 locally on my CPU, text generation takes about 90 seconds. The video is trimmed to show the setup, the offline proof, and the final result.)

https://www.youtube.com/watch?v=gXQ9E0Teu8s

Code

competitive-programmer04 (Vaibhav Agrawal) · GitHub

competitive-programmer04 has 27 repositories available. Follow their code on GitHub.

favicon github.com

How I Built It

The stack is incredibly lightweight: Python, Streamlit, and Ollama.

I used Gemma 3 (4B), an open-weight vision model, served locally via Ollama. The Streamlit frontend communicates with the local Ollama server via localhost:11434.

When the user clicks "Generate," the app reads the image bytes, packages them with a carefully engineered prompt (which includes the selected "voice"), and sends them to Ollama. The app uses ollama.chat(..., stream=True) so the text renders progressively on the screen rather than making the user stare at a blank loading screen.

Because I built this for real people, I also focused heavily on error handling. Here is what happens when the user doesn't have Ollama running, and what the one-time ~3.3GB model download looks like:

Ollama not running in the background

One Time model download

Why Does Open Innovation Matter?

For this specific use case, closed APIs are a dealbreaker.

  1. Privacy & Unreleased Inventory: Sellers often list handmade items or vintage finds they haven't publicly announced yet. Uploading those photos to a third-party API (like OpenAI or Anthropic) means that data is on a server they don't control. With local open weights, the photo never leaves the laptop.

  2. Zero Marginal Cost: A seller listing 200 items a month would be billed for 200 vision API calls. With an open model running locally, the cost of generating 1 or 1,000 listings is exactly $0. The only cost is the electricity to run the laptop.

  3. True Offline Capability: Sellers source inventory at flea markets, warehouses, and craft fairs—places with terrible WiFi. A closed API fails completely without internet. My tool works completely offline after the initial one-time model download.

  4. No Lock-in: If Gemma 3 isn't good enough for a specific niche, I can swap the model="gemma3:4b" string to llama3.2-vision in a single line of code. I am not locked into one provider's pricing changes or deprecations.

Top comments (0)