<?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%2Fthepracticaldev.s3.amazonaws.com%2Fi%2F99mvlsfu5tfj9m7ku25d.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>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>
