<?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: Forenche</title>
    <description>The latest articles on DEV Community by Forenche (@forenche).</description>
    <link>https://dev.to/forenche</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%2F728118%2Fdf6efc4f-434b-409b-9d03-fcb38572c4bb.jpeg</url>
      <title>DEV Community: Forenche</title>
      <link>https://dev.to/forenche</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/forenche"/>
    <language>en</language>
    <item>
      <title>Forward Check - I built Dhroov an offline bouncer for the family WhatsApp group</title>
      <dc:creator>Forenche</dc:creator>
      <pubDate>Sun, 04 Oct 2026 18:26:55 +0000</pubDate>
      <link>https://dev.to/forenche/forward-check-i-built-dhroov-an-offline-bouncer-for-the-family-whatsapp-group-5eod</link>
      <guid>https://dev.to/forenche/forward-check-i-built-dhroov-an-offline-bouncer-for-the-family-whatsapp-group-5eod</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-weekend-2026-10-01"&gt;Hacktoberfest Weekend Challenge: Build for a Friend&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;Dhroov is my friend, and like everyone in India, he's in WhatsApp groups that get roughly 3 forwards a week that make you stop and wonder, like "Please forward this file to your company's accountant, new RBI guidelines apply from next week." Nobody wants to be the one who replies "this is fake" and starts a fight, so the forwards keep travelling.&lt;/p&gt;

&lt;p&gt;Forward Check is a small app that sits between "received" and "forwarded". Paste a message in and it gives you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a verdict: likely fake, suspicious, probably harmless, or can't tell&lt;/li&gt;
&lt;li&gt;the specific warning signs it spotted (urgency, "doctors say" with no doctor, KYC links, miracle cures)&lt;/li&gt;
&lt;li&gt;what to do about it&lt;/li&gt;
&lt;li&gt;a short, non-condescending reply in English, Hindi or Marathi that you can post in the group without starting a war&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The point isn't to make anyone feel stupid. It's to give a second opinion before hitting forward.&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&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%2Fns6lm7plx0qth4omq0ka.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%2Fns6lm7plx0qth4omq0ka.png" alt="Forward Check running locally" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&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%2Fsefhvbdqkn7coihf1ydn.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%2Fsefhvbdqkn7coihf1ydn.png" alt="Forward Check flagging a fake RBI message Dhroov tested" width="793" height="2177"&gt;&lt;/a&gt;&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/Forenche" rel="noopener noreferrer"&gt;
        Forenche
      &lt;/a&gt; / &lt;a href="https://github.com/Forenche/forward-check" rel="noopener noreferrer"&gt;
        forward-check
      &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;Forward Check&lt;/h1&gt;

&lt;/div&gt;
&lt;p&gt;A local, offline checker for WhatsApp forwards. Paste a forward, get a verdict, the warning signs it shows, and a polite reply you can drop in the family group. English, Hindi or Marathi.&lt;/p&gt;
&lt;p&gt;Runs an open-weight Gemma model through &lt;a href="https://ollama.com" rel="nofollow noopener noreferrer"&gt;Ollama&lt;/a&gt;. No API keys, no cloud, nothing leaves your machine.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Run it&lt;/h2&gt;

&lt;/div&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;&lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; 1. Install Ollama from https://ollama.com, then:&lt;/span&gt;
ollama pull gemma3:4b

&lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; 2. Install and start the app&lt;/span&gt;
pip install -r requirements.txt
python app.py&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;Open the local URL Gradio prints.&lt;/p&gt;
&lt;p&gt;Use a different model with &lt;code&gt;MODEL=gemma3:12b python app.py&lt;/code&gt; (needs more VRAM), or point at another Ollama host with &lt;code&gt;OLLAMA_URL&lt;/code&gt;.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Limits&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;It has no internet access, so it cannot verify facts. It spots manipulation patterns: urgency, fake authority, miracle cures, KYC/OTP scams, outrage bait. A well-written lie with no red flags can get through. It says so in every result.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;License&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;MIT&lt;/p&gt;
&lt;/div&gt;



&lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/Forenche/forward-check" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


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

&lt;p&gt;The whole thing is one Python file, around 130 lines.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Model:&lt;/strong&gt; Gemma (&lt;code&gt;gemma3:4b&lt;/code&gt;), an open-weight model from Google, running locally through &lt;strong&gt;Ollama&lt;/strong&gt;. On my laptop's RTX 4060 (8 GB) it answers in a few seconds.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;UI:&lt;/strong&gt; Gradio, so there's a paste box and a button and nothing else to learn.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Structured output:&lt;/strong&gt; Ollama's &lt;code&gt;format: "json"&lt;/code&gt; mode forces the model to return a fixed shape (verdict, summary, red flags, advice, reply), which the app renders. Low temperature keeps verdicts consistent.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The most important design decision was in the prompt: &lt;strong&gt;the model is told it has no internet and must never claim it verified anything.&lt;/strong&gt; A small local model will happily invent "according to PIB Fact Check..." if you let it, which would make the tool another source of misinformation. So it judges messages on manipulation patterns instead of pretending to know the truth, and every result says it wasn't fact-checked. Health claims always get "check with a doctor"; anything with money or links gets "don't click, don't share OTPs".&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The family group stays in the family.&lt;/strong&gt; Forwards contain names, phone numbers, photos of relatives and people's health worries. Running the model locally means none of that is shipped to a third-party server to be logged.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It costs nothing to run.&lt;/strong&gt; No API bill, no free tier that disappears. Dhroov can use it forever.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It works offline.&lt;/strong&gt; The model runs entirely on my laptop with no cloud dependency.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;I can swap or tune the model.&lt;/strong&gt; If a bigger Gemma or a model fine-tuned on Indian misinformation datasets comes along, it's a one-line change (&lt;code&gt;MODEL=...&lt;/code&gt;). Nobody can deprecate it out from under me.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Where a closed API would win: it could be connected to live fact-check sources. That's the honest trade-off, and it's why the tool calls itself a warning-sign spotter, not a fact-checker.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Dhroov Said
&lt;/h2&gt;

&lt;p&gt;"I think it’s a fair assessment of the msg it does not just claim it as scam or safe so I feel it’s better"&lt;/p&gt;

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

&lt;p&gt;Best Use of Gemma&lt;/p&gt;

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