<?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: Samarth Kadam</title>
    <description>The latest articles on DEV Community by Samarth Kadam (@iamsamkk).</description>
    <link>https://dev.to/iamsamkk</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%2F4160406%2F9c112319-5b58-44bf-828e-90540e9352b7.png</url>
      <title>DEV Community: Samarth Kadam</title>
      <link>https://dev.to/iamsamkk</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/iamsamkk"/>
    <language>en</language>
    <item>
      <title>Whatchalant: a lazy, local WhatsApp sidekick that reads my chats so I don't have to 🦥</title>
      <dc:creator>Samarth Kadam</dc:creator>
      <pubDate>Sun, 25 Oct 2026 17:27:11 +0000</pubDate>
      <link>https://dev.to/iamsamkk/whatchalant-a-lazy-local-whatsapp-sidekick-that-reads-my-chats-so-i-dont-have-to-3maa</link>
      <guid>https://dev.to/iamsamkk/whatchalant-a-lazy-local-whatsapp-sidekick-that-reads-my-chats-so-i-dont-have-to-3maa</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-week3-2026-10-19"&gt;Hacktoberfest Open-Source AI Challenge Week 3: Slow and Steady&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Whatchalant&lt;/strong&gt; is a personal WhatsApp assistant that runs entirely on my laptop. It links to my account as a normal WhatsApp linked device. After that, it does the WhatsApp chores I keep putting off:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;🦥 Catch me up.&lt;/strong&gt; Messages pile up in my group chats while I'm away. One click, and a local model gives me one line per chat, with the chats that need me first. It can also send that digest to my own "Message yourself" chat every morning.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;🔔 Voice alerts when I'm @mentioned.&lt;/strong&gt; If someone tags me in a group while I'm heads-down, my laptop says it out loud. That uses ElevenLabs, or the built-in system voice offline.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;💬 Replies drafted by my own model, sent only when I approve them.&lt;/strong&gt; For chats I allow (or @mentions), the local model drafts a reply in my tone. It waits on a dashboard until I click Send.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;🎙 Dictation.&lt;/strong&gt; I speak a message; local Whisper turns it into a draft.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;⏰ Scheduler.&lt;/strong&gt; "Good morning" every weekday at 9, or a one-off reminder for tonight.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Everything runs from a localhost dashboard, so you don't need to learn any commands.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Who gets to be lazier:&lt;/strong&gt; anyone in too many group chats. That means students, family admins, and people who mute everything and then miss the one message that mattered.&lt;/p&gt;

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

&lt;p&gt;A sample "Catch me up" result, from three busy chats:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;College Friends&lt;/strong&gt;: Trek on Saturday, need headcount by tonight → needs you&lt;br&gt;
&lt;strong&gt;Mom&lt;/strong&gt;: Aunty's function date is Nov 2nd, call me when free → needs you&lt;br&gt;
&lt;strong&gt;Project Team&lt;/strong&gt;: Demo moved to Monday 11am&lt;/p&gt;
&lt;/blockquote&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/IamSamk" rel="noopener noreferrer"&gt;
        IamSamk
      &lt;/a&gt; / &lt;a href="https://github.com/IamSamk/Whatchalant" rel="noopener noreferrer"&gt;
        Whatchalant
      &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;Whatchalant&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;A local-first personal WhatsApp assistant that runs on your own computer as a linked device. It uses Baileys for WhatsApp, local LLMs to draft replies, and Whisper for speech-to-text.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Mention alerts:&lt;/strong&gt; when someone @tags you in a group, the alert is read aloud. It uses ElevenLabs if you set an API key, otherwise your computer's built-in voice.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI replies with anti-ban pacing:&lt;/strong&gt; replies come from Ollama, LM Studio, or your own model (any OpenAI-compatible URL, or a &lt;code&gt;.gguf&lt;/code&gt; file that the app launches with &lt;code&gt;llama-server&lt;/code&gt;). Messages are sent one at a time, with a reading pause, "typing…", and a cooldown.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Draft &amp;amp; Approve:&lt;/strong&gt; replies wait for your OK in the terminal, on the localhost dashboard, or in your "Message yourself" chat.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Voice:&lt;/strong&gt; incoming voice notes are transcribed, and &lt;code&gt;:dictate&lt;/code&gt; turns your mic recording into a draft. Both use local Whisper.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scheduler:&lt;/strong&gt; recurring messages on a cron schedule, plus…&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/IamSamk/Whatchalant" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;WhatsApp:&lt;/strong&gt; &lt;a href="https://github.com/WhiskeySockets/Baileys" rel="noopener noreferrer"&gt;Baileys&lt;/a&gt;, an open-source TypeScript implementation of the WhatsApp Web multi-device protocol.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Models:&lt;/strong&gt; any local model. Ollama, LM Studio, any OpenAI-compatible endpoint (I use my own harnesses), or just a folder of &lt;code&gt;.gguf&lt;/code&gt; files. For a &lt;code&gt;.gguf&lt;/code&gt; file, the app starts &lt;code&gt;llama-server&lt;/code&gt; from llama.cpp itself. I run &lt;strong&gt;Gemma 4 E4B (Q4_K_M)&lt;/strong&gt; on my laptop GPU: it loads in about 8 seconds, drafts a reply in about 0.5 seconds, and summarises a batch of chats in about 1 second.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Speech-to-text:&lt;/strong&gt; OpenAI's open-source Whisper, running locally, for voice notes and dictation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Not getting banned:&lt;/strong&gt; WhatsApp flags bots that answer instantly or in bulk, so every outgoing message goes through a single queue, one at a time. Before sending, it does three things:

&lt;ul&gt;
&lt;li&gt;It "reads" for 1.5 s + 20 ms per character + 1–3 s of random jitter.&lt;/li&gt;
&lt;li&gt;It shows &lt;em&gt;typing…&lt;/em&gt; for 2–6 s, depending on reply length.&lt;/li&gt;
&lt;li&gt;After sending, it cools down for 1.5–3 s.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;On top of that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It only replies to chats I allow, or to @mentions.&lt;/li&gt;
&lt;li&gt;It stops after 4 replies per chat in 10 minutes, or 20 per hour in total.&lt;/li&gt;
&lt;li&gt;It goes quiet in any chat where I typed myself recently.

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Self-diagnosing:&lt;/strong&gt; a health check tests the model server, Whisper, ffmpeg and WhatsApp at startup, and every error says how to fix it.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Something I hit along the way:&lt;/strong&gt; WhatsApp now addresses chats by anonymous "LID" IDs (&lt;code&gt;…@lid&lt;/code&gt;), not phone numbers. On Baileys 6.7, every message in my own self-chat arrived as undecryptable ("No session record"). Upgrading to Baileys 7, which handles LID sessions, fixed it without re-linking.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AI disclosure:&lt;/strong&gt; I built this with an AI coding assistant (Claude Code). It wrote much of the code from my spec, and I tested and directed it. The finished app itself uses only open models running locally.&lt;/p&gt;

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

&lt;p&gt;My WhatsApp messages are the most private data I have: family, friends, work. A closed "AI inbox" API would mean uploading all of it to someone else's server. With open-weight models, &lt;strong&gt;not a single message leaves my laptop&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The summaries, the drafted replies and the voice transcription all run locally.&lt;/li&gt;
&lt;li&gt;The AI parts need no internet at all; only WhatsApp itself does.&lt;/li&gt;
&lt;li&gt;It costs nothing per message, so it can summarise every chat every morning without a token bill.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Open weights also let me swap models freely. The same app runs a small model on a weak laptop or a 9B model on my GPU, and I can point it at my own fine-tuned harness with one URL. Changing the model, the prompt or the reply rules is a config change, not a feature request to a vendor.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of Gemma:&lt;/strong&gt; the whole assistant runs on Gemma 4 E4B, locally through llama.cpp.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>Grasschalant: A Step-Gated Outdoor Pareidolia Hunt &amp; 3D Storybook Generator</title>
      <dc:creator>Samarth Kadam</dc:creator>
      <pubDate>Mon, 12 Oct 2026 07:53:10 +0000</pubDate>
      <link>https://dev.to/iamsamkk/grasschalant-a-step-gated-outdoor-pareidolia-hunt-3d-storybook-generator-27eg</link>
      <guid>https://dev.to/iamsamkk/grasschalant-a-step-gated-outdoor-pareidolia-hunt-3d-storybook-generator-27eg</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-week1-2026-10-05"&gt;Hacktoberfest Open-Source AI Challenge Week 1: Touch Grass&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;Most fitness trackers reduce going outside to sterile metrics: step counters, pace graphs, and calorie rings. Meanwhile, casual walks often turn into another round of mindless phone checking.&lt;/p&gt;

&lt;p&gt;I built &lt;strong&gt;Grasschalant&lt;/strong&gt; to turn an ordinary outdoor walk into an ambient treasure hunt of real-world visual metaphors.&lt;/p&gt;

&lt;p&gt;Grasschalant connects to your device's motion sensors and establishes a structured step expedition (for example, a 6,000-step target). Rather than letting you snap everything at once, the camera is directly gated by your physical movement:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Movement-Unlocked Memories:&lt;/strong&gt; You have to walk outside to unlock photo discovery slots. Every milestone reached along your route unlocks the shutter for another capture.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pareidolia &amp;amp; Metaphor Engine:&lt;/strong&gt; When you spot something unusual in the environment—a knot in a tree trunk, a cracked piece of asphalt, or a curious shadow—you snap a photo. Vision AI analyzes the shapes, contours, and accidental expressions, matching the finding against a curated vault of iconic internet meme archetypes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The "Day Out Storybook" &amp;amp; PDF:&lt;/strong&gt; When you complete your walk, Grasschalant synthesizes the journey into an interactive 3D digital photobook. The left page shows your original outdoor discovery alongside its step count and timestamp, while the right page pairs it with the matching meme and the visual breakdown of why you "can't unsee it." The complete storybook can be flipped through in the browser and exported as an offline keepsake PDF.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It is designed for students, remote workers, and anyone looking for a playful reason to pocket their phone, head outdoors, and observe their surroundings closely.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Live Web Application:&lt;/strong&gt; &lt;a href="https://grasschalant.vercel.app/" rel="noopener noreferrer"&gt;https://grasschalant.vercel.app/&lt;/a&gt;
&lt;em&gt;(Note: The backend API runs on Render's free tier. Please allow approximately 50 seconds on the first request for the web service to spin up and warm up.)&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&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/IamSamk" rel="noopener noreferrer"&gt;
        IamSamk
      &lt;/a&gt; / &lt;a href="https://github.com/IamSamk/Grasschalant" rel="noopener noreferrer"&gt;
        Grasschalant
      &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;🌿 Grasschalant — Touch Grass Edition&lt;/h1&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Hacktoberfest Week 1: "Touch Grass"&lt;/strong&gt;&lt;br&gt;
An outdoor exploration companion and digital memory book generator that turns your real-world walks into uncanny meme storybooks using vision AI and vector search.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;📖 Overview&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Grasschalant&lt;/strong&gt; incentivizes software engineers and indoor dwellers to put down the keyboard and go outside ("touch grass").&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Step Milestones&lt;/strong&gt;: Set an outdoor step goal (e.g., 6,000 steps). As you walk, the app connects to your device's accelerometer / pedometer using HTML5 &lt;code&gt;DeviceMotion&lt;/code&gt; sensor fusion.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Photo Unlocks&lt;/strong&gt;: At regular step intervals (e.g., every 600 steps = 10 unlocks), the camera shutter unlocks so you can capture real-world nature, textures, urban architecture, or street scenes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PaliGemma Pareidolia AI&lt;/strong&gt;: Each photo is analyzed by Google's &lt;strong&gt;PaliGemma&lt;/strong&gt; Vision-Language Model to detect accidental pareidolia, facial contours, or hilarious internet culture analogies in everyday outdoor objects.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Atlas Vector Search&lt;/strong&gt;: The meme analogy concept is projected…&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/IamSamk/Grasschalant" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


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

&lt;p&gt;Grasschalant brings together browser hardware sensor APIs, open-weight multimodal reasoning, vector embeddings, and an interactive digital print pipeline:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Frontend Architecture (Vite + React, TypeScript, Tailwind CSS):&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Mobile Pedometer HUD:&lt;/strong&gt; Reads the browser &lt;code&gt;DeviceMotionEvent&lt;/code&gt; and accelerometer stream to measure steps continuously. It drives a dynamic progress ring that gates the camera shutter based on physical progress, with an integrated step simulator for testing in desktop environments.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dual-Page Flip Storybook:&lt;/strong&gt; Renders a responsive 3D book spread that presents the raw nature photo on the left and the meme match on the right.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Client-Side Document Export:&lt;/strong&gt; Uses &lt;code&gt;html2canvas&lt;/code&gt; and &lt;code&gt;jspdf&lt;/code&gt; to convert the rendered book spreads into a downloadable landscape A4 PDF album directly in the browser.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Open-Source AI Vision (Google PaliGemma):&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Powered by Google's open-weight &lt;code&gt;google/paligemma-3b-pt-224&lt;/code&gt; vision-language model.&lt;/li&gt;
&lt;li&gt;Analyzes candidate outdoor captures to extract the literal subject, recognize unexpected visual analogies, evaluate match confidence, and write a lighthearted explanation of the visual illusion.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Archetype Vault &amp;amp; Semantic Retrieval (MongoDB Atlas Vector Search):&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A curated archive of classic meme archetypes is pre-indexed with dense multimodal CLIP vector embeddings.&lt;/li&gt;
&lt;li&gt;When PaliGemma identifies an analogy concept from an outdoor shot, the system runs an Atlas &lt;code&gt;$vectorSearch&lt;/code&gt; pipeline to retrieve the closest matching meme template.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Media Pipeline &amp;amp; Cloud Deployment:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Uploads outdoor captures to Cloudinary to persist media URLs securely across user sessions.&lt;/li&gt;
&lt;li&gt;The FastAPI backend service is deployed on &lt;strong&gt;Render&lt;/strong&gt;, while the client is hosted globally on &lt;strong&gt;Vercel&lt;/strong&gt; with full HTTPS to satisfy browser camera and sensor permission requirements.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

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

&lt;p&gt;Taking pictures of your neighborhood, parks, and daily walks involves private physical context. Handing that data over to proprietary closed-door APIs turns casual outdoor exploration into commercial data-mining payloads.&lt;/p&gt;

&lt;p&gt;Open innovation changed how Grasschalant could be built:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Democratized Visual Reasoning:&lt;/strong&gt; Open-weight models like Google PaliGemma make nuanced, humorous multimodal reasoning accessible without paying tollbooth API costs on every single step or photo.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Local-to-Cloud Portability:&lt;/strong&gt; Because PaliGemma and CLIP are open-weight, the entire reasoning pipeline can run locally on an edge device or be hosted on flexible cloud containers without vendor lock-in.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Technology That Serves Human Living:&lt;/strong&gt; Open AI allows developers to build tools that encourage people to look up at trees and sidewalks, turning machine learning into an excuse to engage with the physical world rather than get trapped behind a screen.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of Gemma:&lt;/strong&gt; Uses Google's open-weight PaliGemma vision model to analyze outdoor photos, discover pareidolia, and generate humorous visual meme analogies.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of Render:&lt;/strong&gt; Backend FastAPI orchestration and vector querying pipeline deployed and running live on Render.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of MongoDB Atlas:&lt;/strong&gt; Utilizes MongoDB Atlas and Atlas Vector Search (&lt;code&gt;$vectorSearch&lt;/code&gt;) to index and semantically match meme archetypes to outdoor discoveries.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>Canchalant: An Autonomous Candid Photography Assistant &amp; Vector Gallery Powered by Google PaliGemma &amp; MongoDB Atlas</title>
      <dc:creator>Samarth Kadam</dc:creator>
      <pubDate>Mon, 05 Oct 2026 03:13:09 +0000</pubDate>
      <link>https://dev.to/iamsamkk/canchalant-an-autonomous-candid-photography-assistant-vector-gallery-powered-by-google-paligemma-4483</link>
      <guid>https://dev.to/iamsamkk/canchalant-an-autonomous-candid-photography-assistant-vector-gallery-powered-by-google-paligemma-4483</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;A few weeks ago, I was hanging out with my close friend and his partner at their apartment. They were in the middle of this hilarious, chaotic debate while trying to cook dinner together flour on the counter, genuine stomach-hurting laughter, totally absorbed in each other's company.&lt;/p&gt;

&lt;p&gt;My friend suddenly stopped, smiled, and said, &lt;em&gt;"Wait, stay right there, let me grab a picture!"&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;He fumbled for his phone, unlocked it, held up the screen, and counted down. Just like that, the magic vanished. Their shoulders squared up, their smiles froze into polite poses, and the spontaneous energy in the room was gone. &lt;/p&gt;

&lt;p&gt;I’ve watched them run into this exact wall dozens of times: &lt;strong&gt;the second someone remembers to take a photo, the authenticity of the moment dies.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;So for this challenge, I built &lt;strong&gt;Canchalant&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;It’s an ambient, hands-free web app that turns any spare phone, tablet, or laptop into a discreet, fly-on-the-wall photographer. You simply prop your device up on a shelf, mug, or kitchen counter, hit "Start Watching," and walk away. &lt;/p&gt;

&lt;p&gt;Canchalant silently watches the room in real time. It uses computer vision heuristics and Google’s open-weight PaliGemma vision model to detect when people are actually engaged in genuine, unposed interaction,bursting into laughter, sharing quiet eye contact, or gesturing mid-conversation. If someone stares directly into the lens with a stiff smile or moves too fast into a blurry smear, it ignores them. When an authentic moment happens, it silently captures it, writes a story caption, and indexes it into a searchable gallery where they can search their memories using everyday human thoughts.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Live App:&lt;/strong&gt; &lt;a href="https://canchalant.vercel.app" rel="noopener noreferrer"&gt;https://canchalant.vercel.app&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Interactive Backend API:&lt;/strong&gt; &lt;a href="https://canchalant.onrender.com/docs" rel="noopener noreferrer"&gt;https://canchalant.onrender.com/docs&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Uhmm please give it about 50 seconds for the backend to warm up since I am using a free tier of Render&lt;/li&gt;
&lt;/ul&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/IamSamk" rel="noopener noreferrer"&gt;
        IamSamk
      &lt;/a&gt; / &lt;a href="https://github.com/IamSamk/Canchalant" rel="noopener noreferrer"&gt;
        Canchalant
      &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;🎯 Canchalant&lt;/h1&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Candid + Nonchalant&lt;/strong&gt; — An intelligent, private ambient photo assistant and semantic memory gallery.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Built as a gift for a friend and his partner. Canchalant uses an active camera stream (laptop webcam or phone browser) that continuously samples frames, runs real-time heuristic filters, classifies authentic unposed candid interactions via &lt;strong&gt;Google Gemma Vision (PaliGemma)&lt;/strong&gt;, uploads captures to &lt;strong&gt;Cloudinary&lt;/strong&gt; (&lt;code&gt;canchalant_snaps&lt;/code&gt;), and indexes dense &lt;strong&gt;CLIP vector embeddings&lt;/strong&gt; in &lt;strong&gt;MongoDB Atlas Vector Search&lt;/strong&gt; for natural language retrieval.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Say "sitting together laughing over coffee" and find exactly that moment.&lt;/strong&gt;&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;🏆 Target Hacktoberfest Categories&lt;/h2&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of Gemma ($200)&lt;/strong&gt; — PaliGemma 3B open-weight vision model for candid classification, heartfelt captioning, and mood tagging.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of MongoDB Atlas ($100)&lt;/strong&gt; — Atlas Vector Search (&lt;code&gt;$vectorSearch&lt;/code&gt;) over 512-dim multimodal CLIP embeddings.&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;✨ Features&lt;/h2&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;🎥 Ambient Camera HUD&lt;/strong&gt; — Real-time HTML5 &lt;code&gt;getUserMedia&lt;/code&gt; video canvas with animated target indicators, Laplacian blur metrics, and…&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/IamSamk/Canchalant" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


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

&lt;p&gt;I wanted zero barrier to entry—my friend isn't going to compile native code, sideload APKs, or run command-line scripts. It had to be a slick, responsive web experience that works on any modern phone browser.&lt;/p&gt;

&lt;p&gt;Here’s the journey under the hood:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. The Living Room Observer (Vite + React &amp;amp; Tailwind CSS)
&lt;/h3&gt;

&lt;p&gt;The frontend uses standard browser media streams (&lt;code&gt;getUserMedia&lt;/code&gt;) with a custom camera canvas. It features a clean HUD with sensitivity toggles, capture intervals, and a dynamic flash animation whenever a real candid moment is detected. The gallery tab gives them instant access to high-res captures and mood tags.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Guarding the Compute (OpenCV Heuristics)
&lt;/h3&gt;

&lt;p&gt;To prevent overwhelming the system with thousands of useless frames, I built a fast client-side/edge filter using OpenCV Laplacian variance. If someone is dashing across the frame or the lighting is pitch black, the frame gets dropped in under 5 milliseconds before any model even looks at it.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. The Unposed Eye (Google PaliGemma via Hugging Face)
&lt;/h3&gt;

&lt;p&gt;When a clear candidate frame passes, it hits Google's open-weight &lt;strong&gt;PaliGemma&lt;/strong&gt; (&lt;code&gt;google/paligemma-3b-pt-224&lt;/code&gt;). Instead of standard object detection, I prompted PaliGemma to act like an intimate documentary photographer:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It categorizes the frame (&lt;code&gt;SPECIFIC_CANDID&lt;/code&gt;, &lt;code&gt;GENERAL_CANDID&lt;/code&gt;, &lt;code&gt;POSED&lt;/code&gt;, or &lt;code&gt;JUNK&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;It grades the candid confidence score.&lt;/li&gt;
&lt;li&gt;It writes a heartfelt, human caption of what makes the snapshot authentic along with emotional mood tags (like &lt;code&gt;["warmth", "belly-laugh", "cozy"]&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4. Semantic Memory Lane (Cloudinary &amp;amp; MongoDB Atlas)
&lt;/h3&gt;

&lt;p&gt;Once a genuine candid is approved:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The raw image is preserved on &lt;strong&gt;Cloudinary&lt;/strong&gt; so it persists permanently without disappearing when servers cycle.&lt;/li&gt;
&lt;li&gt;The photo is passed through a dense CLIP vectorizer to create an embedding space.&lt;/li&gt;
&lt;li&gt;The metadata, tags, and embeddings are saved directly into &lt;strong&gt;MongoDB Atlas&lt;/strong&gt;, where I configured &lt;strong&gt;Atlas Vector Search&lt;/strong&gt; (&lt;code&gt;$vectorSearch&lt;/code&gt;). &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Instead of scrolling through months of camera rolls, my friend can just type: &lt;em&gt;"laughing while cooking"&lt;/em&gt; or &lt;em&gt;"quiet afternoon reading"&lt;/em&gt; and Atlas Vector Search immediately surfaces the exact candid memories based on mood and meaning.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Production Cloud Deployment
&lt;/h3&gt;

&lt;p&gt;The FastAPI backend service runs 24/7 on &lt;strong&gt;Render&lt;/strong&gt;, communicating seamlessly with the cloud database and image CDN, while the frontend is deployed with full mobile camera SSL permissions. However it needs some warm up time [&amp;gt;50sec] for the backend to work since I am working on free tier&lt;/p&gt;

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

&lt;p&gt;Let’s be honest: setting up a camera in someone's home, kitchen, or living room involves deeply personal moments. &lt;/p&gt;

&lt;p&gt;The idea of sending non-stop live video frames of my friend and his partner to proprietary, black-box cloud APIs—where data retention rules are opaque and images might be harvested to train private commercial models—felt completely wrong.&lt;/p&gt;

&lt;p&gt;Open-weight AI changed the game here:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Zero Tollbooths on Intimacy:&lt;/strong&gt; Google’s open-weight PaliGemma allows powerful multimodal vision reasoning without bleeding money on per-frame API bills. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;From Laptop Rig to the Cloud:&lt;/strong&gt; Because PaliGemma is open, I was able to build and benchmark the entire reasoning loop on my local workstation using quantized GGUF weights before wiring up the deployment pipeline. The architecture remains completely portable—my friend could easily run this on a home mini-PC or edge device down the line with full sovereignty over his memories.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tools Built for People, Not Platforms:&lt;/strong&gt; Open innovation allows developers to build hyper-specific, thoughtful tools for the people in our lives without asking for permission from big tech walled gardens.&lt;/li&gt;
&lt;/ul&gt;

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