<?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: Haoua Tamaivou</title>
    <description>The latest articles on DEV Community by Haoua Tamaivou (@haoua_tamaivou_ffc766d53f).</description>
    <link>https://dev.to/haoua_tamaivou_ffc766d53f</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%2F3796247%2F88304b48-cfa6-40df-b720-e5e239d4ee0f.png</url>
      <title>DEV Community: Haoua Tamaivou</title>
      <link>https://dev.to/haoua_tamaivou_ffc766d53f</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/haoua_tamaivou_ffc766d53f"/>
    <language>en</language>
    <item>
      <title>I built an offline AI listing writer for small sellers in Cameroon</title>
      <dc:creator>Haoua Tamaivou</dc:creator>
      <pubDate>Wed, 14 Oct 2026 08:36:49 +0000</pubDate>
      <link>https://dev.to/haoua_tamaivou_ffc766d53f/i-built-an-offline-ai-listing-writer-for-small-sellers-in-cameroon-5go8</link>
      <guid>https://dev.to/haoua_tamaivou_ffc766d53f/i-built-an-offline-ai-listing-writer-for-small-sellers-in-cameroon-5go8</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;Offline Listing Writer&lt;/strong&gt;: a tool for small sellers in Cameroon who post products on WhatsApp, Facebook, and Instagram. The seller types a few hints (product, condition, price, details, contact), picks the language (French or English), the platform, and the tone, and an AI model running on their own computer writes the listing. A listing takes about 3 seconds on my laptop [ 8GB].&lt;/p&gt;

&lt;p&gt;Who would pay for it: sellers who post every day. Writing and describing every product is slow, is harder in a language you are not fluent in, and needs a good connection if you use an online AI tool. This tool works offline and has no subscription.&lt;/p&gt;

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

&lt;p&gt;It runs locally on the seller's computer, so there is no deployed link. Here it is working:&lt;/p&gt;

&lt;p&gt;[Screenshot: English listing]&lt;/p&gt;

&lt;p&gt;[Screenshot: French listing]&lt;/p&gt;

&lt;p&gt;Offline test, with the internet turned off and the network showing "Not connected":&lt;/p&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/Queeninherprime" rel="noopener noreferrer"&gt;
        Queeninherprime
      &lt;/a&gt; / &lt;a href="https://github.com/Queeninherprime/offline-listing-writer" rel="noopener noreferrer"&gt;
        offline-listing-writer
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Offline AI listing writer for small sellers, powered by Gemma and Ollama
    &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;Offline Listing Writer&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;Write product listings for WhatsApp, Facebook Marketplace and Instagram in French or English, using an open-weight AI model that runs entirely on your own computer. No internet, no subscription, and your prices and customer details never leave the machine
&lt;a rel="noopener noreferrer" href="https://github.com/Queeninherprime/offline-listing-writer/screenshots/english-listing.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2FQueeninherprime%2Foffline-listing-writer%2FHEAD%2Fscreenshots%2Fenglish-listing.png" alt="English listing"&gt;&lt;/a&gt;
&lt;a rel="noopener noreferrer" href="https://github.com/Queeninherprime/offline-listing-writer/screenshots/french-listing.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2FQueeninherprime%2Foffline-listing-writer%2FHEAD%2Fscreenshots%2Ffrench-listing.png" alt="French listing"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Built for the Hacktoberfest 2026 DEV Challenge (Week 2: Side Hustle).&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Requirements&lt;/h2&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://ollama.com" rel="nofollow noopener noreferrer"&gt;Ollama&lt;/a&gt; installed&lt;/li&gt;
&lt;li&gt;Python 3.8+ (no extra packages needed)&lt;/li&gt;
&lt;li&gt;A small open-weight model, for example Gemma 4B&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Setup (needs internet once)&lt;/h2&gt;

&lt;/div&gt;
&lt;div class="snippet-clipboard-content notranslate position-relative overflow-auto"&gt;&lt;pre class="notranslate"&gt;&lt;code&gt;ollama pull gemma3:4b
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Run&lt;/h2&gt;

&lt;/div&gt;
&lt;div class="snippet-clipboard-content notranslate position-relative overflow-auto"&gt;&lt;pre class="notranslate"&gt;&lt;code&gt;python app.py
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Open &lt;a href="http://localhost:8000" rel="nofollow noopener noreferrer"&gt;http://localhost:8000&lt;/a&gt; in your browser.&lt;/p&gt;
&lt;p&gt;To use a different model: &lt;code&gt;MODEL=gemma3:1b python app.py&lt;/code&gt; (on Windows PowerShell: &lt;code&gt;$env:MODEL="gemma3:1b"; python app.py&lt;/code&gt;).&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;How it works&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;&lt;code&gt;app.py&lt;/code&gt; is a tiny local server. It serves the page and sends your product details to Ollama at &lt;code&gt;localhost:11434&lt;/code&gt;, then returns the generated listing. Saved listings are kept in your browser on this computer.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Offline note&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;Writing and copying listings works with no connection. Posting to…&lt;/p&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/Queeninherprime/offline-listing-writer" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;&lt;a href="https://github.com/Queeninherprime/offline-listing-writer" rel="noopener noreferrer"&gt;https://github.com/Queeninherprime/offline-listing-writer&lt;/a&gt;&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Model:&lt;/strong&gt; Gemma 3 4B, an open-weight model from Google, running locally through Ollama.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backend:&lt;/strong&gt; a small Python server using only the standard library, so there is nothing to install. It serves the page and sends the product details to Ollama on the same machine.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Frontend:&lt;/strong&gt; plain HTML and JavaScript with system fonts, so the page loads nothing from the internet. It shows the listing in a message-style preview with a copy button, a "Send on WhatsApp" link, and saved listings.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI assistance:&lt;/strong&gt; I used an AI assistant (Claude) to help me plan and write the code, and I tested and fixed it on my own laptop. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;What went wrong, and how I fixed it.&lt;/strong&gt; In my first French test I entered a price of 100,000 FCFA, and the model wrote "100 000 FC". It dropped two letters, and "FC" is a different currency. Small local models sometimes change numbers and symbols even when told not to. I fixed it by having the model write placeholders for the price and phone number, then inserting the seller's exact values in code. If the model ignores the placeholder and writes its own amount, the app replaces it. The app also turns a plain number like &lt;code&gt;65000&lt;/code&gt; into "65,000 FCFA".&lt;/p&gt;

&lt;p&gt;I also learned that the app only repeats what it is given. When I entered a phone as "new" with an "88% battery", it wrote both. Sellers should still read each listing before posting.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;It works offline.&lt;/strong&gt; The model lives on the laptop, so a seller can write listings anywhere and connect only to post.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It costs nothing to run.&lt;/strong&gt; No subscription and no per-use fee, which matters for people with small margins.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It keeps data private.&lt;/strong&gt; Prices and phone numbers never leave the computer.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It is not locked to one provider.&lt;/strong&gt; I can swap the model or change the prompt without rewriting the app, and later fine-tune it for local products and wording.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A closed API would need a connection and a paid plan for every listing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Limits:&lt;/strong&gt; it needs a computer able to run the model, small models can be clumsy at times, and it cannot post for the seller. Most sellers use phones, so a phone-friendly version is the obvious next step.&lt;/p&gt;

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

&lt;p&gt;I showed the app to a friend who is a seller. He tried it and said it is very nice, because it cuts down the time a seller spends writing and describing products. He said it would be especially useful for people who post every day and have a lot of work. His view was that sellers should pay for it, since it eases so much of their workload.&lt;/p&gt;

&lt;p&gt;This is one person's reaction, not a market test. He did not name a price, and I have not yet tested whether sellers will actually pay.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Best Use of Gemma&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fb20ue7r6nezv95aormxt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fb20ue7r6nezv95aormxt.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqdv75g5a60zu56yb4unv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqdv75g5a60zu56yb4unv.png" alt=" " width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

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