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:
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.
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.
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)