DEV Community

Air Drop
Air Drop

Posted on

ListingMic Offline: A 30-Second Voice Pitch Becomes a Marketplace Listing, With No Cloud Bill

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

What I Built

The makers I know don't have a product problem. They have a listing problem.

A friend who sells handmade bags can talk about a tote for ten minutes straight — the leather, the lining, why the pocket is exactly phone-sized. Then she opens the marketplace app, stares at the empty title field, and the listing takes another hour. Multiply that by a shelf of products and the "quick evening of listing" quietly becomes the job itself.

So I built the tool she actually asked for, once I'd stopped suggesting things she didn't want.

ListingMic Offline takes a short voice pitch — thirty seconds of you talking about the thing you're selling, recorded on your phone — and turns it into a listing draft on your own laptop:

  • It transcribes the pitch locally with the open-weight Whisper model, through faster-whisper. Nothing is uploaded, ever. It forces offline mode in code.
  • It pulls out the facts buyers actually search for: the price you mentioned, the condition, a category guess, colours, materials, feature sentences, and what you said about shipping.
  • It writes it up as a Markdown draft: a suggested title in your own words, a facts box, feature bullets lifted from your pitch, and a short checklist to run through before the listing goes live.

No account, no subscription, no per-listing fee. You talk, it types, you check it and paste it.

Who would pay for this? Honestly — the same person who currently pays with an hour per listing, or pays a cloud AI subscription and pastes her supplier prices into somebody else's server to save that hour. A one-off tool she owns, that runs in a workshop with patchy signal, is worth money to her in a way another SaaS dashboard just isn't. I haven't landed that first paying user yet, and I won't pretend otherwise in a submission post. What I can say is that the demo below is a real run, and the draft it produced is one I'd have been happy to start from.

Demo

A spoken pitch went in — a handmade leather tote bag, described the way a seller actually describes it, price and shipping and all:

The tool transcribed it locally, word for word, including the price as "$85", and produced this draft (unedited):

Suggested title
Handmade leather tote bag made by me and my small workshop

Facts a buyer searches for

  • Price mentioned: price is $85
  • Condition: brand new
  • Category guess: Bags & accessories
  • Colours: brown, dark brown
  • Materials: leather, full grain leather, cotton

Feature bullets

  • It is dark brown, full grain leather with a cotton lining and one inside pocket for a phone.
  • It fits a 13 inch laptop.

Shipping, as described

  • The price is $85 and I can ship anywhere in the country in two to three days.

That full output is committed in this project as demo-output.md, next to the sample pitch audio, so anyone can reproduce the run. The sample voice is synthetic, generated with a TTS voice, so the demo doesn't depend on my personal recordings — a real phone memo goes through exactly the same pipeline.

One detail I like: the title is a bit clumsy, because Whisper heard "made by me and my small workshop" and the tool refused to tidy it into something the seller never said. That refusal is a feature, and I'll come back to it.

Code

The whole thing is one Python file, plus ffmpeg. The demo output above sits in the project as demo-output.md, alongside the sample audio, so the run is reproducible end to end.

How I Built It

Three steps, all local, deliberately boring:

  1. Decode. ffmpeg turns whatever the phone produced into 16 kHz mono WAV, which is what Whisper expects.
  2. Transcribe. faster-whisper runs Whisper's open weights on CPU (int8, CTranslate2) from a local model folder. As in my Week 1 build, I feed the model the audio as a NumPy array of samples rather than a file path — it sidesteps a class of container-decoding errors that real phone files love to trigger.
  3. Extract. The transcript is split into sentences and matched against small, explicit patterns and lists: a handful of price patterns, condition words, category keywords, colours, materials, feature hints, shipping phrases. No LLM at this step, on purpose.

That last choice is the one people push back on, so let me defend it. A generative model writing your listing can invent a claim — a size you never said, a material you never used — and a seller who pastes it inherits the angry buyer and the return. ListingMic is not allowed to invent a price, or anything else. It files what you said, shows you the exact phrase it heard for the price, and puts "confirm the price you meant to say out loud" at the top of the checklist. For a tool someone might build a small business on, predictable beats clever.

It runs on an ordinary laptop CPU. The pitch in the demo took well under a minute, start to finish, with no network involved at any point.

Why Does Open Innovation Matter?

Three reasons, and they're all commercial, which feels right for a Side Hustle week.

The margins test. A cloud transcription or copywriting API charges per minute or per listing. For one listing, that's nothing. For a seller listing forty items a week on thin margins, it's a tax on every single sale, forever. An open-weight model running locally costs nothing per listing. That difference isn't a discount — it's whether the side hustle's numbers work at all.

The privacy test, commercial edition. A pitch isn't small talk. It contains your price, your stock ("I only made ten of these"), where you ship from, sometimes what you paid for materials. Sent to a cloud service, that's business intelligence leaving the building. With a local open model, there's no server in the story at all. My friend doesn't have to trust a privacy policy; she has to trust that her laptop is hers, which she already does.

The swap test. Because Whisper's weights are open (MIT License), the tool isn't rented from anyone's roadmap. small is today's sweet spot on a laptop CPU. If a better model, or a fine-tune for her language, turns up next year, it drops into the same slot. A side hustle built on an open model can't be re-priced out from under her — and I've watched enough API price changes to know that's not a theoretical risk.

Honest Limitations

I'd rather show the seams than hide them:

  • The extractor is heuristics, not understanding. Short keyword lists, a few regexes. It will miss a category it doesn't know and it can mis-hear a price said too fast. The facts box shows the phrase it heard precisely so a human can catch that in seconds.
  • The suggested title is your first product sentence, lightly cleaned. Searchable and honest, but nobody's copywriting award is in danger.
  • One pitch in, one draft out. No photos, no posting to any marketplace. That boundary is deliberate: what goes live under a seller's name should be a decision the seller makes, not a script.

What's Next

Price normalisation with a proper confirm step (spoken prices are the riskiest field in the draft, and they deserve the most care), output shapes matched to specific marketplaces — title limits and bullet counts differ — and keyword packs sellers can edit in a plain text file for their own market and language. Then the real test for a Side Hustle submission: putting it in front of that friend with the bags, watching her list a shelf of products with it, and finding out what she'd actually pay. I'll update this post with what she says, good or bad.

Talking is easy for sellers. Typing the listing is the tax. With an open model on their own machine, that tax can just... stop being charged.

Prize Categories

Category: Overall. Built with open-source/open-weight AI: Whisper (MIT) via faster-whisper (MIT), ffmpeg. No partner technology used.

Top comments (0)