<?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: Vinay Madival</title>
    <description>The latest articles on DEV Community by Vinay Madival (@vinaymadival).</description>
    <link>https://dev.to/vinaymadival</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%2F4153411%2Fa15503bb-d639-427c-b45d-dd0999a853be.png</url>
      <title>DEV Community: Vinay Madival</title>
      <link>https://dev.to/vinaymadival</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/vinaymadival"/>
    <language>en</language>
    <item>
      <title>Un-stuck: Autonomous AI agent swarms in your favorite social platforms</title>
      <dc:creator>Vinay Madival</dc:creator>
      <pubDate>Sun, 18 Oct 2026 13:20:17 +0000</pubDate>
      <link>https://dev.to/vinaymadival/un-stuck-autonomous-ai-agent-swarms-in-your-favorite-social-platforms-i10</link>
      <guid>https://dev.to/vinaymadival/un-stuck-autonomous-ai-agent-swarms-in-your-favorite-social-platforms-i10</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;Unstuck&lt;/strong&gt; is a fleet of open-source AI support agents, one per messaging platform (WhatsApp, Telegram, Discord, and easy to extend), that walk ordinary people through app settings and problems one safe step at a time.&lt;/p&gt;

&lt;p&gt;Everyone has lost ten minutes hunting for one setting, like setting a PIN on WhatsApp, locking a chat, or turning on 2FA on Discord. Unstuck meets people inside the app they're stuck in: it asks Android or iPhone, gives one step with the exact on-screen label, confirms each step, and cites the official help page.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Who would pay:&lt;/strong&gt; small businesses and communities that run on these platforms and answer the same "how do I...?" questions all day, such as Discord server admins, Telegram community managers and WhatsApp-based shops. Each one could deploy a branded Unstuck agent instead of answering the same questions by hand. Digital-literacy programs and help desks for first-time smartphone users are another fit.&lt;/p&gt;

&lt;p&gt;Safety is built in. Agents never ask for a PIN, OTP or password, they warn when someone is being scammed, and they refuse to help with accounts the user doesn't own.&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/VINAYMADIVAL" rel="noopener noreferrer"&gt;
        VINAYMADIVAL
      &lt;/a&gt; / &lt;a href="https://github.com/VINAYMADIVAL/un-stuck" rel="noopener noreferrer"&gt;
        un-stuck
      &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;Unstuck&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Ten minutes back, for everyone.&lt;/strong&gt; Unstuck is a fleet of open-source AI support agents, one per messaging platform
(WhatsApp, Telegram, Discord, and easy to extend), that guide ordinary people through app settings and problems one safe step at a time
for example "set a PIN on my WhatsApp". Built on &lt;a href="https://github.com/NousResearch/hermes-agent" rel="noopener noreferrer"&gt;Hermes Agent&lt;/a&gt; for the
Hacktoberfest Hack Day Bengaluru 2026.&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;div class="snippet-clipboard-content notranslate position-relative overflow-auto"&gt;&lt;pre class="notranslate"&gt;&lt;code&gt;            Operator
               |
        +--------------+       reports only (health, drift, memory audit)
        | Central agent| ------------------------------------------+
        | SOUL.md      |                                            |
        +--------------+                                            |
     inherits BASE behavior (install.py)                            |
      |            |             |                                  |
 +----v---+  +-----v----+  +-----v----+                             |
 |WhatsApp|  | Telegram |  | Discord  |   independent Hermes        |
 | agent  |  |  agent   |  |  agent   |   profiles: own SOUL,       |
 | SKILL  |  |  SKILL   |  |  SKILL   |   SKILL, MEMORY, token &amp;lt;--+
 | MEMORY |  |  MEMORY  |  |  MEMORY  |
 +--------+  +----------+  +----------+
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Central agent&lt;/strong&gt; (&lt;code&gt;central/SOUL.md&lt;/code&gt;): &lt;em&gt;PART A&lt;/em&gt;…&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/VINAYMADIVAL/un-stuck" 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;Agent harness:&lt;/strong&gt; &lt;a href="https://github.com/NousResearch/hermes-agent" rel="noopener noreferrer"&gt;Hermes Agent&lt;/a&gt; (open source) runs each agent and its messaging gateway.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Model:&lt;/strong&gt; [open-weight model you used, e.g. Gemma via Ollama, confirm before posting]&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Central agent:&lt;/strong&gt; its &lt;code&gt;SOUL.md&lt;/code&gt; holds the base behavior, a repeatable "Unstuck loop" (clarify, locate, guide, confirm, recover, close, learn) plus the safety rules. Every sub-agent inherits it. The central agent also monitors fleet health, detects behavior drift and audits memory.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Platform sub-agents:&lt;/strong&gt; each is an independent Hermes profile with its own &lt;code&gt;SKILL.md&lt;/code&gt; task pack, its own private memory and its own bot token. Memory is never shared between agents.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;My tooling (Python, standard library only):&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;install.py&lt;/code&gt; builds each agent's SOUL as shared base plus platform persona, and never overwrites memory.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;fleet_health.py&lt;/code&gt; and &lt;code&gt;memory_audit.py&lt;/code&gt; check health and drift, and scan memory for isolation problems and leaked PINs, phone numbers or tokens.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;new_agent.py&lt;/code&gt; scaffolds a new platform in seconds.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Quality:&lt;/strong&gt; 18 evals covering task coverage and scam scenarios, 9 unit tests and GitHub Actions CI.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Learning:&lt;/strong&gt; agents write anonymous lessons to their own memory, and a step that fails twice is tagged &lt;code&gt;[STALE?]&lt;/code&gt; so the central agent can flag it for re-verification.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;Support agents handle people's most sensitive moments: security settings, scam attempts, locked accounts. Open source lets a business or community inspect exactly what the agent is told, run it on its own machine, and keep conversations off third-party servers. The safety rules and memory audit are plain files anyone can read and improve, instead of promises behind an API. An open-weight model also means the cost doesn't scale with every question, which matters for a side hustle selling to small communities. And because each agent is just a folder of Markdown, anyone can add a new platform without asking permission.&lt;/p&gt;

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

&lt;p&gt;Two of my friends and me&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>hf26challenge</category>
    </item>
    <item>
      <title>WatchTower : an open-weight agent for video incident investigation</title>
      <dc:creator>Vinay Madival</dc:creator>
      <pubDate>Sat, 10 Oct 2026 04:54:43 +0000</pubDate>
      <link>https://dev.to/vinaymadival/watchtower-an-open-weight-agent-for-video-incident-investigation-1mn1</link>
      <guid>https://dev.to/vinaymadival/watchtower-an-open-weight-agent-for-video-incident-investigation-1mn1</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;Somebody leaves a backpack on the grass outside the canteen. Hours later, security has to find out when, and who was near it. The usual answer is a person staring at a CCTV timeline, scrubbing back and forth until their eyes give up.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;WatchTower&lt;/strong&gt; is a local AI agent that does the screen part so people can do the outside part. You type the incident in plain English ("a blue backpack was left near the canteen around lunchtime"). WatchTower plans an investigation, searches the footage, follows the object over time, finds who was closest to it, pulls evidence frames and writes a report with a timeline. Then it drafts an alert for the right person and &lt;strong&gt;waits for a human to approve it&lt;/strong&gt;. Staff spend their time walking to the actual spot, not sitting in front of a monitor.&lt;/p&gt;

&lt;p&gt;It is for campus, facility and event security teams, and for anyone with long recordings who needs to find one moment.&lt;/p&gt;

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

&lt;p&gt;&lt;a href="https://watchtower-nzpb.onrender.com/" rel="noopener noreferrer"&gt;https://watchtower-nzpb.onrender.com/&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/VINAYMADIVAL" rel="noopener noreferrer"&gt;
        VINAYMADIVAL
      &lt;/a&gt; / &lt;a href="https://github.com/VINAYMADIVAL/WatchTower" rel="noopener noreferrer"&gt;
        WatchTower
      &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;WatchTower: an open-weight agent for video incident investigation&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;Staff describe an incident in plain English ("a blue backpack was left near the canteen around lunchtime")
WatchTower &lt;strong&gt;plans&lt;/strong&gt; the investigation, &lt;strong&gt;calls tools&lt;/strong&gt; on the recorded footage, &lt;strong&gt;recovers from failures&lt;/strong&gt;
writes an &lt;strong&gt;evidence report&lt;/strong&gt;, and &lt;strong&gt;asks a human to approve&lt;/strong&gt; before any alert is sent.
Everything runs locally; no footage leaves the machine.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Built at Hacktoberfest Hack Day Bengaluru '26 (IEEE CIS, RIT).&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;What the AI does&lt;/h2&gt;

&lt;/div&gt;
&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Role&lt;/th&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Planner: chooses tools, rewrites weak queries, writes the summary&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Gemma 4&lt;/strong&gt; (open-weight, via Ollama)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Visual verifier: confirms what a saved frame actually shows&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Gemma 4&lt;/strong&gt; (multimodal)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Detection + tracking&lt;/td&gt;
&lt;td&gt;YOLOv8n + ByteTrack (Ultralytics)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Text-to-image retrieval&lt;/td&gt;
&lt;td&gt;CLIP ViT-B/32 + FAISS&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;p&gt;Model terms: &lt;a href="https://ai.google.dev/gemma/terms" rel="nofollow noopener noreferrer"&gt;Gemma 4 Terms of Use&lt;/a&gt; · CLIP: &lt;a href="https://github.com/openai/CLIP/blob/main/LICENSE" rel="noopener noreferrer"&gt;MIT&lt;/a&gt; · YOLOv8: &lt;a href="https://github.com/ultralytics/ultralytics/blob/main/LICENSE" rel="noopener noreferrer"&gt;AGPL-3.0&lt;/a&gt; · FAISS: &lt;a href="https://github.com/facebookresearch/faiss/blob/main/LICENSE" rel="noopener noreferrer"&gt;MIT&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;See &lt;a href="https://github.com/VINAYMADIVAL/WatchTower/docs/ARCHITECTURE.md" rel="noopener noreferrer"&gt;docs/ARCHITECTURE.md&lt;/a&gt; for the full system diagram.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Agent tools&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;&lt;code&gt;list_objects&lt;/code&gt; · &lt;code&gt;search_video&lt;/code&gt; · &lt;code&gt;track_history&lt;/code&gt; · &lt;code&gt;nearby_tracks&lt;/code&gt;…&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/VINAYMADIVAL/WatchTower" 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;The whole thing runs locally on a laptop. No cloud API sees the footage.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Gemma 4 (&lt;code&gt;gemma4:e4b&lt;/code&gt;, via Ollama)&lt;/strong&gt; is the agent's brain. It reads the request, chooses tools, rewrites weak searches and writes the summary. It also acts as a &lt;strong&gt;visual verifier&lt;/strong&gt;, looking at a candidate frame to confirm what is actually in it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;YOLOv8n + ByteTrack&lt;/strong&gt; detect objects and give each one a persistent track ID across frames.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CLIP ViT-B/32 + FAISS&lt;/strong&gt; turn detected objects into embeddings so plain-English queries can search the video.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;FastAPI + Streamlit + SQLite&lt;/strong&gt; hold the tools, the trace and the operations screen.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The agent has tools for searching the video, following an object's track, finding nearby people, grabbing evidence frames, verifying a frame, writing a report and drafting an alert. Tool arguments are validated, and errors go back to the agent as data. Failures don't crash the run: it retries, changes its query, and if it cannot finish it still produces a partial report. Ollama's native tool calling failed once on my machine, so I added a structured JSON fallback that works with the same tools.&lt;/p&gt;

&lt;p&gt;One honest moment from testing: on a clip with no backpack, the agent searched three ways and then reported that it found no evidence of one, instead of making something up.&lt;/p&gt;

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

&lt;p&gt;Security footage is exactly the data you should not upload to a closed API. With open-weight Gemma 4, YOLO and CLIP, WatchTower runs fully on the user's own machine, so nobody has to trade privacy for capability. I could also inspect and fix the pieces: when native tool calling failed, I could build a fallback, which is not possible with a black-box endpoint. And because the stack is open, a campus or small business can run it without paying per query.&lt;/p&gt;

&lt;p&gt;WatchTower never identifies people: it describes objects and clothing only, and results are treated as leads for a human to verify, not proof.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Gemma (Featured): Gemma 4 is both the planner and the visual verifier.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>AI Powered Travel Tracker App</title>
      <dc:creator>Vinay Madival</dc:creator>
      <pubDate>Mon, 05 Oct 2026 04:19:56 +0000</pubDate>
      <link>https://dev.to/vinaymadival/ai-powered-travel-tracker-app-161</link>
      <guid>https://dev.to/vinaymadival/ai-powered-travel-tracker-app-161</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;Travel Tracker is a small web app for logging the countries you've visited. You pick a user, search for a country by name (partial matches work, so typing "ind" finds India and Indonesia), and add it to that person's list. The visited countries are saved per user, so each person has their own travel journal.&lt;/p&gt;

&lt;p&gt;I built it for my friend, who often travels different states and countries.&lt;/p&gt;

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

&lt;p&gt;Live app: &lt;a href="https://travel-tracker-app-1mty.onrender.com/" rel="noopener noreferrer"&gt;https://travel-tracker-app-1mty.onrender.com/&lt;/a&gt;&lt;br&gt;
Demo Video: &lt;a href="https://youtu.be/W4so6Wgsv9M" rel="noopener noreferrer"&gt;https://youtu.be/W4so6Wgsv9M&lt;/a&gt; (old; new will be updated).&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/VINAYMADIVAL" rel="noopener noreferrer"&gt;
        VINAYMADIVAL
      &lt;/a&gt; / &lt;a href="https://github.com/VINAYMADIVAL/Travel-Tracker-App" rel="noopener noreferrer"&gt;
        Travel-Tracker-App
      &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;Travel Tracker App&lt;/h1&gt;
&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h4 class="heading-element"&gt;A concise travel journal web app that lets users log and review countries they've visited with a quick search feature. It combines Express.js and PostgreSQL for dependable server-rendered pages and secure data storage.&lt;/h4&gt;
&lt;/div&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;🚀 Live Demo&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;Visit the app: &lt;a href="https://travel-tracker-app-1mty.onrender.com/" rel="nofollow noopener noreferrer"&gt;https://travel-tracker-app-1mty.onrender.com/&lt;/a&gt;&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;📖 Table of Contents&lt;/h2&gt;

&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://github.com/VINAYMADIVAL/Travel-Tracker-App#project-overview" rel="noopener noreferrer"&gt;Project Overview&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/VINAYMADIVAL/Travel-Tracker-App#features" rel="noopener noreferrer"&gt;Features&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/VINAYMADIVAL/Travel-Tracker-App#prerequisites" rel="noopener noreferrer"&gt;Prerequisites&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/VINAYMADIVAL/Travel-Tracker-App#local-setup" rel="noopener noreferrer"&gt;Local Setup&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/VINAYMADIVAL/Travel-Tracker-App#database-setup" rel="noopener noreferrer"&gt;Database Setup&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/VINAYMADIVAL/Travel-Tracker-App#deployment-on-render" rel="noopener noreferrer"&gt;Deployment on Render&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/VINAYMADIVAL/Travel-Tracker-App#environment-variables" rel="noopener noreferrer"&gt;Environment Variables&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/VINAYMADIVAL/Travel-Tracker-App#future-improvements" rel="noopener noreferrer"&gt;Future Improvements&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/VINAYMADIVAL/Travel-Tracker-App#security" rel="noopener noreferrer"&gt;Security&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Project Overview&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Travel Tracker&lt;/strong&gt; allows users to log and view visited countries. Built with Express.js, EJS, and PostgreSQL, it provides a server-side rendered interface with dynamic data querying.&lt;/p&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;📝 Log visited countries per user&lt;/li&gt;
&lt;li&gt;🌐 Search country names (partial match)&lt;/li&gt;
&lt;li&gt;🖥️ Server-rendered UI with EJS templates&lt;/li&gt;
&lt;li&gt;🚀 Hosted serverless on Render&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Prerequisites&lt;/h2&gt;

&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Node.js v14+&lt;/li&gt;
&lt;li&gt;PostgreSQL (local) for development&lt;/li&gt;
&lt;li&gt;Render CLI (optional)&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Local Setup&lt;/h2&gt;

&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;Clone the repo
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;git clone https://github.com/&lt;span class="pl-k"&gt;&amp;lt;&lt;/span&gt;your-username&lt;span class="pl-k"&gt;&amp;gt;&lt;/span&gt;/travel-tracker.git
&lt;span class="pl-c1"&gt;cd&lt;/span&gt; travel-tracker&lt;/pre&gt;

&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;Install dependencies:
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;npm install&lt;/pre&gt;

&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;Create a &lt;code&gt;.env&lt;/code&gt; file based on &lt;code&gt;.env.example&lt;/code&gt;…&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/VINAYMADIVAL/Travel-Tracker-App" 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;Backend: Node.js with Express.js handles routing and the app logic.&lt;br&gt;
Frontend: EJS templates render the pages on the server, so the UI stays simple and fast.&lt;br&gt;
Database: PostgreSQL stores three tables, countries, users and visited_countries. I seeded countries from a CSV of country codes and names using \copy.&lt;br&gt;
Search: Country names are matched with partial text queries in SQL.&lt;br&gt;
Deployment: The web service and the Postgres database both run on Render. The connection string lives in a DATABASE_URL environm&lt;/p&gt;

&lt;p&gt;Open-source AI (in progress): I'm adding an AI layer using an &lt;strong&gt;open-weight model (Llama 3.2 / Qwen 2.5)&lt;/strong&gt; served locally through Ollama. It will let users type trips in plain English ("I visited Japan and Italy last year"). The model extracts the country names, which are then matched against the PostgreSQL countries table. It will also suggest next destinations based on the user's visited list. I'm updating the GitHub repo with this soon.&lt;/p&gt;

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

&lt;p&gt;Everything in this project sits on open-source software: Node.js, Express, EJS and PostgreSQL. None of it needed a licence, a paid API key or anyone's permission, which let me go from an idea to a deployed app for a friend in a weekend. Because the stack is open, I could read the docs and source, fix my own mistakes, and host it anywhere. A closed, metered service would have made a small personal project like this harder to justify.&lt;/p&gt;

&lt;p&gt;Open-weight models make the AI part possible without sending my friend's travel history to a third-party API. I can run the model on my own machine, so the data stays with me, and I don't pay per request. That's what makes adding AI to a small personal project realistic.&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>
