<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Richmond Andoh</title>
    <description>The latest articles on DEV Community by Richmond Andoh (@richmondandoh).</description>
    <link>https://dev.to/richmondandoh</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F948994%2F62e32fe4-8538-48e5-9464-51665c32d340.jpeg</url>
      <title>DEV Community: Richmond Andoh</title>
      <link>https://dev.to/richmondandoh</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/richmondandoh"/>
    <language>en</language>
    <item>
      <title>Snap a Shoe, Sell the Shoe: a Sales Kit Generator on Open-Weight AI</title>
      <dc:creator>Richmond Andoh</dc:creator>
      <pubDate>Wed, 14 Oct 2026 18:12:27 +0000</pubDate>
      <link>https://dev.to/richmondandoh/snap-a-shoe-sell-the-shoe-a-sales-kit-generator-on-open-weight-ai-448a</link>
      <guid>https://dev.to/richmondandoh/snap-a-shoe-sell-the-shoe-a-sales-kit-generator-on-open-weight-ai-448a</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-week2-2026-10-12"&gt;Hacktoberfest Open-Source AI Challenge Week 2: Side Hustle&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;MarketMate AI&lt;/strong&gt; 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. &lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;🌐 &lt;strong&gt;Live app:&lt;/strong&gt; &lt;a href="https://marketmate-ai-35yy.onrender.com" rel="noopener noreferrer"&gt;https://marketmate-ai-35yy.onrender.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Phone flow video:   &lt;/p&gt;
&lt;div&gt;
    &lt;iframe src="https://www.youtube.com/embed/vmThIgiVjNE" width="315" height="560"&gt;
    &lt;/iframe&gt;
  &lt;/div&gt;


&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/Richmond-Andoh" rel="noopener noreferrer"&gt;
        Richmond-Andoh
      &lt;/a&gt; / &lt;a href="https://github.com/Richmond-Andoh/marketmate-ai" rel="noopener noreferrer"&gt;
        marketmate-ai
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;MarketMate AI&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;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 &lt;strong&gt;Send via WhatsApp&lt;/strong&gt; share), three social media
captions, and a call to action. Or &lt;strong&gt;snap a product photo&lt;/strong&gt; and let the
vision model pre-fill the form for review — ideal for sellers at the
market stall.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;🌐 &lt;strong&gt;Live demo:&lt;/strong&gt; &lt;code&gt;https://marketmate-ai.onrender.com&lt;/code&gt;
&lt;em&gt;(Replace with your Render URL if it differs.)&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Powered by an open-weight model (&lt;code&gt;openai/gpt-oss-20b&lt;/code&gt;, 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.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Why open weights?&lt;/h2&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Cost that works for sellers:&lt;/strong&gt; 20B-class open models cost cents per
hundred generations — a margin a small seller tool can survive on.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No lock-in:&lt;/strong&gt; the model…&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/Richmond-Andoh/marketmate-ai" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;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.&lt;/p&gt;

&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;p&gt;Open-source AI is the load-bearing wall, not the paint:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;- Text generation&lt;/strong&gt; — 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.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;- Photo understanding&lt;/strong&gt; — 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.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;- Provider layer, not provider lock-in.&lt;/strong&gt; One AiConfig abstraction serves Backboard, any OpenAI-compatible endpoint (Groq, Together, OpenRouter, self-hosted vLLM), and local Ollama (&lt;a href="http://localhost:11434/v1" rel="noopener noreferrer"&gt;http://localhost:11434/v1&lt;/a&gt; — seller data never leaves the machine). The model is a single env var: AI_MODEL, AI_VISION_MODEL.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;- Deployed on Render&lt;/strong&gt; with Blueprint config (render.yaml), health-checked at /api/health.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Does Open Innovation Matter?
&lt;/h2&gt;

&lt;p&gt;Three concrete ways, all from this build:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;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.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;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.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;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.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  My First User
&lt;/h2&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prize Categories
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;- Overall&lt;/strong&gt; — Side Hustle theme.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;- Best Use of Render&lt;/strong&gt; — deployed via render.yaml Blueprint, health checks, free-tier cold-start handling with client retry.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;- Best Use of Backboard&lt;/strong&gt;— 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.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
      <category>ai</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
