DEV Community

Cover image for Snap a Shoe, Sell the Shoe: a Sales Kit Generator on Open-Weight AI
Richmond Andoh
Richmond Andoh

Posted on

Snap a Shoe, Sell the Shoe: a Sales Kit Generator on Open-Weight AI

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

MarketMate AI turns one product β€” typed or photographed β€” into a complete sales kit: a shop listing, a ready-to-send WhatsApp message with one-tap Send-via-WhatsApp sharing, three social captions with hashtags, and a call to action.

Who pays for this? The sellers I built it for: market-stall traders, WhatsApp broadcast vendors, and Instagram sellers across West Africa and anywhere phone-first commerce runs on chat. Their bottleneck isn't product β€” it's words. A seller with 40 items and no descriptions loses sales daily to blank listings and "DM for price" friction. MarketMate compresses a 30-minute writing chore into a 20-second phone flow: snap the item at the stall, review the auto-filled details, generate, share to WhatsApp. As a business that's a weekly micro-subscription or pay-per-kit tool priced below one sale's margin β€” the unit economics only work because the models behind it cost fractions of a cent per generation.

Demo

🌐 Live app: https://marketmate-ai-35yy.onrender.com

Phone flow video:

Code

MarketMate AI

AI-powered sales-content assistant for small businesses and online sellers Describe a product once β€” get a shop listing, a ready-to-send WhatsApp message (with one-tap Send via WhatsApp share), three social media captions, and a call to action. Or snap a product photo and let the vision model pre-fill the form for review β€” ideal for sellers at the market stall.

🌐 Live demo: https://marketmate-ai.onrender.com (Replace with your Render URL if it differs.)

Powered by an open-weight model (openai/gpt-oss-20b, Apache-2.0 weights) through a swappable provider layer: Backboard by default, or any OpenAI-compatible endpoint (Groq, Together, OpenRouter, self-hosted vLLM/Ollama for fully local inference). No secrets are shipped to the browser; all model calls happen in server-side route handlers.

Why open weights?

  • Cost that works for sellers: 20B-class open models cost cents per hundred generations β€” a margin a small seller tool can survive on.
  • No lock-in: the model…

Stack: Next.js App Router + TypeScript, Tailwind v4, Zod validation shared between client and server, Vitest (37 tests), deployed on Render. Every model call happens in server-side route handlers β€” no API keys ever reach the browser.

How I Built It

Open-source AI is the load-bearing wall, not the paint:

- Text generation β€” openai/gpt-oss-20b (Apache-2.0). Strong instruction-following at 20B scale, JSON mode for structured output, cheap enough per token that a seller-priced product survives its own margins. A strict system prompt enforces the app's core promise β€” use only the facts given, never invent prices or specs β€” and Zod validates every response before it reaches the user.

- Photo understanding β€” qwen/qwen3.8-27b (open-weight, vision-capable). The standout feature: snap a product photo and the app pre-fills name, category, and features for human review. Deliberately prefill, not auto-generate β€” vision models guess, and the review step is what keeps the honesty guarantee intact.

- Provider layer, not provider lock-in. One AiConfig abstraction serves Backboard, any OpenAI-compatible endpoint (Groq, Together, OpenRouter, self-hosted vLLM), and local Ollama (http://localhost:11434/v1 β€” seller data never leaves the machine). The model is a single env var: AI_MODEL, AI_VISION_MODEL.

- Deployed on Render with Blueprint config (render.yaml), health-checked at /api/health.

Why Does Open Innovation Matter?

Three concrete ways, all from this build:

  1. It survived its own bankruptcy. Mid-build my Backboard credits hit –$0.11. With a closed API that would have been a dead project and a card charge. With open weights behind a provider abstraction, I pointed the same code at Groq's free tier β€” four env lines, zero code changes β€” and kept building. Portability wasn't a slide; it was the rescue.

  2. It makes the business possible. Closed frontier APIs price per-token at 10–50x open-weight hosting. At seller-friendly prices, that margin difference is the whole company: open weights turn a tool for $30-margin traders from loss-maker into side hustle.

  3. It fits the user's reality. My sellers run on phones, volatile connections, and real photos β€” not studio copy decks. Swappable models, client-side photo compression, timeout-plus-retry UX, and an offline-capable local path exist because the open ecosystem lets a solo builder assemble them for free.

My First User

My first user was me. I took MarketMate outside its test fixtures and snapped my own Nike sneakers on my phone β€” the photo-prefill read the shoe and filled the form, I fixed two details, generated the kit, and had a postable WhatsApp broadcast plus three captioned variants in under a minute. No paying customer yet; the next step is putting the live link in front of one real sneaker reseller and reporting back what breaks.

Prize Categories

- Overall β€” Side Hustle theme.

- Best Use of Render β€” deployed via render.yaml Blueprint, health checks, free-tier cold-start handling with client retry.

- Best Use of Backboardβ€” the project started on Backboard (single-key access to open-weight models) and its provider abstraction was shaped by that API; generation and vision run through swappable open models on one interface.

Top comments (0)