<?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: Nilesh H. Thipe</title>
    <description>The latest articles on DEV Community by Nilesh H. Thipe (@nileshthipe).</description>
    <link>https://dev.to/nileshthipe</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%2F4192197%2Ffb6f0a8c-9fa9-4116-8b2d-806c81d215c9.jpg</url>
      <title>DEV Community: Nilesh H. Thipe</title>
      <link>https://dev.to/nileshthipe</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/nileshthipe"/>
    <language>en</language>
    <item>
      <title>How I Choose AI Models for Different Tasks (And Why I Don't Stick to Just One)</title>
      <dc:creator>Nilesh H. Thipe</dc:creator>
      <pubDate>Fri, 06 Nov 2026 12:27:25 +0000</pubDate>
      <link>https://dev.to/nileshthipe/how-i-choose-ai-models-for-different-tasks-and-why-i-dont-stick-to-just-one-igm</link>
      <guid>https://dev.to/nileshthipe/how-i-choose-ai-models-for-different-tasks-and-why-i-dont-stick-to-just-one-igm</guid>
      <description>&lt;p&gt;AI tools are becoming part of our everyday workflow. Whether it's learning something new, writing code, researching a topic, or building a project, there is an AI tool for almost everything.&lt;/p&gt;

&lt;p&gt;But one question I often ask myself is: &lt;strong&gt;Should I use the same AI model for every task?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxiezsrd9r2cezgrglx89.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxiezsrd9r2cezgrglx89.gif" alt=" " width="414" height="413"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After experimenting with ChatGPT, Gemini, Claude, DeepSeek, Grok, and Perplexity, I've realised that I don't need one model that does everything. I need the right tool for the task I'm working on.&lt;/p&gt;

&lt;p&gt;Here's how I approach that decision.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. I Don't Look for One Perfect AI Model
&lt;/h2&gt;

&lt;p&gt;As a student, developer, and everyday AI user, I use AI for quite different things:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Learning difficult concepts.&lt;/li&gt;
&lt;li&gt;Writing and debugging code.&lt;/li&gt;
&lt;li&gt;Building applications and hackathon projects.&lt;/li&gt;
&lt;li&gt;Researching technical topics.&lt;/li&gt;
&lt;li&gt;Writing blogs and documentation.&lt;/li&gt;
&lt;li&gt;Generating images and videos.&lt;/li&gt;
&lt;li&gt;Quick troubleshooting and everyday questions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Naturally, I don't expect one model to be equally useful for everything.&lt;/p&gt;

&lt;p&gt;Instead of asking which model is the best, I ask:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Which model or tool can handle my current task better?&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  2. My Task-to-Tool Approach
&lt;/h2&gt;

&lt;p&gt;Here is my personal starting point when choosing AI tools.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Task&lt;/th&gt;
&lt;th&gt;My usual choice&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Learning concepts&lt;/td&gt;
&lt;td&gt;ChatGPT&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Coding and debugging&lt;/td&gt;
&lt;td&gt;Claude&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Building projects&lt;/td&gt;
&lt;td&gt;Antigravity or Replit&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Research&lt;/td&gt;
&lt;td&gt;Perplexity&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Writing&lt;/td&gt;
&lt;td&gt;Compare different models&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Image generation&lt;/td&gt;
&lt;td&gt;ChatGPT&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Video generation&lt;/td&gt;
&lt;td&gt;Google Flow&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Quick troubleshooting&lt;/td&gt;
&lt;td&gt;ChatGPT&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Everyday questions&lt;/td&gt;
&lt;td&gt;ChatGPT or Gemini&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;These are my personal preferences, not universal recommendations. I still compare results when a task is important.&lt;/p&gt;

&lt;p&gt;Also, some of these are tools or development environments rather than AI models themselves. I choose based on the complete workflow, not just the model name.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. My AI Model Selection Scorecard
&lt;/h2&gt;

&lt;p&gt;Before choosing a tool, I consider a few things:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Factor&lt;/th&gt;
&lt;th&gt;What I check&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Accuracy&lt;/td&gt;
&lt;td&gt;Does it provide reliable answers?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Reasoning&lt;/td&gt;
&lt;td&gt;Can it understand complicated problems?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ease of use&lt;/td&gt;
&lt;td&gt;Can I get the result without unnecessary effort?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cost&lt;/td&gt;
&lt;td&gt;Can I complete the task within my available budget?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Speed&lt;/td&gt;
&lt;td&gt;Can it deliver results within my deadline?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Privacy&lt;/td&gt;
&lt;td&gt;Am I comfortable sharing this information?&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;I don't give every factor equal importance.&lt;/p&gt;

&lt;p&gt;For example, during a hackathon, speed and reliability become extremely important because time is limited. When learning mathematics, accuracy and clear reasoning matter much more.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The task decides the priorities.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Real Experiences That Changed My Approach
&lt;/h2&gt;

&lt;p&gt;I've experienced several situations where switching AI tools made a noticeable difference.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Research:&lt;/strong&gt; I once compared ChatGPT and Perplexity for research. I found Perplexity's results more useful for that particular research task.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Coding:&lt;/strong&gt; During a hackathon project, I tried Gemini and Claude while working on code. Claude gave me a more useful result for the problem I was solving.&lt;/p&gt;

&lt;p&gt;These experiences taught me something important: a model that works well for one task might not be my first choice for another.&lt;/p&gt;

&lt;p&gt;I don't consider these permanent rankings. Models improve, and results can change depending on the task and prompt.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Your Prompt Matters More Than You Think
&lt;/h2&gt;

&lt;p&gt;Choosing the right model is only half the work. How you communicate your requirements matters too.&lt;/p&gt;

&lt;p&gt;I experienced this while creating a study planner.&lt;/p&gt;

&lt;p&gt;My initial approach was to give a broad instruction and expect the AI to understand everything. The result wasn't detailed enough.&lt;/p&gt;

&lt;p&gt;Instead, I started providing clearer requirements.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Weak prompt:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Create a study planner for me.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Improved prompt:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Create a weekly study planner for a college student. Divide the schedule into college hours, academic revision, programming practice, and personal time. Include realistic study durations, short breaks, and a separate revision slot. Present the result in a clear timetable.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I also use this approach when learning mathematics.&lt;/p&gt;

&lt;p&gt;Instead of asking for a complete explanation in one vague prompt, I specify that I want one topic explained fully, with a simple example, and then move to the next topic separately.&lt;/p&gt;

&lt;p&gt;The result is usually much easier to follow.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Common Mistakes When Choosing AI Models
&lt;/h2&gt;

&lt;p&gt;Here are a few mistakes I think beginners should avoid:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Following popularity:&lt;/strong&gt; A popular model isn't automatically the best choice for your task.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Using only one model:&lt;/strong&gt; Different tools have different strengths.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ignoring the prompt:&lt;/strong&gt; Even a capable model can produce a weak answer when instructions are unclear.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Trusting everything:&lt;/strong&gt; Always verify important information, especially technical and factual answers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ignoring limitations:&lt;/strong&gt; Cost, privacy, speed, and context limits matter.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Comparing without a purpose:&lt;/strong&gt; Test models using the same task and requirements instead of comparing random answers.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;I don't think choosing an AI model should be about finding one permanent winner.&lt;/p&gt;

&lt;p&gt;My approach is simple: understand the task, identify what matters most, choose a suitable tool, and compare the results when necessary.&lt;/p&gt;

&lt;p&gt;You don't have to use every new AI model that launches. Experiment with a few, understand their strengths, and build your own workflow.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The goal isn't to use more AI tools. It's to get better results with the right ones.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;What about you?&lt;/p&gt;

&lt;p&gt;Do you stick to one AI model, or do you switch between ChatGPT, Claude, Gemini, Perplexity, and other tools depending on the task?&lt;/p&gt;

&lt;p&gt;I'd love to hear how you choose your AI tools!&lt;/p&gt;

</description>
      <category>ai</category>
      <category>beginners</category>
      <category>productivity</category>
      <category>prompting</category>
    </item>
    <item>
      <title>Aayojan Ace: Building an AI-Powered Event Planner That Adapts When Plans Change</title>
      <dc:creator>Nilesh H. Thipe</dc:creator>
      <pubDate>Wed, 28 Oct 2026 08:19:11 +0000</pubDate>
      <link>https://dev.to/nileshthipe/aayojan-ace-building-an-ai-powered-event-planner-that-adapts-when-plans-change-2b4e</link>
      <guid>https://dev.to/nileshthipe/aayojan-ace-building-an-ai-powered-event-planner-that-adapts-when-plans-change-2b4e</guid>
      <description>&lt;p&gt;Planning a celebration should be about creating memories. But behind every wedding, birthday, or community event is a long list of decisions involving budgets, guests, vendors, deadlines, and last-minute changes.&lt;/p&gt;

&lt;p&gt;What happens when the budget changes halfway through planning? What if the guest count increases or the event date moves? A plan that looked perfect yesterday can quickly become difficult to manage.&lt;/p&gt;

&lt;p&gt;That was the problem I wanted to explore while building Aayojan Ace, an AI-powered celebration and event planning assistant developed for PromptWars Virtual Challenge 5: Celebration &amp;amp; Event Planner.&lt;/p&gt;

&lt;p&gt;🎥 Watch the project demo: &lt;a href="https://youtu.be/uXINb5E6vwg" rel="noopener noreferrer"&gt;https://youtu.be/uXINb5E6vwg&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🌐 Live Demo: &lt;a href="https://ayojan-ace.vercel.app/" rel="noopener noreferrer"&gt;https://ayojan-ace.vercel.app/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;💻 GitHub Repository: &lt;a href="https://github.com/nilesh0199/ayojan_ace_promptwars_virtual_challenge5" rel="noopener noreferrer"&gt;https://github.com/nilesh0199/ayojan_ace_promptwars_virtual_challenge5&lt;/a&gt;&lt;br&gt;
The Problem I Wanted to Solve&lt;br&gt;
Event planning involves several connected parts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Managing a budget across different categories&lt;/li&gt;
&lt;li&gt;Organizing tasks and deadlines&lt;/li&gt;
&lt;li&gt;Coordinating vendors and bookings&lt;/li&gt;
&lt;li&gt;Creating ideas that match the event's style and cultural requirements&lt;/li&gt;
&lt;li&gt;Identifying potential risks before they become problems
These things don't work independently. Increasing the guest count can affect catering costs, seating arrangements, and the overall budget. Changing the event date can affect deadlines and the order in which tasks need to be completed.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I wanted to build something that could help users manage these connected decisions instead of simply generating a generic event checklist.&lt;br&gt;
Introducing Aayojan Ace&lt;br&gt;
Aayojan Ace turns a user's event requirements into a structured celebration plan.&lt;/p&gt;

&lt;p&gt;Users provide details such as the event type, location, date, guest count, budget, preferred style, and important requirements. The application then generates a plan with budget estimates, a timeline, vendor checklists, personalized ideas, and operational risk considerations.&lt;/p&gt;

&lt;p&gt;It supports weddings, birthdays, and community gatherings, including culturally relevant presets such as Indian weddings, Griha Pravesh, Diwali community gatherings, and college annual festivals.&lt;/p&gt;

&lt;p&gt;The goal is simple: help users move from an idea to a plan they can actually work with.&lt;br&gt;
Key Features&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;AI-Powered Event Planning
Users shouldn't have to answer an overwhelming number of questions before getting started.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Aayojan Ace uses Google Gemini to generate personalized event plans based on the information provided. When important details are missing or contradictory, the application can ask adaptive clarification questions before generating the plan.&lt;/p&gt;

&lt;p&gt;This helps make the resulting plan more relevant to the user's requirements.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Budget-Aware Replanning
This is one of the most important parts of the project.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Imagine planning a celebration with a fixed budget, only to discover that you need to accommodate more guests. Simply generating a new plan isn't enough. You also need to understand what changed and what those changes mean.&lt;/p&gt;

&lt;p&gt;Aayojan Ace supports budget-aware replanning. When users change the budget, guest count, event date, or a category allocation, Gemini can generate proposed adjustments to the affected parts of the plan.&lt;/p&gt;

&lt;p&gt;The application presents a before-and-after comparison, explains why the changes are suggested, and provides trade-off options. Users can accept or reject the proposed changes, with an undoable version history.&lt;/p&gt;

&lt;p&gt;The intention is to make AI-assisted planning more transparent, rather than silently replacing an existing plan.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Interactive Timelines With Assigned Owners
A plan is only useful when people know what needs to happen and when.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The timeline organizes milestones into phases:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Now&lt;/li&gt;
&lt;li&gt;Next 7 days&lt;/li&gt;
&lt;li&gt;Next 30 days&lt;/li&gt;
&lt;li&gt;Event week&lt;/li&gt;
&lt;li&gt;Event day
Each milestone includes a due date, an assigned owner or assignee, a linked budget category, and an interactive completion checkbox.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I also added timeline date reflow, which helps adjust milestone dates when the event schedule changes. Users can export the timeline as an .ics calendar file for use with compatible calendar applications.&lt;/p&gt;

&lt;p&gt;Adding assignees makes the timeline more useful for coordination because tasks have a visible owner instead of being just another item on a checklist.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Vendor Checklists
Finding a vendor is only one part of the process. Users also need to track conversations, quotations, bookings, and contracts.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Aayojan Ace includes vendor screening checklists with statuses such as shortlisted, contacted, quoted, booked, and contract received.&lt;/p&gt;

&lt;p&gt;An important design decision here is to avoid presenting invented vendor details as real recommendations. The application focuses on vendor categories and useful screening questions, encouraging users to verify prices, availability, and agreements directly with vendors.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Personalized Celebration Ideas
Different celebrations have different cultural, dietary, and practical requirements.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The personalized ideas section helps generate concepts tailored to the user's preferences, including decoration ideas, menus, cultural elements, and guest activities.&lt;/p&gt;

&lt;p&gt;The aim is to make the plan feel relevant to the celebration instead of returning the same generic suggestions for every event.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Operational Risk Assessment
A successful event also depends on anticipating potential problems.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Aayojan Ace includes a risk assessment workflow covering considerations such as seasonal weather, permit requirements, dietary cross-contamination, payment milestones, and dependencies that could disrupt the event.&lt;/p&gt;

&lt;p&gt;The application helps surface these considerations so users can investigate them and plan appropriate mitigations.&lt;/p&gt;

&lt;p&gt;These assessments are planning assistance, not a substitute for verifying local regulations, vendor commitments, or other real-world requirements.&lt;br&gt;
How I Used Google Gemini&lt;br&gt;
Google Gemini is the core generative AI service in Aayojan Ace.&lt;/p&gt;

&lt;p&gt;Rather than using a single prompt for every operation, the application separates AI workflows according to their purpose:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Plan generation: Produces the initial event plan, including budget categories, timeline tasks, vendor types, and personalized ideas.&lt;/li&gt;
&lt;li&gt;Adaptive clarification: Identifies missing or contradictory information and asks focused follow-up questions.&lt;/li&gt;
&lt;li&gt;Budget-aware replanning: Proposes targeted changes when event requirements change.&lt;/li&gt;
&lt;li&gt;Operational risk assessment: Identifies potential risks and suggests mitigations.
The application uses the official @google/genai SDK through server-side route handlers. Generated responses are validated against Zod schemas before being used by the application.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This separation makes the different workflows easier to reason about and helps keep generated data aligned with the application's expected structure.&lt;/p&gt;

&lt;p&gt;AI output still needs validation and real-world verification. Budget estimates are planning estimates, not guaranteed vendor quotations.&lt;br&gt;
The Technology Behind the Project&lt;br&gt;
Here are the main technologies used in Aayojan Ace:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Next.js and React: Application interface and server-side API routes&lt;/li&gt;
&lt;li&gt;TypeScript: Type safety across the codebase&lt;/li&gt;
&lt;li&gt;Google Gemini API: AI-powered planning, clarification, replanning, and risk assessment&lt;/li&gt;
&lt;li&gt;Zod: Structured validation of generated data&lt;/li&gt;
&lt;li&gt;Firebase Authentication: Google sign-in&lt;/li&gt;
&lt;li&gt;Cloud Firestore: Storage for users' saved plans&lt;/li&gt;
&lt;li&gt;Vercel: Application deployment&lt;/li&gt;
&lt;li&gt;Google Antigravity: AI-powered development environment used to build and iterate on the application
The application separates user interface components, business logic, and network operations. This keeps planning calculations and other reusable logic separate from the presentation layer.
Building With Google Antigravity
Aayojan Ace was built as part of PromptWars Virtual Challenge 5, where Google Antigravity is a required part of the challenge.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I used Antigravity as an AI-powered development assistant while building and refining the application, testing workflows, and iterating on the implementation.&lt;/p&gt;

&lt;p&gt;One of the things I wanted to focus on was not just getting an AI-generated plan on the screen, but building a complete workflow around it: structured data, budget calculations, editable timelines, proposed changes, and clear user controls.&lt;/p&gt;

&lt;p&gt;That distinction matters when working with AI-powered applications. Generating a plausible response is one thing; making that response useful inside a working product requires additional application logic and validation.&lt;br&gt;
What I Learned&lt;br&gt;
Building Aayojan Ace reinforced a few important lessons for me.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;AI features need a well-designed workflow.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A model can generate useful content, but the surrounding application determines how that content is validated, presented, edited, and used.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Changes should be understandable, not just automatic.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;When a plan changes, showing what changed and why helps users make informed decisions. Providing the option to accept or reject proposed changes also keeps the user in control.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Real-world problems are connected systems.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A change to the event date, guest count, or budget can affect multiple parts of a plan. Building around those relationships is more useful than treating every feature as an isolated screen.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Small coordination details matter.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Features such as task assignees, completion tracking, and calendar export may not look as impressive as AI generation, but they help turn a generated plan into something people can use.&lt;br&gt;
Try Aayojan Ace&lt;br&gt;
Want to see the application in action?&lt;/p&gt;

&lt;p&gt;🎥 YouTube Demo: &lt;a href="https://youtu.be/uXINb5E6vwg" rel="noopener noreferrer"&gt;https://youtu.be/uXINb5E6vwg&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🌐 Live Application: &lt;a href="https://ayojan-ace.vercel.app/" rel="noopener noreferrer"&gt;https://ayojan-ace.vercel.app/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;💻 Source Code: &lt;a href="https://github.com/nilesh0199/ayojan_ace_promptwars_virtual_challenge5" rel="noopener noreferrer"&gt;https://github.com/nilesh0199/ayojan_ace_promptwars_virtual_challenge5&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I'd love to hear your thoughts. If you were building an AI-powered event planner, what would you prioritize: smarter budget adjustments, better task coordination, or more personalized recommendations?&lt;/p&gt;

&lt;p&gt;A sincere thank you to Hack2Skill and Google for Developers for organizing PromptWars Virtual and providing builders with an opportunity to experiment, learn, and turn ideas into working applications.&lt;/p&gt;

&lt;p&gt;Thanks for reading!&lt;/p&gt;

&lt;h1&gt;
  
  
  PromptWars #BuildInPublic #GoogleForDevelopers
&lt;/h1&gt;

</description>
      <category>ai</category>
      <category>devchallenge</category>
      <category>softwaredevelopment</category>
    </item>
    <item>
      <title>Before You Pay for That Internship: Building OfferClara with Wispr Flow | No Hands: The Wispr Challenge by WeMakeDevs and Wispr Flow</title>
      <dc:creator>Nilesh H. Thipe</dc:creator>
      <pubDate>Sun, 25 Oct 2026 18:19:09 +0000</pubDate>
      <link>https://dev.to/nileshthipe/before-you-pay-for-that-internship-building-offerclara-with-wispr-flow-no-2n3e</link>
      <guid>https://dev.to/nileshthipe/before-you-pay-for-that-internship-building-offerclara-with-wispr-flow-no-2n3e</guid>
      <description>&lt;p&gt;Imagine receiving an internship offer that looks perfect. The role sounds interesting, the stipend looks good, and the recruiter says your selection is confirmed.&lt;/p&gt;

&lt;p&gt;Then comes one last requirement: pay a registration fee or training charge to secure your seat.&lt;/p&gt;

&lt;p&gt;Would you pay? Would you trust the message? Or would you know what to check before replying?&lt;/p&gt;

&lt;p&gt;For students and first-time job seekers, these situations can be difficult to judge. When you're trying to get your first internship, you might not have enough experience to recognise suspicious requests or know which details to verify.&lt;/p&gt;

&lt;p&gt;That was the problem I wanted to work on when I started building &lt;strong&gt;OfferClara&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://offerclara-wisprflow.vercel.app/" rel="noopener noreferrer"&gt;Try OfferClara&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%2Fvx8l9ykb772avalwrulg.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%2Fvx8l9ykb772avalwrulg.png" alt=" " width="800" height="451"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I chose this problem
&lt;/h2&gt;

&lt;p&gt;I'm a college student myself, so this is a problem I can relate to. I've seen suspicious job offers and internship messages being shared among students, including in college group chats.&lt;/p&gt;

&lt;p&gt;The problem isn't always that a message looks obviously fake. Sometimes it looks professional enough to make you hesitate before questioning it. A recruiter might use formal language, promise a good opportunity, or create urgency by asking you to complete everything within a short deadline.&lt;/p&gt;

&lt;p&gt;Students may be asked for training fees, registration charges, security deposits, or sensitive identity documents before they've independently verified the opportunity.&lt;/p&gt;

&lt;p&gt;I wanted to build something that could help people slow down and look at an offer more carefully.&lt;/p&gt;

&lt;p&gt;Not another tool that simply declares, "This is a scam."&lt;/p&gt;

&lt;p&gt;I wanted a tool that could show people &lt;strong&gt;what deserves a second look, what information is missing, and what they should verify next.&lt;/strong&gt;&lt;/p&gt;

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

&lt;h2&gt;
  
  
  What is OfferClara?
&lt;/h2&gt;

&lt;p&gt;OfferClara is an AI-assisted offer review tool for students and first-time job seekers. It helps users review job and internship communications before paying money or sharing sensitive documents.&lt;/p&gt;

&lt;p&gt;The name combines &lt;em&gt;Offer&lt;/em&gt; with &lt;em&gt;Clara&lt;/em&gt;, representing clarity. The idea is simple: make confusing offers easier to understand.&lt;/p&gt;

&lt;p&gt;I wanted the experience to feel straightforward, even for someone who isn't familiar with technical terms or AI tools.&lt;/p&gt;

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

&lt;p&gt;Instead of asking users to paste a message and immediately showing them a verdict, OfferClara guides them through a structured review.&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%2Fmv6gephmano1z7ppsa1m.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%2Fmv6gephmano1z7ppsa1m.png" alt=" " width="800" height="451"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Add the offer&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Users can paste or type the text of an offer, or upload screenshots and PDFs. The extracted text can be reviewed and edited before analysis.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Explain where it came from&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Was the offer received through email, LinkedIn, WhatsApp, Telegram, a campus placement channel, or a job portal? Did the candidate actually apply for the role? This context can help frame the review.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Describe the conversation&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Sometimes important details aren't written in the offer letter. A recruiter might have made a promise over a phone call or explained something during an interview. Users can describe those conversations in their own words.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Identify money or documents being requested&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Users can record whether the recruiter asked for training fees, a security deposit, equipment charges, or sensitive identity documents.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Review and analyse&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Before submitting, users can review the information they've entered. OfferClara then produces a structured review that highlights potential concerns, missing employment details, and questions worth asking the recruiter.&lt;/p&gt;

&lt;p&gt;The analysis results also include a &lt;strong&gt;structured prompt for company research&lt;/strong&gt;. Users can use it to investigate the company further, verify important details, and conduct their own research before deciding whether to trust an offer.&lt;/p&gt;

&lt;p&gt;The idea is to go beyond simply flagging suspicious wording. I want users to have a practical next step: understand the concerns, investigate the employer, and verify the opportunity independently.&lt;/p&gt;

&lt;p&gt;The goal isn't to make the decision for the user. It's to help them ask better questions before making a decision themselves.&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%2F0olnqai13a265mf2q0gh.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%2F0olnqai13a265mf2q0gh.png" alt=" " width="800" height="452"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://youtu.be/uXINb5E6vwg" rel="noopener noreferrer"&gt;Watch the project demo on YouTube&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  I wanted the tool to explain its reasoning
&lt;/h2&gt;

&lt;p&gt;One design decision mattered to me: I didn't want users to receive a mysterious AI-generated score without understanding where it came from.&lt;/p&gt;

&lt;p&gt;OfferClara connects its observations to exact quotations from the supplied text. For example, if an offer requests a training fee before the internship begins, the review can show the relevant sentence and explain why it deserves attention.&lt;/p&gt;

&lt;p&gt;The application also separates two things that are easy to confuse:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;What the offer actually says:&lt;/strong&gt; statements and requests found in the provided text.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;What the offer leaves unclear:&lt;/strong&gt; details such as compensation, working hours, duration, or other important employment terms that may be missing.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That distinction matters. Missing information isn't automatically proof of fraud, and a professional-looking document isn't proof of legitimacy.&lt;/p&gt;

&lt;p&gt;The implementation also validates quoted evidence against the original text before displaying it. If a model produces a quotation that doesn't match the user's input, the application can discard that finding rather than presenting it as evidence.&lt;/p&gt;

&lt;p&gt;This is one of the most important parts of the project for me. When an AI tool is helping someone make a potentially important decision, its limitations matter just as much as its capabilities.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where Wispr Flow changed my development workflow
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkjfajfdthjem6vdz0e5b.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%2Fkjfajfdthjem6vdz0e5b.png" alt=" " width="800" height="560"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This project was built for &lt;strong&gt;No Hands: The Wispr Challenge&lt;/strong&gt;, organised by WeMakeDevs and Wispr Flow.&lt;/p&gt;

&lt;p&gt;The challenge encouraged builders to use their voices for the building process: describing requirements, prompting coding tools, writing documentation, and communicating as they worked.&lt;/p&gt;

&lt;p&gt;I decided to treat Wispr Flow as part of my regular workflow rather than something to demonstrate only at the end.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Speaking my development prompts
&lt;/h3&gt;

&lt;p&gt;While building OfferClara, I used Wispr Flow to dictate prompts and follow-up instructions into my AI coding workflow.&lt;/p&gt;

&lt;p&gt;When working on a feature, I often needed to explain several things together: what the interface should do, how a user should move through it, what edge cases to consider, and what shouldn't change.&lt;/p&gt;

&lt;p&gt;Speaking those requirements felt more convenient than typing every detail manually. I could explain the intended behaviour in natural language and then review the resulting text before sending it to the coding assistant.&lt;/p&gt;

&lt;p&gt;Wispr Flow handled the dictation. My coding tool handled implementation, and I still had to review the changes and test the application.&lt;/p&gt;

&lt;p&gt;That distinction is important. Wispr Flow didn't build the project by itself; it changed how I communicated what I wanted to build.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Testing with realistic offer text
&lt;/h3&gt;

&lt;p&gt;Another useful moment came during testing.&lt;/p&gt;

&lt;p&gt;OfferClara depends on the text a user provides, so I needed to try realistic inputs rather than only neat, prepared examples. I used Wispr Flow to dictate offer text and other information directly into the application.&lt;/p&gt;

&lt;p&gt;This helped me experience the workflow from a user's perspective: enter information, review it, correct anything necessary, and then run the analysis.&lt;/p&gt;

&lt;p&gt;I also experimented with dictating questions into the &lt;em&gt;Clear Doubt with AI&lt;/em&gt; feature.&lt;/p&gt;

&lt;p&gt;It made me think more carefully about how someone might actually use the product. A person reviewing a suspicious message may want to explain a phone conversation in their own words or ask a question without carefully composing every sentence.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Asking friends to test the project
&lt;/h3&gt;

&lt;p&gt;I also wanted other people to try OfferClara instead of relying only on my own testing.&lt;/p&gt;

&lt;p&gt;I used Wispr Flow to draft the message inviting friends to test the application. It was a small task, but it was another practical use outside the coding environment.&lt;/p&gt;

&lt;p&gt;Across these activities, I found voice input quicker and more convenient for me than typing everything. I was also pleasantly surprised by how accurately Wispr Flow captured what I said. I ended up using it more than I initially expected.&lt;/p&gt;

&lt;p&gt;The biggest takeaway wasn't that speaking could replace every keyboard action. It was that I could explain a longer thought naturally, get it into the application I was using, and keep moving.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.wemakedevs.org/wispr" rel="noopener noreferrer"&gt;Learn more about the challenge&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  A few technical decisions behind OfferClara
&lt;/h2&gt;

&lt;p&gt;I built OfferClara as a web application using Next.js, React, TypeScript, and Tailwind CSS. It uses Google's Gemini API for offer analysis and document text extraction, with a model fallback approach for supported AI operations. Zod validates structured model output, and Vitest is used for automated testing. The application is deployed on Vercel.&lt;/p&gt;

&lt;p&gt;One of the more important engineering decisions was to avoid treating the language model as the final authority.&lt;/p&gt;

&lt;p&gt;The application validates evidence in code, separates observations from missing information, and avoids assigning a numerical risk score or declaring an offer safe or fraudulent. The user sees specific concerns and verification questions instead.&lt;/p&gt;

&lt;p&gt;I also built a &lt;em&gt;Clear Doubt with AI&lt;/em&gt; page for follow-up questions, a command box that supports natural-language interface commands, and a help and reporting page containing official resources.&lt;/p&gt;

&lt;p&gt;These features are intended to make the tool useful beyond a single analysis. Someone might want to understand a clause, navigate the application using a dictated command, or find out where to report a suspected scam.&lt;/p&gt;

&lt;h3&gt;
  
  
  Privacy needed careful thought, too
&lt;/h3&gt;

&lt;p&gt;People may paste offer letters containing names, email addresses, phone numbers, or other sensitive details. I didn't want OfferClara to require an account or maintain a saved history of those documents.&lt;/p&gt;

&lt;p&gt;The current application keeps the review session in temporary browser memory and doesn't persist offer text or uploaded files in a database. However, &lt;strong&gt;the text submitted for analysis is sent to the configured AI provider&lt;/strong&gt;, so users should read the privacy notice and avoid submitting information they aren't comfortable sharing with that provider.&lt;/p&gt;

&lt;p&gt;I think privacy explanations should be clear enough that people can make an informed choice before using a tool.&lt;/p&gt;

&lt;h2&gt;
  
  
  What OfferClara cannot do
&lt;/h2&gt;

&lt;p&gt;Building this project also meant being clear about what it doesn't solve.&lt;/p&gt;

&lt;p&gt;OfferClara analyses the content provided by the user. It cannot independently confirm that the recruiter is who they claim to be, authenticate an email address, verify a company's identity, or know what was said in a conversation unless the user describes it.&lt;/p&gt;

&lt;p&gt;It can also miss unusual scam patterns or misinterpret ambiguous text. Document extraction can introduce errors, especially when screenshots are unclear. A review with no identified concerns must not be treated as proof that an offer is legitimate.&lt;/p&gt;

&lt;p&gt;For that reason, OfferClara is a decision-support tool, not a guarantee, a background-check service, or legal advice. Users should verify offers independently through official company channels and consult official reporting resources if they suspect fraud.&lt;/p&gt;

&lt;p&gt;I would rather make those limitations clear than promise something the tool cannot reliably deliver.&lt;/p&gt;

&lt;p&gt;What I learned from building it&lt;/p&gt;

&lt;p&gt;This project reminded me that building a useful tool involves more than getting an AI model to return an answer.&lt;/p&gt;

&lt;p&gt;The workflow around that answer matters. The evidence shown to a user matters. Missing information matters. And so does making it clear when the application cannot know something.&lt;/p&gt;

&lt;p&gt;I also learned to pay attention to the smaller parts of development: describing a feature clearly, trying realistic input, asking someone else to test it, and revisiting behaviour that doesn't feel right.&lt;/p&gt;

&lt;p&gt;Using Wispr Flow throughout those activities made voice dictation a practical part of my process, not just a feature to mention in a hackathon submission.&lt;/p&gt;

&lt;p&gt;There is still room to improve OfferClara. I want to expand its coverage of job-offer scenarios, improve support for different types of employment clauses, explore regional-language guidance, and continue testing the experience with more users. These are future improvements, not claims about features already completed.&lt;/p&gt;

&lt;p&gt;Try OfferClara&lt;/p&gt;

&lt;p&gt;If you're a student or a first-time job seeker, I hope OfferClara can help you pause, review an offer, and decide what to verify before sending money or sharing sensitive documents.&lt;/p&gt;

&lt;p&gt;Live project: &lt;a href="https://offerclara-wisprflow.vercel.app/" rel="noopener noreferrer"&gt;https://offerclara-wisprflow.vercel.app/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;GitHub repository: &lt;a href="https://github.com/nilesh0199/OfferClara-WisprFlow-Hackathon" rel="noopener noreferrer"&gt;https://github.com/nilesh0199/OfferClara-WisprFlow-Hackathon&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Demo video: &lt;a href="https://youtu.be/uXINb5E6vwg" rel="noopener noreferrer"&gt;https://youtu.be/uXINb5E6vwg&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Hackathon details: &lt;a href="https://www.wemakedevs.org/wispr" rel="noopener noreferrer"&gt;https://www.wemakedevs.org/wispr&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Connect with me on LinkedIn: &lt;a href="https://www.linkedin.com/in/nilesh-h-thipe-372291253/" rel="noopener noreferrer"&gt;https://www.linkedin.com/in/nilesh-h-thipe-372291253/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I used Wispr Flow to dictate development prompts, enter test content, and draft messages while building and testing OfferClara. I also used AI-assisted coding tools during development and Gemini API for the application's offer analysis. I reviewed and tested the implementation as I built the project.&lt;/p&gt;

&lt;p&gt;A special thank you to &lt;strong&gt;Wispr Flow&lt;/strong&gt; for providing us with a one-month free trial of the Wispr Flow Pro plan. It gave me the opportunity to explore its features and use voice dictation throughout my development and testing workflow. Thank you to &lt;strong&gt;WeMakeDevs and Wispr Flow&lt;/strong&gt; for organising this challenge and giving us the opportunity to build, experiment, and learn.&lt;/p&gt;

&lt;p&gt;For me, OfferClara is a small attempt to use technology to help students make more informed decisions.&lt;/p&gt;

&lt;p&gt;An AI tool doesn't need to make the final decision for someone. Sometimes, helping them notice what to question before they act is already a useful place to start.&lt;/p&gt;

&lt;p&gt;Understand the offer. Know what to verify. Make every offer clear.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I learned from building it
&lt;/h2&gt;

&lt;p&gt;This project reminded me that building a useful tool involves more than getting an AI model to return an answer.&lt;/p&gt;

&lt;p&gt;The workflow around that answer matters. The evidence shown to a user matters. Missing information matters. And so does making it clear when the application cannot know something.&lt;/p&gt;

&lt;p&gt;I also learned to pay attention to the smaller parts of development: describing a feature clearly, trying realistic input, asking someone else to test it, and revisiting behaviour that doesn't feel right.&lt;/p&gt;

&lt;p&gt;Using Wispr Flow throughout those activities made voice dictation a practical part of my process, not just a feature to mention in a hackathon submission.&lt;/p&gt;

&lt;p&gt;There is still room to improve OfferClara. I want to expand its coverage of job-offer scenarios, improve support for different types of employment clauses, explore regional-language guidance, and continue testing the experience with more users. These are future improvements, not claims about features already completed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try OfferClara
&lt;/h2&gt;

&lt;p&gt;If you're a student or a first-time job seeker, I hope OfferClara can help you pause, review an offer, and decide what to verify before sending money or sharing sensitive documents.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Live project:&lt;/strong&gt; &lt;a href="https://offerclara-wisprflow.vercel.app/" rel="noopener noreferrer"&gt;https://offerclara-wisprflow.vercel.app/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitHub repository:&lt;/strong&gt; &lt;a href="https://github.com/nilesh0199/OfferClara-WisprFlow-Hackathon" rel="noopener noreferrer"&gt;https://github.com/nilesh0199/OfferClara-WisprFlow-Hackathon&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Demo video:&lt;/strong&gt; &lt;a href="https://youtu.be/uXINb5E6vwg" rel="noopener noreferrer"&gt;https://youtu.be/uXINb5E6vwg&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hackathon details:&lt;/strong&gt; &lt;a href="https://www.wemakedevs.org/wispr" rel="noopener noreferrer"&gt;https://www.wemakedevs.org/wispr&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Connect with me on LinkedIn:&lt;/strong&gt; &lt;a href="https://www.linkedin.com/in/nilesh-h-thipe-372291253/" rel="noopener noreferrer"&gt;https://www.linkedin.com/in/nilesh-h-thipe-372291253/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A big thank you to &lt;strong&gt;Wispr Flow and WeMakeDevs&lt;/strong&gt; for creating this challenge and giving builders an opportunity to experiment with a voice-first workflow.&lt;/p&gt;

&lt;p&gt;For me, OfferClara is a small attempt to use technology to help students make more informed decisions.&lt;/p&gt;

&lt;p&gt;An AI tool doesn't need to make the final decision for someone. Sometimes, helping them notice what to question before they act is already a useful place to start.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Understand the offer. Know what to verify. Make every offer clear.&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>wemakedevs</category>
      <category>wisprflow</category>
      <category>hackathon</category>
      <category>prompting</category>
    </item>
    <item>
      <title>A Metro Closure Is a Graph Problem: Building MetroMarg with FalkorDB</title>
      <dc:creator>Nilesh H. Thipe</dc:creator>
      <pubDate>Sun, 18 Oct 2026 16:42:06 +0000</pubDate>
      <link>https://dev.to/nileshthipe/a-metro-closure-is-a-graph-problem-building-metromarg-with-falkordb-52j6</link>
      <guid>https://dev.to/nileshthipe/a-metro-closure-is-a-graph-problem-building-metromarg-with-falkordb-52j6</guid>
      <description>&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt; MetroMarg is an AI agent that uses a FalkorDB graph of the Delhi Metro to answer one question: &lt;em&gt;How did the closure of 45 stations on 9–10 October 2026 affect travel to Jantar Mantar?&lt;/em&gt; Each answer includes the route and the queries behind it.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Live demo:&lt;/strong&gt; &lt;a href="https://metromarg-graphhacks-2026.onrender.com/" rel="noopener noreferrer"&gt;https://metromarg-graphhacks-2026.onrender.com/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Demo video:&lt;/strong&gt; &lt;a href="https://youtu.be/gkXa_tMcAOI" rel="noopener noreferrer"&gt;https://youtu.be/gkXa_tMcAOI&lt;/a&gt; (best viewed in 1080p)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Code:&lt;/strong&gt; &lt;a href="https://github.com/nilesh0199/MetroMarg-GraphHacks-2026" rel="noopener noreferrer"&gt;https://github.com/nilesh0199/MetroMarg-GraphHacks-2026&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Built solo for &lt;strong&gt;Graph Hacks: Context for AI Agents&lt;/strong&gt; (WeMakeDevs × FalkorDB), &lt;strong&gt;Track 1: Agents That Act on Connected Data&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Note on speed: responses may take a minute or more. The model can be busy, and the free hosting plan may need time to wake after inactivity.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem
&lt;/h2&gt;

&lt;p&gt;On 9–10 October 2026, DMRC closed entry and exit at 45 Delhi Metro stations for security reasons ahead of a planned protest at Jantar Mantar. Business Today reported DMRC’s revised update; News On AIR reported that Delhi Police had proposed closures at 57 stations.&lt;/p&gt;

&lt;p&gt;“How do I get there now?” is more than a lookup. You need to know station connections, which stations are closed, where transfers remain possible, and which open station is nearest. The answer depends on relationships—and that is what graphs represent well.&lt;/p&gt;

&lt;h2&gt;
  
  
  My first time with RAG, and with FalkorDB
&lt;/h2&gt;

&lt;p&gt;I was new to both RAG and FalkorDB. I initially thought an AI agent needed retrieval: embed text, find similar chunks, and pass them to a model. But routes are spread across connected records, so retrieving nearby text is not enough.&lt;/p&gt;

&lt;p&gt;Instead, I stored the connections and let the agent query them. To be precise, MetroMarg is &lt;strong&gt;not classic RAG or GraphRAG&lt;/strong&gt;: it uses no embeddings or text chunks, and an LLM does not build the graph. It does share GraphRAG’s core idea of grounding answers in a graph, using fixed, human-written Cypher tools selected by the model. FalkorDB made this approach approachable for a first project.&lt;/p&gt;

&lt;h2&gt;
  
  
  The graph model
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cypher"&gt;&lt;code&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;:Station&lt;/span&gt; &lt;span class="ss"&gt;{&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="ss"&gt;,&lt;/span&gt; &lt;span class="n"&gt;lat&lt;/span&gt;&lt;span class="ss"&gt;,&lt;/span&gt; &lt;span class="n"&gt;lon&lt;/span&gt;&lt;span class="ss"&gt;})&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="ss"&gt;[&lt;/span&gt;&lt;span class="nc"&gt;:NEXT&lt;/span&gt; &lt;span class="ss"&gt;{&lt;/span&gt;&lt;span class="n"&gt;line&lt;/span&gt;&lt;span class="ss"&gt;,&lt;/span&gt; &lt;span class="n"&gt;minutes&lt;/span&gt;&lt;span class="ss"&gt;}]&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;:Station&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt;
&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;:Place&lt;/span&gt;   &lt;span class="ss"&gt;{&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="ss"&gt;,&lt;/span&gt; &lt;span class="n"&gt;lat&lt;/span&gt;&lt;span class="ss"&gt;,&lt;/span&gt; &lt;span class="n"&gt;lon&lt;/span&gt;&lt;span class="ss"&gt;})&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="ss"&gt;[&lt;/span&gt;&lt;span class="nc"&gt;:NEAR&lt;/span&gt; &lt;span class="ss"&gt;{&lt;/span&gt;&lt;span class="n"&gt;walk_min&lt;/span&gt;&lt;span class="ss"&gt;}]&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;:Station&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt;
&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;:Closure&lt;/span&gt; &lt;span class="ss"&gt;{&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="ss"&gt;,&lt;/span&gt; &lt;span class="n"&gt;date&lt;/span&gt;&lt;span class="ss"&gt;,&lt;/span&gt; &lt;span class="n"&gt;reason&lt;/span&gt;&lt;span class="ss"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sources&lt;/span&gt;&lt;span class="ss"&gt;})&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="ss"&gt;[&lt;/span&gt;&lt;span class="nc"&gt;:CLOSES&lt;/span&gt; &lt;span class="ss"&gt;{&lt;/span&gt;&lt;span class="n"&gt;interchange_open&lt;/span&gt;&lt;span class="ss"&gt;}]&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;:Station&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;DMRC’s timetable from Delhi Open Transit Data (262 stations and about 550 links) becomes &lt;code&gt;Station&lt;/code&gt; nodes and &lt;code&gt;NEXT&lt;/code&gt; links, with ride times from the timetable.&lt;/li&gt;
&lt;li&gt;Jantar Mantar is a &lt;code&gt;Place&lt;/code&gt;, connected to nearby stations with estimated walking times.&lt;/li&gt;
&lt;li&gt;The closure is also a graph node, so routing, search, and the “why were stations closed?” panel use the same record.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The reports establish two rules: passengers could not enter or exit at closed stations, but trains continued passing through. Transfers remained possible at affected stations, except New Delhi.&lt;/p&gt;

&lt;h2&gt;
  
  
  The model never writes Cypher
&lt;/h2&gt;

&lt;p&gt;The agent uses Gemini and chooses from five fixed, human-written tools, supplying their arguments.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;What it does&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;plan_trip_to_place&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Compares a ride-plus-walk trip normally and during the closure&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;access_to_place&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Finds nearby stations and marks closed ones&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;find_route&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Finds the fastest ride between two stations&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;station_impact&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Finds stations within N hops and marks closures&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;most_connected_stations&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Runs FalkorDB PageRank&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Three safeguards help keep answers grounded:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Every station name is checked against the graph before a query runs. Unknown names are rejected.&lt;/li&gt;
&lt;li&gt;The final sentence cannot name a station the tools did not return.&lt;/li&gt;
&lt;li&gt;Each answer displays the path and queries that produced it.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The live app uses Gemini function calling. The repository also exposes the same five tools through an MCP server.&lt;/p&gt;

&lt;h2&gt;
  
  
  Three queries that do the real work
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. A route with a transfer rule.&lt;/strong&gt; Trains can pass through closed stations, but transfers are allowed only where interchange remains open. This &lt;code&gt;WHERE&lt;/code&gt; clause enforces that rule:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cypher"&gt;&lt;code&gt;&lt;span class="k"&gt;MATCH&lt;/span&gt; &lt;span class="n"&gt;path&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="py"&gt;x:&lt;/span&gt;&lt;span class="n"&gt;Station&lt;/span&gt; &lt;span class="ss"&gt;{&lt;/span&gt;&lt;span class="py"&gt;name:&lt;/span&gt; &lt;span class="n"&gt;$a&lt;/span&gt;&lt;span class="ss"&gt;})&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="ss"&gt;[&lt;/span&gt;&lt;span class="nc"&gt;:NEXT&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="o"&gt;..&lt;/span&gt;&lt;span class="m"&gt;5&lt;/span&gt;&lt;span class="ss"&gt;]&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="py"&gt;y:&lt;/span&gt;&lt;span class="n"&gt;Station&lt;/span&gt; &lt;span class="ss"&gt;{&lt;/span&gt;&lt;span class="py"&gt;name:&lt;/span&gt; &lt;span class="n"&gt;$b&lt;/span&gt;&lt;span class="ss"&gt;})&lt;/span&gt;
&lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;all&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;IN&lt;/span&gt; &lt;span class="nf"&gt;range&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="ss"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;size&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;relationships&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="ss"&gt;))&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt;
          &lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;NOT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;nodes&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="ss"&gt;)[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="ss"&gt;]&lt;/span&gt;&lt;span class="n"&gt;.name&lt;/span&gt; &lt;span class="ow"&gt;IN&lt;/span&gt; &lt;span class="n"&gt;$no_transfer&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt;
             &lt;span class="ow"&gt;OR&lt;/span&gt; &lt;span class="nf"&gt;relationships&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="ss"&gt;)[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="ss"&gt;]&lt;/span&gt;&lt;span class="n"&gt;.line&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;relationships&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="ss"&gt;)[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="ss"&gt;]&lt;/span&gt;&lt;span class="n"&gt;.line&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;RETURN&lt;/span&gt; &lt;span class="ss"&gt;[&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="ow"&gt;IN&lt;/span&gt; &lt;span class="nf"&gt;nodes&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;n.name&lt;/span&gt;&lt;span class="ss"&gt;]&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;via&lt;/span&gt;&lt;span class="ss"&gt;,&lt;/span&gt;
       &lt;span class="nf"&gt;reduce&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="n"&gt;t&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="ss"&gt;,&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="ow"&gt;IN&lt;/span&gt; &lt;span class="nf"&gt;relationships&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;t&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;r.minutes&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;minutes&lt;/span&gt;
&lt;span class="k"&gt;ORDER&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="n"&gt;minutes&lt;/span&gt;
&lt;span class="k"&gt;LIMIT&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The query returns the ordered stations and total ride time, making the route itself part of the explanation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. The three nearest open stations, by distance:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cypher"&gt;&lt;code&gt;&lt;span class="k"&gt;MATCH&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="py"&gt;o:&lt;/span&gt;&lt;span class="n"&gt;Station&lt;/span&gt; &lt;span class="ss"&gt;{&lt;/span&gt;&lt;span class="py"&gt;name:&lt;/span&gt; &lt;span class="n"&gt;$name&lt;/span&gt;&lt;span class="ss"&gt;}),&lt;/span&gt; &lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="py"&gt;s:&lt;/span&gt;&lt;span class="n"&gt;Station&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;NOT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="n"&gt;s.name&lt;/span&gt; &lt;span class="ow"&gt;IN&lt;/span&gt; &lt;span class="n"&gt;$closed&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;RETURN&lt;/span&gt; &lt;span class="n"&gt;s.name&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;station&lt;/span&gt;&lt;span class="ss"&gt;,&lt;/span&gt;
       &lt;span class="n"&gt;distance&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="n"&gt;point&lt;/span&gt;&lt;span class="ss"&gt;({&lt;/span&gt;&lt;span class="py"&gt;latitude:&lt;/span&gt; &lt;span class="n"&gt;o.lat&lt;/span&gt;&lt;span class="ss"&gt;,&lt;/span&gt; &lt;span class="py"&gt;longitude:&lt;/span&gt; &lt;span class="n"&gt;o.lon&lt;/span&gt;&lt;span class="ss"&gt;}),&lt;/span&gt;
                &lt;span class="n"&gt;point&lt;/span&gt;&lt;span class="ss"&gt;({&lt;/span&gt;&lt;span class="py"&gt;latitude:&lt;/span&gt; &lt;span class="n"&gt;s.lat&lt;/span&gt;&lt;span class="ss"&gt;,&lt;/span&gt; &lt;span class="py"&gt;longitude:&lt;/span&gt; &lt;span class="n"&gt;s.lon&lt;/span&gt;&lt;span class="ss"&gt;}))&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;meters&lt;/span&gt;
&lt;span class="k"&gt;ORDER&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="n"&gt;meters&lt;/span&gt;
&lt;span class="k"&gt;LIMIT&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;3. A built-in algorithm in three lines:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cypher"&gt;&lt;code&gt;&lt;span class="k"&gt;CALL&lt;/span&gt; &lt;span class="n"&gt;algo.pageRank&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'Station'&lt;/span&gt;&lt;span class="ss"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'NEXT'&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;YIELD&lt;/span&gt; &lt;span class="n"&gt;node&lt;/span&gt;&lt;span class="ss"&gt;,&lt;/span&gt; &lt;span class="n"&gt;score&lt;/span&gt;
&lt;span class="k"&gt;RETURN&lt;/span&gt; &lt;span class="n"&gt;node.name&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;station&lt;/span&gt;&lt;span class="ss"&gt;,&lt;/span&gt; &lt;span class="n"&gt;score&lt;/span&gt; &lt;span class="k"&gt;ORDER&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="n"&gt;score&lt;/span&gt; &lt;span class="k"&gt;DESC&lt;/span&gt; &lt;span class="k"&gt;LIMIT&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;PageRank measures connectivity, not route quality. It highlighted major interchanges such as Kashmere Gate, Azadpur, and Welcome.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the graph showed
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;Walking times are estimated from straight-line distance. Ride times come from the 2023 timetable.&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The 12 stations nearest to Jantar Mantar—all within about 2.5 km—were among those closed to entry and exit.&lt;/li&gt;
&lt;li&gt;The nearest open station was Chandni Chowk, about 3.5 km away. Janpath is normally about 240 m away.&lt;/li&gt;
&lt;li&gt;From Chandni Chowk, the trip was about &lt;strong&gt;17.7 minutes normally&lt;/strong&gt; versus about &lt;strong&gt;60 minutes during the closure&lt;/strong&gt;, largely due to the long walk. Buses and taxis are not modelled, so this measures lost metro access rather than providing a travel recommendation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Six of the 10 most connected stations&lt;/strong&gt; by PageRank were closed.&lt;/li&gt;
&lt;li&gt;Trips that only passed through closed stations were unaffected because trains continued running and interchange remained open.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What I liked about FalkorDB
&lt;/h2&gt;

&lt;p&gt;These features stood out while I was learning:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Database plus browser UI:&lt;/strong&gt; FalkorDB Browser helped me inspect the graph before trusting my queries.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No schema setup:&lt;/strong&gt; the graph exists once you first write to it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Parameterized Cypher and read-only &lt;code&gt;ro_query&lt;/code&gt;:&lt;/strong&gt; model text is never concatenated into a query.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Algorithms through Cypher:&lt;/strong&gt; PageRank took three lines. Other listed options include shortest path, BFS, centrality, connected components, and community detection.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bulk loading:&lt;/strong&gt; I loaded the network in &lt;code&gt;UNWIND&lt;/code&gt; batches and indexed station names.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multiple isolated graphs:&lt;/strong&gt; &lt;code&gt;select_graph&lt;/code&gt; can separate graphs in one instance. I needed only one, but this could support per-user graphs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Same code locally and in the cloud:&lt;/strong&gt; I developed with Docker, then switched to FalkorDB Cloud by changing the host, port, and credentials.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Things that went wrong, and what I learned
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Different station names:&lt;/strong&gt; the press called one station Seva Teerth, while the 2023 timetable lists it as Udyog Bhawan. I added aliases so the name check can resolve both.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Incomplete station coverage:&lt;/strong&gt; two of the 45 closed stations were absent because they opened after the timetable was published. The graph models 43 of 45 and states this limitation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;An empty database after restart:&lt;/strong&gt; the app now rebuilds the graph from the timetable at startup.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;“Not in the graph” is a valid answer:&lt;/strong&gt; the agent says when it cannot verify something instead of guessing. That is more useful than always producing an answer.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Graph Hacks requirements, one by one
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Requirement&lt;/th&gt;
&lt;th&gt;How MetroMarg meets it&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Solo or team of up to 4&lt;/td&gt;
&lt;td&gt;Solo entry&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;FalkorDB as the primary database&lt;/td&gt;
&lt;td&gt;Stations, links, places, and closure records live in FalkorDB; every tool queries it with Cypher&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;The graph does real work&lt;/td&gt;
&lt;td&gt;Routes, transfer rules, nearest-open-station searches, and PageRank all depend on graph queries&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Run FalkorDB your way&lt;/td&gt;
&lt;td&gt;Docker locally and FalkorDB Cloud Free for the demo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Name your track&lt;/td&gt;
&lt;td&gt;Track 1: Agents That Act on Connected Data&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Use permitted data&lt;/td&gt;
&lt;td&gt;Public data: Delhi Open Transit Data’s timetable (copied with attribution under its terms) and press reports; no personal data&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Work starts after opening&lt;/td&gt;
&lt;td&gt;Designed and built after the hackathon opened on 15 October&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Frameworks and libraries allowed&lt;/td&gt;
&lt;td&gt;FastAPI, FalkorDB Python client, Gemini API, and MCP Python SDK&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Public source repository&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/nilesh0199/MetroMarg-GraphHacks-2026" rel="noopener noreferrer"&gt;https://github.com/nilesh0199/MetroMarg-GraphHacks-2026&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;README and graph data model&lt;/td&gt;
&lt;td&gt;Included, with a diagram&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Core Cypher and algorithms&lt;/td&gt;
&lt;td&gt;Listed in a README table&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Demo video&lt;/td&gt;
&lt;td&gt;&lt;a href="https://youtu.be/gkXa_tMcAOI" rel="noopener noreferrer"&gt;https://youtu.be/gkXa_tMcAOI&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Live deployment or local setup&lt;/td&gt;
&lt;td&gt;Both: Render deployment and local setup steps in the README&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AI use disclosed&lt;/td&gt;
&lt;td&gt;In the README, video description, and below&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Limitations
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;The timetable is from 2023; walking times are estimates.&lt;/li&gt;
&lt;li&gt;There is no live train data, and buses and taxis are not included.&lt;/li&gt;
&lt;li&gt;The agent is advisory: it suggests where to get off but takes no action outside the graph.&lt;/li&gt;
&lt;li&gt;Responses may be slow when the model is busy.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Credits and AI disclosure
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Data:&lt;/strong&gt; Delhi Open Transit Data (Department of Transport, GNCTD). This project is not endorsed by DMRC or the Department of Transport.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Closure details:&lt;/strong&gt; Business Today and News On AIR.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Design approach:&lt;/strong&gt; WeMakeDevs’ article &lt;em&gt;How to Build an Agent That Reasons Over a Graph&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Video:&lt;/strong&gt; Opening footage credited to Jist News; all rights belong to the original owner. Voiceover generated with ElevenLabs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI assistants:&lt;/strong&gt; I used Google Antigravity and Claude (Anthropic). Claude drafted most of the code through our conversations. I chose the problem, domain, and closure event; defined the neutrality rules; ran and tested the answers; and checked the sources.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;MetroMarg reports what DMRC and Delhi Police said and how the closure affected metro travel. It takes no position on the event itself.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>python</category>
      <category>falkordb</category>
      <category>graphhacks</category>
    </item>
  </channel>
</rss>
