<?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: Shujaur Rahman Haadi</title>
    <description>The latest articles on DEV Community by Shujaur Rahman Haadi (@shujahaadi).</description>
    <link>https://dev.to/shujahaadi</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%2F4157719%2Fda045119-3d61-45f4-ae42-5c66fa805afd.jpg</url>
      <title>DEV Community: Shujaur Rahman Haadi</title>
      <link>https://dev.to/shujahaadi</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/shujahaadi"/>
    <language>en</language>
    <item>
      <title>RepoPilot: Navigate Unfamiliar Codebases Without Getting Lost</title>
      <dc:creator>Shujaur Rahman Haadi</dc:creator>
      <pubDate>Sun, 25 Oct 2026 09:59:36 +0000</pubDate>
      <link>https://dev.to/shujahaadi/repopilot-navigate-unfamiliar-codebases-without-getting-lost-11f4</link>
      <guid>https://dev.to/shujahaadi/repopilot-navigate-unfamiliar-codebases-without-getting-lost-11f4</guid>
      <description>&lt;p&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-week3-2026-10-19"&gt;Hacktoberfest Open-Source AI Challenge Week 3: Slow and Steady&lt;/a&gt;.&lt;/p&gt;

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

&lt;p&gt;Have you ever discovered an interesting GitHub repository, wanted to understand how it works, and then spent hours jumping between files trying to figure out how everything connects?&lt;/p&gt;

&lt;p&gt;That's the problem I wanted to tackle with &lt;strong&gt;RepoPilot&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;RepoPilot is a repository analysis tool that helps developers explore unfamiliar codebases using Python static analysis, interactive function call graphs, and AI-generated insights.&lt;/p&gt;

&lt;p&gt;Instead of manually piecing together a repository's structure, developers can submit a public GitHub repository URL and get a structured starting point for understanding the code.&lt;/p&gt;

&lt;h3&gt;
  
  
  What can RepoPilot do?
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Explore repository structure:&lt;/strong&gt; Inspect files, extensions, and file sizes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Analyze Python code:&lt;/strong&gt; Extract functions, classes, imports, and function calls using Python's Abstract Syntax Tree (AST).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Visualize function relationships:&lt;/strong&gt; Explore connections between functions through an interactive call graph.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Generate AI-assisted insights:&lt;/strong&gt; Get a project overview, architectural observations, potential issues, and recommendations.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Investigate code more efficiently:&lt;/strong&gt; Bring repository structure, code relationships, and natural-language explanations together in one workspace.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal is simple: reduce the repetitive work involved in getting familiar with a project so developers can spend more time understanding the code and less time manually piecing everything together.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Project repository:&lt;/strong&gt; &lt;a href="https://github.com/shujahaadi/RepoPilot" rel="noopener noreferrer"&gt;RepoPilot on GitHub&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The repository README includes screenshots of the landing page, interactive call graph, and AI-assisted analysis report.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Source code:&lt;/strong&gt; &lt;a href="https://github.com/shujahaadi/RepoPilot" rel="noopener noreferrer"&gt;github.com/shujahaadi/RepoPilot&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;RepoPilot is organized into separate modules for repository analysis, graph construction, API routes, and AI integration.&lt;/p&gt;

&lt;p&gt;The main analysis pipeline looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;GitHub Repository URL
        |
        v
   FastAPI Backend
        |
        v
 Repository Cloning
        |
        v
 File Inventory + Python AST Analysis
        |
        v
 Function Relationship Graph
        |
        v
 AI-Assisted Repository Insights
        |
        v
 Interactive React Workspace
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The frontend brings these results together so developers can explore repository files, inspect function relationships, and review the generated analysis.&lt;/p&gt;

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

&lt;p&gt;I built RepoPilot using a combination of backend development, static analysis, graph visualization, and AI integration.&lt;/p&gt;

&lt;h3&gt;
  
  
  Tech Stack
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;React and Vite:&lt;/strong&gt; Frontend application and development tooling.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;React Flow:&lt;/strong&gt; Interactive function call graph visualization.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;FastAPI:&lt;/strong&gt; Backend API.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Python AST:&lt;/strong&gt; Extracting structural information from Python source code.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitPython:&lt;/strong&gt; Cloning and inspecting Git repositories.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Google Gemini API:&lt;/strong&gt; Generating repository overviews and additional insights.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;HTTPX:&lt;/strong&gt; Making asynchronous HTTP requests to the AI API.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The Analysis Pipeline
&lt;/h3&gt;

&lt;p&gt;The backend starts by cloning a repository and building an inventory of its files. Python files are then analyzed using the &lt;code&gt;ast&lt;/code&gt; module to identify functions, classes, imports, and function calls.&lt;/p&gt;

&lt;p&gt;The graph builder uses the extracted information to construct function relationships. Some relationships are straightforward to resolve, while ambiguous names and Python's dynamic behavior can make others more difficult.&lt;/p&gt;

&lt;p&gt;The AI integration adds a natural-language layer to this structural information. It generates an overview of the project, architectural observations, potential issues, and recommendations based on the available repository context.&lt;/p&gt;

&lt;p&gt;I also implemented processing limits to keep analysis manageable for larger repositories.&lt;/p&gt;

&lt;h3&gt;
  
  
  Challenges and Lessons
&lt;/h3&gt;

&lt;p&gt;One of the more interesting challenges was turning raw function-call information into a useful graph. Detecting that a function calls another function is only part of the problem; identifying the correct target requires resolving names and handling ambiguity.&lt;/p&gt;

&lt;p&gt;Another challenge was connecting the backend analysis pipeline to an interactive frontend that presents the results clearly.&lt;/p&gt;

&lt;p&gt;Building RepoPilot gave me practical experience with API development, Python AST analysis, modular backend architecture, graph construction, React integration, and hosted AI APIs.&lt;/p&gt;

&lt;p&gt;It also reinforced the importance of treating automated findings as starting points for investigation rather than unquestionable conclusions.&lt;/p&gt;

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

&lt;p&gt;Developer tools become more useful when people can inspect them, learn from them, adapt them, and contribute improvements.&lt;/p&gt;

&lt;p&gt;By making RepoPilot's source code publicly available on GitHub, I want to give other developers a starting point they can examine, experiment with, and extend.&lt;/p&gt;

&lt;p&gt;For a repository analysis tool, transparency matters. Developers should be able to inspect how the analysis pipeline works, understand how function relationships are constructed, and improve the implementation rather than relying entirely on unexplained results.&lt;/p&gt;

&lt;p&gt;Open collaboration also creates opportunities to improve call resolution, expand language support, refine graph visualization, and develop better ways to explain how different parts of a codebase interact.&lt;/p&gt;

&lt;p&gt;My goal is to make repository exploration more approachable and create a foundation that other developers can build on.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's Next?
&lt;/h2&gt;

&lt;p&gt;RepoPilot is a starting point for making unfamiliar repositories easier to navigate.&lt;/p&gt;

&lt;p&gt;Potential improvements include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Better cross-file function resolution.&lt;/li&gt;
&lt;li&gt;Broader programming-language support.&lt;/li&gt;
&lt;li&gt;More detailed explanations connected to source code.&lt;/li&gt;
&lt;li&gt;Further improvements to graph exploration and repository navigation.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Building this project reinforced an important lesson for me: &lt;strong&gt;useful developer tools don't have to automate everything. Sometimes, making the first few steps easier is already a meaningful improvement.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you've ever opened a repository and wondered, &lt;em&gt;"Where do I even start?"&lt;/em&gt;, that's the problem RepoPilot is trying to solve.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Built with curiosity, code, and a goal of making repository exploration easier.&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>Perspectivity: Go Outside. See Differently.</title>
      <dc:creator>Shujaur Rahman Haadi</dc:creator>
      <pubDate>Sun, 11 Oct 2026 18:00:57 +0000</pubDate>
      <link>https://dev.to/shujahaadi/perspectivity-go-outside-see-differently-1cje</link>
      <guid>https://dev.to/shujahaadi/perspectivity-go-outside-see-differently-1cje</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-week1-2026-10-05"&gt;Hacktoberfest Open-Source AI Challenge Week 1: Touch Grass&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Perspectivity — Go Outside. See Differently.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;What if going outside could become an opportunity to think like a researcher?&lt;/p&gt;

&lt;p&gt;Perspectivity combines &lt;em&gt;Perspective + Activity&lt;/em&gt; into an AI-powered field investigation experience. Instead of endlessly scrolling on a screen, users receive a real-world mission that encourages them to observe their surroundings, collect evidence, and form their own hypotheses.&lt;/p&gt;

&lt;p&gt;Here's how it works:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Generate a mission:&lt;/strong&gt; Get an investigation based on your available time and experience level.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Observe the world:&lt;/strong&gt; Head outside and record what you notice through written or voice-to-text notes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Form a hypothesis:&lt;/strong&gt; Develop your own explanation based on your observations.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Get an AI debrief:&lt;/strong&gt; Review the evidence, identify assumptions, explore alternative explanations, and discover what to investigate next.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal isn't to let AI think for you. It's to use AI to help you become a better observer and thinker.&lt;/p&gt;

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

&lt;p&gt;The project currently runs locally. I haven't deployed a public demo yet.&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%2F400q1y6rssf22u92krob.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%2F400q1y6rssf22u92krob.png" alt=" " width="799" height="414"&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%2Fhoap3yvx5c85c66lnfgm.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%2Fhoap3yvx5c85c66lnfgm.png" alt=" " width="800" height="415"&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%2Fhmf73kdht821kecnkhze.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%2Fhmf73kdht821kecnkhze.png" alt=" " width="800" height="414"&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%2Fea4hp4wxbena55o33esl.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%2Fea4hp4wxbena55o33esl.png" alt=" " width="800" height="414"&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%2Fck5f7wcm6vuidrg25p1p.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%2Fck5f7wcm6vuidrg25p1p.png" alt=" " width="800" height="414"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;GitHub repository:&lt;/strong&gt; &lt;a href="https://github.com/shujahaadi/perspectivity" rel="noopener noreferrer"&gt;https://github.com/shujahaadi/perspectivity&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The project is open source under the MIT License.&lt;/p&gt;

&lt;p&gt;The repository includes the React frontend and FastAPI backend, along with instructions for configuring the required API key and running the application locally.&lt;/p&gt;

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

&lt;p&gt;I built Perspectivity using React and Vite for the frontend and FastAPI for the backend. Pydantic validates structured data exchanged between the frontend and backend.&lt;/p&gt;

&lt;p&gt;For the AI component, I used &lt;strong&gt;Google's hosted Gemma model (&lt;code&gt;gemma-4-26b-a4b-it&lt;/code&gt;)&lt;/strong&gt; through the Google GenAI SDK.&lt;/p&gt;

&lt;p&gt;Gemma powers two key parts of the experience:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Mission generation:&lt;/strong&gt; It creates structured field investigations with a role, central question, mission, rules, and required observations.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI debriefing:&lt;/strong&gt; It reviews the user's observations and hypothesis, helping distinguish evidence from assumptions and suggesting useful next steps.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The backend validates the model's structured output before returning it to the frontend. I also added input validation and error handling for invalid requests.&lt;/p&gt;

&lt;p&gt;I chose hosted inference because my development machine has limited RAM, making local inference less practical. This allowed me to focus on building the complete experience around an open-weight model rather than requiring powerful hardware.&lt;/p&gt;

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

&lt;p&gt;Open innovation makes it possible for developers to experiment with AI, build on open-weight models, and create applications that go beyond generic chat interfaces.&lt;/p&gt;

&lt;p&gt;With Gemma, I could build a focused experience around real-world observation and reasoning, shaping the prompts and workflow for a specific purpose.&lt;/p&gt;

&lt;p&gt;For me, this project was also an opportunity to learn by building: connecting an AI model to a full-stack application, validating its output, handling failures, and thinking about how AI should support human reasoning rather than replace it.&lt;/p&gt;

&lt;p&gt;I hope Perspectivity can eventually grow into an open-source collection of field investigations that anyone can adapt, extend, and contribute to.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of Gemma&lt;/strong&gt; — uses a hosted Gemma model for mission generation and AI-powered debriefing.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>CentralResolve - One Project. Multiple Conversations. One Clear Picture.</title>
      <dc:creator>Shujaur Rahman Haadi</dc:creator>
      <pubDate>Sun, 04 Oct 2026 08:10:42 +0000</pubDate>
      <link>https://dev.to/shujahaadi/centralresolve-one-project-multiple-conversations-one-clear-picture-7d3</link>
      <guid>https://dev.to/shujahaadi/centralresolve-one-project-multiple-conversations-one-clear-picture-7d3</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-weekend-2026-10-01"&gt;Hacktoberfest Weekend Challenge: Build for a Friend&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;During a recent SIH project, my team and I ended up communicating about the same project across both a WhatsApp group and a Discord server.&lt;/p&gt;

&lt;p&gt;The problem was not that we were not communicating. The problem was that we were communicating in different places.&lt;/p&gt;

&lt;p&gt;A task could be assigned on WhatsApp and later discussed differently on Discord. A deadline mentioned on one platform could be different from the one mentioned somewhere else. Updates could also get buried, leading to confusion about who was responsible for what or whether something was actually finished.&lt;/p&gt;

&lt;p&gt;That experience inspired me to build &lt;strong&gt;CentralResolve&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;CentralResolve takes exported WhatsApp and Discord conversations and analyzes them together to identify contradictions that may otherwise be missed.&lt;/p&gt;

&lt;p&gt;It currently looks for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Conflicting task ownership&lt;/li&gt;
&lt;li&gt;Different deadlines&lt;/li&gt;
&lt;li&gt;Contradictory project statuses&lt;/li&gt;
&lt;li&gt;Unresolved decisions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Instead of producing another long summary of everything a team said, CentralResolve focuses on the parts that may actually require attention.&lt;/p&gt;

&lt;p&gt;The idea is simple:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;One project. Multiple conversations. One clear picture.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I built this for one of my friends from that project because we had already experienced the communication problem that CentralResolve is designed to solve.&lt;/p&gt;

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

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

&lt;p&gt;The demo shows the complete end-to-end workflow:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open CentralResolve.&lt;/li&gt;
&lt;li&gt;Upload a WhatsApp chat export.&lt;/li&gt;
&lt;li&gt;Upload a Discord JSON export.&lt;/li&gt;
&lt;li&gt;Start the analysis.&lt;/li&gt;
&lt;li&gt;Let Gemma extract structured project facts.&lt;/li&gt;
&lt;li&gt;View the detected conflicts.&lt;/li&gt;
&lt;li&gt;Inspect the supporting evidence from each platform.&lt;/li&gt;
&lt;li&gt;Start a new analysis.&lt;/li&gt;
&lt;/ol&gt;

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

&lt;p&gt;&lt;strong&gt;GitHub Repository:&lt;/strong&gt; &lt;a href="https://github.com/shujahaadi/CentralResolve" rel="noopener noreferrer"&gt;https://github.com/shujahaadi/CentralResolve&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;The core of CentralResolve is &lt;strong&gt;Gemma 3 4B&lt;/strong&gt;, running locally through &lt;strong&gt;Ollama&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The application is divided into four main stages:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;WhatsApp Export ──┐
                  ├──&amp;gt; FastAPI ──&amp;gt; Gemma 3 4B
Discord Export ───┘                 │
                                    ↓
                             Structured Facts
                                    ↓
                       Deterministic Conflict Detection
                                    ↓
                              React Dashboard
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Parsing
&lt;/h3&gt;

&lt;p&gt;CentralResolve accepts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;WhatsApp chat exports as &lt;code&gt;.txt&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Discord message exports as &lt;code&gt;.json&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Both formats are parsed into a common message structure containing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Platform&lt;/li&gt;
&lt;li&gt;Sender&lt;/li&gt;
&lt;li&gt;Timestamp&lt;/li&gt;
&lt;li&gt;Message content&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The platform is preserved throughout the pipeline so that the system knows whether a piece of evidence came from WhatsApp or Discord.&lt;/p&gt;

&lt;h3&gt;
  
  
  Understanding the Conversations
&lt;/h3&gt;

&lt;p&gt;Gemma 3 4B is used to turn messy conversation text into structured project facts.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[whatsapp] Rahul: I'll handle deployment.
[discord] Rahul: I can't handle deployment anymore.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Gemma extracts facts such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Task assignments&lt;/li&gt;
&lt;li&gt;Deadlines&lt;/li&gt;
&lt;li&gt;Status updates&lt;/li&gt;
&lt;li&gt;Decisions&lt;/li&gt;
&lt;li&gt;Unresolved issues&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The model also returns the original message as evidence.&lt;/p&gt;

&lt;p&gt;The prompt explicitly tells the model not to invent information and to preserve the original meaning of the conversation.&lt;/p&gt;

&lt;h3&gt;
  
  
  Conflict Detection
&lt;/h3&gt;

&lt;p&gt;The structured facts are then passed to a deterministic Python conflict detector.&lt;/p&gt;

&lt;p&gt;CentralResolve currently checks for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ownership conflicts&lt;/li&gt;
&lt;li&gt;Deadline conflicts&lt;/li&gt;
&lt;li&gt;Status conflicts&lt;/li&gt;
&lt;li&gt;Unresolved decisions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The LLM does not make the final conflict decision by itself.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Conversation
     ↓
Gemma 3 4B
     ↓
Structured Facts
     ↓
Python Conflict Rules
     ↓
Explainable Conflict
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This separation makes the final conflict logic explicit and inspectable.&lt;/p&gt;

&lt;p&gt;For example, if one fact says:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Rahul will handle deployment
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and another says:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Rahul can't handle deployment anymore
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;the deterministic detector can identify that as an ownership conflict and return the original messages as evidence.&lt;/p&gt;

&lt;h3&gt;
  
  
  Frontend
&lt;/h3&gt;

&lt;p&gt;The frontend is built with React and Vite.&lt;/p&gt;

&lt;p&gt;The dashboard displays:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;WhatsApp message count&lt;/li&gt;
&lt;li&gt;Discord message count&lt;/li&gt;
&lt;li&gt;Total messages&lt;/li&gt;
&lt;li&gt;Number of conflicts&lt;/li&gt;
&lt;li&gt;Conflict type&lt;/li&gt;
&lt;li&gt;Conflict severity&lt;/li&gt;
&lt;li&gt;Supporting evidence&lt;/li&gt;
&lt;li&gt;Original platform for each evidence item&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal of the interface is to take a large amount of conversation data and quickly show the small number of issues that need attention.&lt;/p&gt;

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

&lt;p&gt;CentralResolve works with potentially private team conversations.&lt;/p&gt;

&lt;p&gt;The current implementation uses &lt;strong&gt;Gemma 3 4B locally through Ollama&lt;/strong&gt; rather than relying on a closed third-party AI API.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Conversation Files
       ↓
    FastAPI
       ↓
 Local Ollama
       ↓
 Gemma 3 4B
       ↓
Structured Facts
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This matters because the conversation data can be analyzed on the user's own machine without requiring it to be sent to a proprietary AI provider just to perform the model inference.&lt;/p&gt;

&lt;p&gt;For a tool dealing with private team communication, that is an important difference.&lt;/p&gt;

&lt;p&gt;The open approach also gives the project more control over the AI layer. Because the model is open-weight, the system can be adapted as the project evolves instead of being completely tied to one closed API.&lt;/p&gt;

&lt;p&gt;It also makes it possible to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Run inference locally&lt;/li&gt;
&lt;li&gt;Swap models&lt;/li&gt;
&lt;li&gt;Change prompts and model behavior&lt;/li&gt;
&lt;li&gt;Experiment with different open models&lt;/li&gt;
&lt;li&gt;Avoid being locked into a single proprietary AI provider&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For CentralResolve, local inference was not just a technical experiment. It fit the problem.&lt;/p&gt;

&lt;p&gt;We wanted a tool that could look at conversations without making privacy an unnecessary tradeoff.&lt;/p&gt;

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

&lt;h3&gt;
  
  
  Best Use of Gemma
&lt;/h3&gt;

&lt;p&gt;I am entering &lt;strong&gt;Best Use of Gemma&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;CentralResolve uses &lt;strong&gt;Gemma 3 4B&lt;/strong&gt; as the core language model for understanding cross-platform team conversations and extracting structured project facts.&lt;/p&gt;

&lt;p&gt;Gemma runs locally through Ollama, while deterministic Python logic handles the final conflict detection.&lt;/p&gt;

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

&lt;p&gt;CentralResolve started with a problem that felt very real during a project with friends.&lt;/p&gt;

&lt;p&gt;We were already communicating.&lt;/p&gt;

&lt;p&gt;We were already sharing updates.&lt;/p&gt;

&lt;p&gt;But because those conversations were spread across WhatsApp and Discord, we sometimes ended up with different understandings of the same project.&lt;/p&gt;

&lt;p&gt;That led me to a simple question:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;What if we could look at all of those conversations together and identify where the team stopped agreeing?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;CentralResolve is my attempt at answering that question.&lt;/p&gt;

&lt;p&gt;Not another tool that summarizes everything.&lt;/p&gt;

&lt;p&gt;A tool that tells you where your team might no longer be on the same page.&lt;/p&gt;

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