<?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: Yash Pawar</title>
    <description>The latest articles on DEV Community by Yash Pawar (@yashpawar).</description>
    <link>https://dev.to/yashpawar</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%2F4156676%2F5a6d1837-c549-4853-a813-86fd34f11696.jpg</url>
      <title>DEV Community: Yash Pawar</title>
      <link>https://dev.to/yashpawar</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/yashpawar"/>
    <language>en</language>
    <item>
      <title>DrishtiPath: Offline AI Navigation Through What You See</title>
      <dc:creator>Yash Pawar</dc:creator>
      <pubDate>Sun, 11 Oct 2026 09:21:36 +0000</pubDate>
      <link>https://dev.to/yashpawar/drishtipath-offline-ai-navigation-through-what-you-see-57gm</link>
      <guid>https://dev.to/yashpawar/drishtipath-offline-ai-navigation-through-what-you-see-57gm</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;h1&gt;
  
  
  DrishtiPath: Offline AI Navigation Through What You See
&lt;/h1&gt;

&lt;p&gt;GPS is great — until you're in a crowded event, surrounded by temporary roads, changing entry points, thousands of people, and unreliable connectivity.&lt;/p&gt;

&lt;p&gt;That made me think about a different way to navigate:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What if your phone could understand where you are simply by looking at what's around you?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That idea became &lt;strong&gt;DrishtiPath&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Instead of keeping users staring at a map, DrishtiPath is designed around a short interaction:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Look → Capture → Identify → Get direction → Keep walking.&lt;/strong&gt;&lt;/p&gt;




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

&lt;p&gt;DrishtiPath is an &lt;strong&gt;AI-assisted visual navigation system for large outdoor gatherings such as Kumbh Mela&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;A user can take a photo of a nearby landmark, gate, ghat, help booth, temple area, or other recognizable location.&lt;/p&gt;

&lt;p&gt;An open-weight AI model analyzes the image and attempts to identify the location.&lt;/p&gt;

&lt;p&gt;Once the landmark is recognized, DrishtiPath can show useful nearby places such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Medical camps&lt;/li&gt;
&lt;li&gt;Police help booths&lt;/li&gt;
&lt;li&gt;Water points&lt;/li&gt;
&lt;li&gt;Information centres&lt;/li&gt;
&lt;li&gt;Parking areas&lt;/li&gt;
&lt;li&gt;Important gates&lt;/li&gt;
&lt;li&gt;Ghats and temple areas&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Instead of spending several minutes staring at a map, the interaction is intended to take only a few seconds.&lt;/p&gt;

&lt;h3&gt;
  
  
  The basic flow
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;See landmark
     ↓
Take photo
     ↓
Local Gemma model
     ↓
Identify possible landmark
     ↓
Match with known location
     ↓
Find nearby facilities
     ↓
Show direction
     ↓
Put phone away and continue walking
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For the prototype, I focused on &lt;strong&gt;Nashik–Trimbakeshwar Kumbh&lt;/strong&gt; and created a small landmark dataset containing places such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ramkund Ghat&lt;/li&gt;
&lt;li&gt;Panchavati Entry Gate&lt;/li&gt;
&lt;li&gt;Tapovan&lt;/li&gt;
&lt;li&gt;Kalaram Mandir area&lt;/li&gt;
&lt;li&gt;Sadhugram Entry&lt;/li&gt;
&lt;li&gt;Trimbakeshwar Temple area&lt;/li&gt;
&lt;li&gt;Information Centre&lt;/li&gt;
&lt;li&gt;Medical camps&lt;/li&gt;
&lt;li&gt;Police help booths&lt;/li&gt;
&lt;li&gt;Parking areas&lt;/li&gt;
&lt;li&gt;Water points&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The interface also lets the user switch between:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Prayagraj Kumbh&lt;/li&gt;
&lt;li&gt;Haridwar Kumbh&lt;/li&gt;
&lt;li&gt;Ujjain Simhastha&lt;/li&gt;
&lt;li&gt;Nashik–Trimbakeshwar Kumbh&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The current project is an MVP, but the idea is designed around a real problem: helping people navigate environments where GPS coordinates alone may not tell the whole story.&lt;/p&gt;




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

&lt;h3&gt;
  
  
  How the demo works
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Select a Kumbh location.&lt;/li&gt;
&lt;li&gt;Upload or capture an image of a nearby landmark.&lt;/li&gt;
&lt;li&gt;DrishtiPath sends the image to the locally running Gemma model.&lt;/li&gt;
&lt;li&gt;Gemma analyzes the visual scene.&lt;/li&gt;
&lt;li&gt;The response is matched against known landmarks.&lt;/li&gt;
&lt;li&gt;DrishtiPath displays the detected location.&lt;/li&gt;
&lt;li&gt;Nearby useful facilities are calculated.&lt;/li&gt;
&lt;li&gt;The user gets simple navigation information.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Detected Landmark:
Ramkund Ghat

Nearby:

Medical Camp        120 m
Police Help Booth   180 m
Water Point          90 m
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The goal isn't to make users continuously follow a blue dot.&lt;/p&gt;

&lt;p&gt;The goal is to answer:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Where am I, and where should I go next?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;…and then let them put the phone back in their pocket.&lt;/p&gt;

&lt;h3&gt;
  
  
  Demo
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Live Demo:&lt;/strong&gt;  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://drishtipath.onrender.com/" rel="noopener noreferrer"&gt;https://drishtipath.onrender.com/&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;

&lt;p&gt;The project is open source on GitHub: &lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/dev-yashpawar/DrishtiPath" rel="noopener noreferrer"&gt;https://github.com/dev-yashpawar/DrishtiPath&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The repository contains the web application, backend integration, landmark data, and local AI integration used by the prototype.&lt;/p&gt;




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

&lt;p&gt;The core of DrishtiPath is not a cloud AI API.&lt;/p&gt;

&lt;p&gt;It uses an &lt;strong&gt;open-weight Gemma model running locally with Ollama&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;For my local development setup I used:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;OLLAMA_URL=http://127.0.0.1:11434
OLLAMA_MODEL=gemma4:e2b
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Architecture
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                ┌──────────────────┐
                │      User        │
                │ Camera / Upload  │
                └────────┬─────────┘
                         │
                         ▼
                ┌──────────────────┐
                │   Web Client     │
                │ Map + Navigation │
                └────────┬─────────┘
                         │
                         ▼
                ┌──────────────────┐
                │ Backend API      │
                │ Image Processing │
                └────────┬─────────┘
                         │
                         ▼
                ┌──────────────────┐
                │      Ollama      │
                │  Local Inference │
                └────────┬─────────┘
                         │
                         ▼
                ┌──────────────────┐
                │     Gemma 4      │
                │ Visual Analysis  │
                └────────┬─────────┘
                         │
                         ▼
                ┌──────────────────┐
                │ Landmark Matcher │
                │ + Facility Data  │
                └────────┬─────────┘
                         │
                         ▼
                ┌──────────────────┐
                │ Navigation Result│
                └──────────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Why visual navigation?
&lt;/h3&gt;

&lt;p&gt;Traditional navigation usually begins with coordinates.&lt;/p&gt;

&lt;p&gt;DrishtiPath adds another signal:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What can the user actually see?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If someone is standing near a recognizable gate, temple, ghat, booth, or entrance, that visual information can help narrow down their location.&lt;/p&gt;

&lt;p&gt;Long term, I want to combine:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;GPS
+
Visual landmark recognition
+
Known event landmarks
+
Nearby infrastructure
=
More reliable navigation
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is especially interesting for temporary event environments because roads, barricades, sectors and entrances can change.&lt;/p&gt;




&lt;h3&gt;
  
  
  Local AI with Ollama
&lt;/h3&gt;

&lt;p&gt;Ollama made it possible to run the model directly on my development machine.&lt;/p&gt;

&lt;p&gt;Instead of doing:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Image
 ↓
Internet
 ↓
External AI company
 ↓
Remote inference
 ↓
Response
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;DrishtiPath can use:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Image
 ↓
Local Ollama server
 ↓
Gemma
 ↓
Response
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That changes more than just the architecture.&lt;/p&gt;

&lt;p&gt;It changes what kind of product can be built.&lt;/p&gt;




&lt;h3&gt;
  
  
  Landmark Matching
&lt;/h3&gt;

&lt;p&gt;I don't want the AI model to invent random place names.&lt;/p&gt;

&lt;p&gt;The model's result is therefore used as part of a controlled navigation pipeline.&lt;/p&gt;

&lt;p&gt;Conceptually:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;detectedLandmark&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;analyzeImage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;image&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;landmark&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;landmarks&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;find&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="nx"&gt;place&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;matchesDetectedLocation&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;place&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;detectedLandmark&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;nearbyFacilities&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;findNearbyFacilities&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="nx"&gt;landmark&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;latitude&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;landmark&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;longitude&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Known locations contain information such as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Ramkund Ghat"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ghat"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"latitude"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;20.007&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"longitude"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;73.789&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"city"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Nashik"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"event"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Nashik-Trimbakeshwar Kumbh"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This allows the application to separate two jobs:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AI&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Understand the image.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Application logic&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Decide which known landmark and facilities should be shown.&lt;/p&gt;

&lt;p&gt;That separation is important because an AI model should not be trusted as the database of truth for emergency navigation.&lt;/p&gt;




&lt;h3&gt;
  
  
  Maps and nearby facilities
&lt;/h3&gt;

&lt;p&gt;After identifying a landmark, the application can calculate nearby facilities using coordinates.&lt;/p&gt;

&lt;p&gt;For two points:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Current landmark
        ↓
Calculate distance
        ↓
Known medical / police / water locations
        ↓
Sort nearest first
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This makes the AI useful rather than simply producing a paragraph describing the photograph.&lt;/p&gt;

&lt;p&gt;The result becomes an actual action:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Medical assistance is 120 metres in that direction.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  What Is Offline Today?
&lt;/h2&gt;

&lt;p&gt;I wanted to be careful with the word &lt;strong&gt;offline&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The AI inference can run locally through Ollama without sending every image to a proprietary cloud AI service.&lt;/p&gt;

&lt;p&gt;The current MVP still uses web technologies and some online infrastructure for things such as development data and map resources.&lt;/p&gt;

&lt;p&gt;A completely offline production version would additionally require:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Downloadable offline map packages&lt;/li&gt;
&lt;li&gt;Locally stored landmark databases&lt;/li&gt;
&lt;li&gt;Cached facility information&lt;/li&gt;
&lt;li&gt;On-device or local-network inference&lt;/li&gt;
&lt;li&gt;Sync when connectivity returns&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So the current project demonstrates the most important part first:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;local AI landmark understanding.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The architecture can then progressively remove the remaining network dependencies.&lt;/p&gt;




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

&lt;p&gt;This was the most interesting part of the project for me.&lt;/p&gt;

&lt;p&gt;I could have connected DrishtiPath to a closed vision API.&lt;/p&gt;

&lt;p&gt;Technically, that would probably have been easier.&lt;/p&gt;

&lt;p&gt;But it would weaken the exact scenario the project is designed for.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Connectivity should not decide whether the AI works
&lt;/h3&gt;

&lt;p&gt;Large gatherings can put enormous pressure on mobile networks.&lt;/p&gt;

&lt;p&gt;A navigation assistant that completely depends on sending every image to a cloud model becomes least reliable when the environment becomes most difficult.&lt;/p&gt;

&lt;p&gt;With an open-weight model, inference can happen much closer to the user.&lt;/p&gt;




&lt;h3&gt;
  
  
  2. Images don't have to leave the user's environment
&lt;/h3&gt;

&lt;p&gt;Navigation photographs can contain:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Faces&lt;/li&gt;
&lt;li&gt;Families&lt;/li&gt;
&lt;li&gt;Vehicles&lt;/li&gt;
&lt;li&gt;Surroundings&lt;/li&gt;
&lt;li&gt;Location clues&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For many AI applications, uploading that data to another company's server is accepted as normal.&lt;/p&gt;

&lt;p&gt;It doesn't have to be.&lt;/p&gt;

&lt;p&gt;Local inference gives developers another architectural option.&lt;/p&gt;




&lt;h3&gt;
  
  
  3. The model can be replaced
&lt;/h3&gt;

&lt;p&gt;DrishtiPath isn't supposed to permanently depend on one vendor.&lt;/p&gt;

&lt;p&gt;The AI layer can eventually be changed from:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Gemma
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Fine-tuned Gemma
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;or another capable open-weight vision model.&lt;/p&gt;

&lt;p&gt;The rest of the navigation system does not need to be rebuilt from scratch.&lt;/p&gt;

&lt;p&gt;That flexibility matters for open projects.&lt;/p&gt;




&lt;h3&gt;
  
  
  4. Specialized models become possible
&lt;/h3&gt;

&lt;p&gt;A general-purpose AI model knows about the world.&lt;/p&gt;

&lt;p&gt;But a Kumbh navigation model doesn't need to know everything about the world.&lt;/p&gt;

&lt;p&gt;It needs to be exceptionally good at recognizing things like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Ghats
Entry gates
Temporary sectors
Help booths
Temple surroundings
Parking signs
Information boards
Medical camps
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With open models, a future version could be optimized or fine-tuned specifically for this environment.&lt;/p&gt;

&lt;p&gt;That is much harder when the model is a completely closed black box.&lt;/p&gt;




&lt;h3&gt;
  
  
  5. AI should disappear into the experience
&lt;/h3&gt;

&lt;p&gt;One thing I deliberately did not want to build was another chatbot.&lt;/p&gt;

&lt;p&gt;The user doesn't need to have a ten-message conversation with an AI while trying to find a medical camp.&lt;/p&gt;

&lt;p&gt;They should be able to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Point
Tap
Understand
Walk
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The AI is not the interface.&lt;/p&gt;

&lt;p&gt;The AI is infrastructure underneath the experience.&lt;/p&gt;

&lt;p&gt;That is probably my favorite part of DrishtiPath.&lt;/p&gt;




&lt;h2&gt;
  
  
  Challenges I Ran Into
&lt;/h2&gt;

&lt;p&gt;Running multimodal models locally also reminded me why cloud AI became popular.&lt;/p&gt;

&lt;p&gt;Local AI has real constraints.&lt;/p&gt;

&lt;p&gt;I ran into issues including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Model size&lt;/li&gt;
&lt;li&gt;RAM limitations&lt;/li&gt;
&lt;li&gt;Slow inference on weaker hardware&lt;/li&gt;
&lt;li&gt;Ollama configuration&lt;/li&gt;
&lt;li&gt;Backend-to-Ollama connectivity&lt;/li&gt;
&lt;li&gt;Getting predictable structured model responses&lt;/li&gt;
&lt;li&gt;Distinguishing visually similar locations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For example, asking the model:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Where is this?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;isn't good enough.&lt;/p&gt;

&lt;p&gt;A much better approach is to give it context and constrain its job:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;You are identifying landmarks inside the
Nashik-Trimbakeshwar Kumbh navigation system.

Analyze the image and return the most likely
landmark from the provided candidate locations.

Return structured JSON only.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That reduced the amount of uncontrolled output and made the response easier for the application to process.&lt;/p&gt;

&lt;p&gt;It also taught me something important:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Using an AI model is easy. Building a dependable system around an AI model is the difficult part.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  What I Would Build Next
&lt;/h2&gt;

&lt;p&gt;DrishtiPath is still a prototype.&lt;/p&gt;

&lt;p&gt;The next version would focus on:&lt;/p&gt;

&lt;h3&gt;
  
  
  GPS + visual fusion
&lt;/h3&gt;

&lt;p&gt;Use GPS to narrow the candidates before asking the vision model.&lt;/p&gt;

&lt;p&gt;Instead of checking 500 landmarks:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;GPS radius: 500 metres

Possible landmarks:
- Ramkund
- Gate A
- Police Booth 1

        ↓

Gemma chooses from only these candidates.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That should make visual recognition considerably more reliable.&lt;/p&gt;

&lt;h3&gt;
  
  
  Fully offline maps
&lt;/h3&gt;

&lt;p&gt;Download an event area's map before visiting.&lt;/p&gt;

&lt;h3&gt;
  
  
  Voice navigation
&lt;/h3&gt;

&lt;p&gt;Instead of reading:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Police help booth is 180 metres northeast.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;the user could hear it.&lt;/p&gt;

&lt;h3&gt;
  
  
  Multilingual navigation
&lt;/h3&gt;

&lt;p&gt;For Kumbh deployments, I would prioritize:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Marathi&lt;/li&gt;
&lt;li&gt;Hindi&lt;/li&gt;
&lt;li&gt;English&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Emergency mode
&lt;/h3&gt;

&lt;p&gt;One tap could prioritize:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Police&lt;/li&gt;
&lt;li&gt;Medical assistance&lt;/li&gt;
&lt;li&gt;Lost-person centres&lt;/li&gt;
&lt;li&gt;Emergency exits&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Volunteer mode
&lt;/h3&gt;

&lt;p&gt;Event volunteers could receive additional operational information unavailable in normal visitor mode.&lt;/p&gt;

&lt;h3&gt;
  
  
  Real-time admin updates
&lt;/h3&gt;

&lt;p&gt;Temporary roads and facilities can change quickly during large events.&lt;/p&gt;

&lt;p&gt;An admin system could update those locations, which devices would synchronize whenever connectivity becomes available.&lt;/p&gt;




&lt;h2&gt;
  
  
  What "Touch Grass" Means for This Project
&lt;/h2&gt;

&lt;p&gt;A lot of software is designed to increase screen time.&lt;/p&gt;

&lt;p&gt;DrishtiPath tries to do the opposite.&lt;/p&gt;

&lt;p&gt;The ideal successful session is probably less than ten seconds:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Open DrishtiPath

Take a photo

"Ramkund Ghat detected"

"Medical Camp: 120 m →"

Close phone

Walk
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If someone has to continuously stare at DrishtiPath while walking, I haven't built the experience correctly.&lt;/p&gt;

&lt;p&gt;The screen should be the shortest part of the journey.&lt;/p&gt;

&lt;p&gt;The real product is everything happening after the screen turns off.&lt;/p&gt;




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

&lt;p&gt;I'm entering DrishtiPath for:&lt;/p&gt;

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

&lt;p&gt;Gemma is not an optional chatbot added on top of the application. Local visual understanding is one of the core mechanisms that makes DrishtiPath possible.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best Open-Source AI Project&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The project is built around the idea that open-weight AI can enable local, private and adaptable intelligence for real-world navigation.&lt;/p&gt;




&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;Hacktoberfest usually makes me think about code.&lt;/p&gt;

&lt;p&gt;This challenge made me think more about &lt;strong&gt;where the code runs&lt;/strong&gt; and &lt;strong&gt;what happens when the user closes the screen&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;DrishtiPath started with a simple question:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Could AI navigation understand what I see instead of only knowing my coordinates?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The prototype isn't a replacement for GPS.&lt;/p&gt;

&lt;p&gt;And it isn't pretending AI vision will perfectly recognize every landmark.&lt;/p&gt;

&lt;p&gt;The interesting opportunity is combining several imperfect signals:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Visual understanding
+
GPS
+
Known landmarks
+
Local event data
+
Human-friendly directions
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;to create something more useful than any one of them individually.&lt;/p&gt;

&lt;p&gt;And because the intelligence can run using an open-weight model, that system doesn't necessarily have to depend on a distant server to understand the world directly in front of it.&lt;/p&gt;

&lt;p&gt;That is the direction I want to keep exploring.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Less screen. More surroundings.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;That's DrishtiPath.&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
      <category>webdev</category>
      <category>ai</category>
    </item>
    <item>
      <title>PalForge: An Open-Weight AI Interviewer I Built for a Friend</title>
      <dc:creator>Yash Pawar</dc:creator>
      <pubDate>Sun, 04 Oct 2026 19:49:25 +0000</pubDate>
      <link>https://dev.to/yashpawar/palforge-an-open-weight-ai-interviewer-i-built-for-a-friend-c39</link>
      <guid>https://dev.to/yashpawar/palforge-an-open-weight-ai-interviewer-i-built-for-a-friend-c39</guid>
      <description>&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;One of my friend is preparing for software engineering placements, and while helping him I noticed one common problem.&lt;/p&gt;

&lt;p&gt;There are already lot of interview questions available online. DSA questions, aptitude, DBMS, OS, web development, everything is there.&lt;/p&gt;

&lt;p&gt;But most of them are very generic.&lt;/p&gt;

&lt;p&gt;They don't know what projects are actually written on your resume, what technologies you used, or what kind of role you're applying for.&lt;/p&gt;

&lt;p&gt;So I thought, instead of giving another list of 100 interview questions, why not make something which actually interviews you based on your own resume?&lt;/p&gt;

&lt;p&gt;That's how &lt;strong&gt;PalForge&lt;/strong&gt; started.&lt;/p&gt;

&lt;p&gt;PalForge takes your &lt;strong&gt;resume, target role and job description&lt;/strong&gt;, and creates a personalized technical interview using &lt;strong&gt;Gemma&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;For example, instead of asking:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;What is MongoDB?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;it can ask:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;You used MongoDB in your project. Why did you choose it instead of PostgreSQL?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And if the answer is not complete, it can ask another question based on that answer.&lt;/p&gt;

&lt;p&gt;That was the main thing I wanted from this project.&lt;/p&gt;

&lt;p&gt;Not just questions.&lt;/p&gt;

&lt;p&gt;Actual follow-up.&lt;/p&gt;

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

&lt;p&gt;Live Web app:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://palforge.onrender.com/" rel="noopener noreferrer"&gt;https://palforge.onrender.com/&lt;/a&gt;&lt;/p&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
      &lt;div class="c-embed__body flex items-center justify-between"&gt;
        &lt;a href="https://palforge.onrender.com/" rel="noopener noreferrer" class="c-link fw-bold flex items-center"&gt;
          &lt;span class="mr-2"&gt;palforge.onrender.com&lt;/span&gt;
          

        &lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;GitHub:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/dev-yashpawar/PalForge" rel="noopener noreferrer"&gt;https://github.com/dev-yashpawar/PalForge&lt;/a&gt;&lt;/p&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/dev-yashpawar" rel="noopener noreferrer"&gt;
        dev-yashpawar
      &lt;/a&gt; / &lt;a href="https://github.com/dev-yashpawar/PalForge" rel="noopener noreferrer"&gt;
        PalForge
      &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;PalForge&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Open-source AI interview practice, forged for a friend.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/dev-yashpawar/PalForge/docs/landing-preview.jpg"&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%2Fdev-yashpawar%2FPalForge%2FHEAD%2Fdocs%2Flanding-preview.jpg" alt="PalForge landing page"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;One friend. One target role. One interview built around what they actually know.&lt;/p&gt;
&lt;p&gt;PalForge turns a candidate’s resume and target job into a technical interview, with answer evaluation, bounded adaptive follow-ups, a weakness profile, and a next practice session. Its paper, forest, and coral interface takes its cues from developer festivals and printed posters.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;The problem&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;A friend preparing for software engineering placements needed to explain the projects and decisions on his own resume. Generic question banks covered plenty of material, but missed the context: what he built, why he chose his stack, and what the next company expected.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;What I built&lt;/h2&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;A resume-grounded interview with 5, 7, or 10 questions.&lt;/li&gt;
&lt;li&gt;Warm-up, Standard, and Pressure styles.&lt;/li&gt;
&lt;li&gt;Technical answer evaluation with strengths, missing points, and specific feedback.&lt;/li&gt;
&lt;li&gt;Up to two deeper follow-ups per main question in Pressure Mode.&lt;/li&gt;
&lt;li&gt;Results calculated from actual…&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/dev-yashpawar/PalForge" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&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%2Fth7tqhgvuokydwzsv7r7.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%2Fth7tqhgvuokydwzsv7r7.png" alt=" " width="800" height="462"&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%2Fyoziqc5629h4kuyenr0e.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%2Fyoziqc5629h4kuyenr0e.png" alt=" " width="800" height="1024"&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%2Fesmd9h5kwgwmtax58gvl.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%2Fesmd9h5kwgwmtax58gvl.png" alt=" " width="800" height="469"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How It Works
&lt;/h2&gt;

&lt;p&gt;The basic flow is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Resume
+
Target Role
+
Job Description
↓
Gemma
↓
Personalized Questions
↓
Candidate Answers
↓
Technical Evaluation
↓
Follow-up Questions
↓
Weak Areas
↓
Next Practice Session
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;PalForge currently has 3 interview modes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Warm-up&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Standard&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pressure Mode&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Warm-up is more simple and direct.&lt;/p&gt;

&lt;p&gt;Standard is closer to a normal technical interview.&lt;/p&gt;

&lt;p&gt;Pressure Mode is where I tried to make it little more interesting.&lt;/p&gt;

&lt;p&gt;If the candidate gives an incomplete answer, PalForge can ask deeper questions instead of just moving to the next one.&lt;/p&gt;

&lt;p&gt;For example, if someone says:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;MongoDB is better because it is faster.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;PalForge can ask:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Under what workload would that statement stop being true?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This is actually the part I liked most while building it, because real interviews are also like this. Interviewers normally don't just ask one question and move on. They keep asking "why?", "what if?", "why not this?"&lt;/p&gt;

&lt;p&gt;At the end, PalForge calculates topic-wise performance, finds weak areas and gives suggestions for what to practice next.&lt;/p&gt;

&lt;p&gt;The next interview can also focus more on those weak topics.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tech Stack
&lt;/h2&gt;

&lt;p&gt;I used:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;React&lt;/li&gt;
&lt;li&gt;Vite&lt;/li&gt;
&lt;li&gt;Node.js&lt;/li&gt;
&lt;li&gt;Express.js&lt;/li&gt;
&lt;li&gt;MongoDB Atlas&lt;/li&gt;
&lt;li&gt;Mongoose&lt;/li&gt;
&lt;li&gt;Zod&lt;/li&gt;
&lt;li&gt;Gemma&lt;/li&gt;
&lt;li&gt;Google AI Studio&lt;/li&gt;
&lt;li&gt;Ollama&lt;/li&gt;
&lt;li&gt;Render&lt;/li&gt;
&lt;li&gt;GitHub&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Gemma is used for the main AI part:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;generating interview questions&lt;/li&gt;
&lt;li&gt;evaluating answers&lt;/li&gt;
&lt;li&gt;generating follow-up questions&lt;/li&gt;
&lt;li&gt;finding weak topics&lt;/li&gt;
&lt;li&gt;giving final practice suggestions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;MongoDB Atlas stores the interview sessions and results.&lt;/p&gt;

&lt;p&gt;Render is used for hosting the application.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Testing Taught Me
&lt;/h2&gt;

&lt;p&gt;This project looked simple in beginning.&lt;/p&gt;

&lt;p&gt;Input resume → send to AI → generate questions.&lt;/p&gt;

&lt;p&gt;But while building it, I realised the difficult part is not calling the model. The difficult part is handling everything around the model.&lt;/p&gt;

&lt;h3&gt;
  
  
  Local AI worked... until I deployed it
&lt;/h3&gt;

&lt;p&gt;Initially I was running Gemma locally using Ollama.&lt;/p&gt;

&lt;p&gt;Everything was working fine on my laptop.&lt;/p&gt;

&lt;p&gt;Then I deployed the project on Render and suddenly the AI stopped working.&lt;/p&gt;

&lt;p&gt;The reason was this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;http://127.0.0.1:11434
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;On my laptop, this was pointing to Ollama.&lt;/p&gt;

&lt;p&gt;But on Render, &lt;code&gt;127.0.0.1&lt;/code&gt; means the Render server itself, not my laptop.&lt;/p&gt;

&lt;p&gt;So obviously Render could not access the Ollama running on my machine.&lt;/p&gt;

&lt;p&gt;After that I changed the setup.&lt;/p&gt;

&lt;p&gt;Now PalForge can use:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Ollama locally&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Google hosted Gemma for the public version&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This way I can still use local inference while development, but anyone can test the public app without installing anything.&lt;/p&gt;

&lt;h3&gt;
  
  
  AI output is not always clean
&lt;/h3&gt;

&lt;p&gt;Another problem was JSON output.&lt;/p&gt;

&lt;p&gt;I wanted the AI to return proper structured data for questions and evaluation, but model output is not always perfect.&lt;/p&gt;

&lt;p&gt;Sometimes formatting can break.&lt;/p&gt;

&lt;p&gt;So I added validation using Zod and handling for malformed responses.&lt;/p&gt;

&lt;p&gt;This taught me one simple thing:&lt;/p&gt;

&lt;p&gt;AI should not control the full application.&lt;/p&gt;

&lt;p&gt;The AI gives the intelligence, but the app should still control the flow.&lt;/p&gt;

&lt;h3&gt;
  
  
  Follow-up questions also need limits
&lt;/h3&gt;

&lt;p&gt;At first, follow-up questioning sounded like a great idea.&lt;/p&gt;

&lt;p&gt;But if you don't control it, the model can keep asking questions again and again.&lt;/p&gt;

&lt;p&gt;So I added a limit to how many follow-up questions can happen for one main question.&lt;/p&gt;

&lt;p&gt;Small thing, but important.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Open Innovation Matters
&lt;/h2&gt;

&lt;p&gt;I wanted to use an &lt;strong&gt;open-weight model&lt;/strong&gt; for this project because I didn't want the whole application to depend on only one closed API.&lt;/p&gt;

&lt;p&gt;With Gemma, I can run the same idea locally using Ollama.&lt;/p&gt;

&lt;p&gt;That is useful for a project like this because resumes and interview answers can contain personal information.&lt;/p&gt;

&lt;p&gt;If someone wants, they can run everything locally and keep the data on their own system.&lt;/p&gt;

&lt;p&gt;Also, using open-weight models gives much more flexibility.&lt;/p&gt;

&lt;p&gt;I can change the model.&lt;/p&gt;

&lt;p&gt;I can try a smaller model.&lt;/p&gt;

&lt;p&gt;I can try a bigger model.&lt;/p&gt;

&lt;p&gt;I can run it locally.&lt;/p&gt;

&lt;p&gt;I can use hosted inference.&lt;/p&gt;

&lt;p&gt;I can change how the interviewer behaves.&lt;/p&gt;

&lt;p&gt;I'm not completely stuck with one provider.&lt;/p&gt;

&lt;p&gt;For the public demo I'm using hosted Gemma because its easier for judges to test.&lt;/p&gt;

&lt;p&gt;For local use, Ollama is still supported.&lt;/p&gt;

&lt;p&gt;There is definitely a trade-off.&lt;/p&gt;

&lt;p&gt;Local inference gives better privacy and control, but hosted inference is much easier to make publicly available.&lt;/p&gt;

&lt;p&gt;For this project I wanted both options.&lt;/p&gt;

&lt;h2&gt;
  
  
  Keeping It Small
&lt;/h2&gt;

&lt;p&gt;Initially I was thinking to make this much bigger.&lt;/p&gt;

&lt;p&gt;Maybe job listings, authentication, recruiter dashboard, resume builder, application tracking and other things.&lt;/p&gt;

&lt;p&gt;But then it would basically become another job portal.&lt;/p&gt;

&lt;p&gt;And that was not the actual problem I wanted to solve.&lt;/p&gt;

&lt;p&gt;So I kept the idea simple:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Help one friend practice explaining the things already written on their resume.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That's it.&lt;/p&gt;

&lt;p&gt;The whole flow is basically:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Resume
→ Interview
→ Answer
→ Follow-up
→ Feedback
→ Improve
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And for this challenge, I think that was enough.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Want to Add Next
&lt;/h2&gt;

&lt;p&gt;There are still many things I want to try later:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;voice based interviews&lt;/li&gt;
&lt;li&gt;PDF resume upload&lt;/li&gt;
&lt;li&gt;better progress tracking&lt;/li&gt;
&lt;li&gt;better role-specific evaluation&lt;/li&gt;
&lt;li&gt;comparison between previous interviews&lt;/li&gt;
&lt;li&gt;running better models on lower-end laptops&lt;/li&gt;
&lt;li&gt;more detailed weak-topic analytics&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But I didn't want to keep adding features just for the sake of adding features.&lt;/p&gt;

&lt;p&gt;The main goal was to make one complete interview flow actually work.&lt;/p&gt;

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

&lt;p&gt;I'm submitting PalForge for:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best Use of Gemma&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Gemma is used for question generation, answer evaluation, follow-ups and final analysis.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best Use of Render&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
The live PalForge application and backend are hosted on Render.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best Use of MongoDB Atlas&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
MongoDB Atlas stores interview sessions, answers and results.&lt;/p&gt;

&lt;p&gt;And of course, the overall &lt;strong&gt;Hacktoberfest Weekend Challenge: Build for a Friend&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;PalForge basically started from one question:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;What if interview preparation actually knew what you built?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This project is my small attempt to answer that.&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%2Ffybw2rzlbk3u46te8ay4.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%2Ffybw2rzlbk3u46te8ay4.png" alt=" " width="800" height="581"&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%2F1od2qz9id3ue4vaxd7ml.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%2F1od2qz9id3ue4vaxd7ml.png" alt=" " width="800" height="535"&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%2Fra2up0octu9klwpjug8c.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%2Fra2up0octu9klwpjug8c.png" alt=" " width="778" height="1294"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>weekendchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>Hi I'm Yash</title>
      <dc:creator>Yash Pawar</dc:creator>
      <pubDate>Fri, 02 Oct 2026 07:33:38 +0000</pubDate>
      <link>https://dev.to/yashpawar/hi-im-yash-1b7g</link>
      <guid>https://dev.to/yashpawar/hi-im-yash-1b7g</guid>
      <description>&lt;p&gt;I'm a software developer who learns by building and experimenting. I enjoy turning random ideas into working products, exploring new technologies, and figuring out how things work under the hood. Outside coding, I'm into movies, music, coffee, and photography.&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>webdev</category>
      <category>ai</category>
      <category>javascript</category>
    </item>
  </channel>
</rss>
