<?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: Ravi Jaipal</title>
    <description>The latest articles on DEV Community by Ravi Jaipal (@ravi_jaipal_).</description>
    <link>https://dev.to/ravi_jaipal_</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%2F4204176%2Ff4ade102-0c88-46ea-ae1a-6becf113bf05.png</url>
      <title>DEV Community: Ravi Jaipal</title>
      <link>https://dev.to/ravi_jaipal_</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ravi_jaipal_"/>
    <language>en</language>
    <item>
      <title>Done</title>
      <dc:creator>Ravi Jaipal</dc:creator>
      <pubDate>Wed, 28 Oct 2026 08:45:06 +0000</pubDate>
      <link>https://dev.to/ravi_jaipal_/done-1703</link>
      <guid>https://dev.to/ravi_jaipal_/done-1703</guid>
      <description></description>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>GitGeist 👻: The Ghost in the Machines and more</title>
      <dc:creator>Ravi Jaipal</dc:creator>
      <pubDate>Tue, 27 Oct 2026 20:51:37 +0000</pubDate>
      <link>https://dev.to/ravi_jaipal_/gitgeist-the-ghost-in-the-machines-and-more-7fb</link>
      <guid>https://dev.to/ravi_jaipal_/gitgeist-the-ghost-in-the-machines-and-more-7fb</guid>
      <description>&lt;p&gt;*# GitGeist: The Ghost in the Machine 👻 | Offline-First AI for Haunted Git Histories&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Built for the &lt;a href="https://dev.to/challenges/hacktoberfest-week4-2026-10-26"&gt;Hacktoberfest Open-Source AI Challenge — Week 4: Ghost in the Machine&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Every codebase has a haunted corridor.&lt;/p&gt;

&lt;p&gt;It's that one file containing a mysterious &lt;code&gt;time.sleep(0.666)&lt;/code&gt;, a forgotten workaround, or a comment that says: &lt;code&gt;// temporary fix — DO NOT TOUCH&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;You run &lt;code&gt;git blame&lt;/code&gt; to investigate, only to discover the most frightening answer in software engineering: &lt;strong&gt;the ghost is you, from three years ago.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;But old code isn't always something to fear. Legacy functions, retired modules, and forgotten commits often tell the story of the people and decisions that kept our software running.&lt;/p&gt;

&lt;p&gt;That inspired me to build &lt;strong&gt;GitGeist&lt;/strong&gt; — an offline-first Haunted Git Séance and Digital Code Ofrenda that combines AI-powered code archaeology with a Halloween-inspired experience and a tribute to retired code.&lt;/p&gt;

&lt;p&gt;The project brings together two open-weight AI models running locally: &lt;strong&gt;Prior Labs' TabPFN&lt;/strong&gt; for tabular risk forecasting and &lt;strong&gt;Google's Gemma 3&lt;/strong&gt;, through Ollama, for grounded explanations of Git history.&lt;/p&gt;

&lt;p&gt;The goal is simple: investigate suspicious commits, understand their context, and keep private repository data on your own machine.&lt;/p&gt;

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

&lt;p&gt;GitGeist combines three main features.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. The TabPFN Haunting Forecaster
&lt;/h3&gt;

&lt;p&gt;The forecaster analyses Git and system telemetry, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Commit time and late-night activity&lt;/li&gt;
&lt;li&gt;Lines changed and files touched&lt;/li&gt;
&lt;li&gt;Cyclomatic complexity changes&lt;/li&gt;
&lt;li&gt;Days since a file was last modified&lt;/li&gt;
&lt;li&gt;Test coverage signals&lt;/li&gt;
&lt;li&gt;CPU thermal telemetry&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It produces a &lt;strong&gt;Haunting Risk Score&lt;/strong&gt;, an estimated 10–90% range, and the signals contributing to the forecast.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. The Haunted Terminal Séance
&lt;/h3&gt;

&lt;p&gt;Using Google Gemma 3 locally through Ollama, GitGeist turns commit metadata into an understandable explanation of suspicious code.&lt;/p&gt;

&lt;p&gt;It can reference the commit hash, author, timestamp, and forecast supplied by the risk engine. The aim is to help developers investigate why a workaround may exist before deleting it.&lt;/p&gt;

&lt;p&gt;If Ollama is unavailable, a deterministic fallback can still format the available metadata.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. The Digital Code Ofrenda 🌼
&lt;/h3&gt;

&lt;p&gt;Inspired by Día de los Muertos, this feature creates a digital remembrance card for retired code and the maintainers behind it.&lt;/p&gt;

&lt;p&gt;Instead of treating deleted functions as disposable leftovers, GitGeist gives developers a creative way to document their history and acknowledge the work that came before.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Who is it for?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Developers maintaining legacy codebases&lt;/li&gt;
&lt;li&gt;Engineers investigating regressions and unusual commits&lt;/li&gt;
&lt;li&gt;Open-source maintainers exploring repository history&lt;/li&gt;
&lt;li&gt;Teams that want local AI-assisted code analysis&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;GitGeist is designed to run locally, including on CPU-only systems, without requiring a paid AI API key.&lt;/p&gt;

&lt;p&gt;It offers two interfaces:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Haunted Terminal CLI:&lt;/strong&gt; &lt;code&gt;python3 cli.py --preset 0&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Web interface:&lt;/strong&gt; &lt;code&gt;python3 run.py&lt;/code&gt;, with the interface intended to run at &lt;code&gt;http://localhost:8080&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The repository also includes a Dockerfile and a Render Blueprint for deployment.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Live demo:&lt;/strong&gt; [Add your deployed URL here, if available]&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Demo video:&lt;/strong&gt; [Add your video link here, if available]&lt;/p&gt;

&lt;h2&gt;
  
  
  💻 Code and Quick Start
&lt;/h2&gt;

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

&lt;p&gt;&lt;strong&gt;License:&lt;/strong&gt; MIT&lt;/p&gt;

&lt;p&gt;Clone the repository and install its dependencies:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/ravindrajaipal/gitgeist.git
&lt;span class="nb"&gt;cd &lt;/span&gt;gitgeist
pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; requirements.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Run the tests:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python3 &lt;span class="nt"&gt;-m&lt;/span&gt; unittest discover tests &lt;span class="nt"&gt;-v&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Try the terminal experience:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python3 cli.py &lt;span class="nt"&gt;--preset&lt;/span&gt; 0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Run the telemetry analysis:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python3 scripts/analyze.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Launch the web interface:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python3 run.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For model-backed features, follow the repository instructions for installing the required dependencies and configuring Ollama and the model weights.&lt;/p&gt;

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

&lt;p&gt;GitGeist separates numerical forecasting from language generation.&lt;/p&gt;

&lt;h3&gt;
  
  
  The architecture
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Git scanner:&lt;/strong&gt; Extracts repository and commit information.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;TabPFN forecaster:&lt;/strong&gt; Processes tabular telemetry and estimates risk.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gemma 3 via Ollama:&lt;/strong&gt; Uses the supplied metadata and forecast to produce a contextual explanation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Local coordinator and interfaces:&lt;/strong&gt; Connect the components to the CLI and web UI.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Code Ofrenda:&lt;/strong&gt; Presents a remembrance experience for retired code.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Why use two different models?
&lt;/h3&gt;

&lt;p&gt;A language model can explain code in natural language, but its prose should not be treated as a calibrated risk estimate.&lt;/p&gt;

&lt;p&gt;GitGeist therefore assigns different responsibilities to its components:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;TabPFN:&lt;/strong&gt; Tabular forecasting&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gemma 3:&lt;/strong&gt; Natural-language explanations and storytelling&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deterministic fallback:&lt;/strong&gt; Basic output when the local language model is unavailable&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The intention is to keep the forecast separate from the generated narrative, making the system easier to inspect and reason about.&lt;/p&gt;

&lt;h2&gt;
  
  
  🧪 Testing and Verification
&lt;/h2&gt;

&lt;p&gt;The project includes unit tests for core behaviour, such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ensuring the Ofrenda tribute acknowledges the author&lt;/li&gt;
&lt;li&gt;Checking that the Séance references the expected commit and risk score&lt;/li&gt;
&lt;li&gt;Testing whether a witching-hour commit increases the forecast in the test scenario&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Run the verification suite with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python3 &lt;span class="nt"&gt;-m&lt;/span&gt; unittest discover tests &lt;span class="nt"&gt;-v&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The repository also contains a telemetry sensitivity analysis script:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python3 scripts/analyze.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;These tests and scripts help make the expected behaviour reproducible. Forecast quality should still be evaluated against suitable labelled data before using risk scores to make production decisions.&lt;/p&gt;

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

&lt;h3&gt;
  
  
  🔐 Privacy by design
&lt;/h3&gt;

&lt;p&gt;Git history can contain proprietary implementation details, internal incident notes, and sensitive metadata. Running analysis locally can reduce the need to send repository contents to external AI services.&lt;/p&gt;

&lt;h3&gt;
  
  
  📴 Offline-first development
&lt;/h3&gt;

&lt;p&gt;A local workflow is useful when internet access is unreliable or external APIs are unavailable. Once dependencies and model weights are installed, the intended local workflow does not require a cloud AI API.&lt;/p&gt;

&lt;h3&gt;
  
  
  🔍 More transparent responsibilities
&lt;/h3&gt;

&lt;p&gt;Separating tabular risk estimation from narrative generation makes it easier to inspect the inputs, examine the outputs, and replace individual components.&lt;/p&gt;

&lt;h3&gt;
  
  
  💸 No per-request cloud AI API bill
&lt;/h3&gt;

&lt;p&gt;Local inference avoids per-request charges from a hosted AI API, although hardware, electricity, storage, and setup still have costs.&lt;/p&gt;

&lt;p&gt;Open tools give developers the freedom to experiment, inspect, adapt, and build without being tied to a single hosted provider.&lt;/p&gt;

&lt;h2&gt;
  
  
  🤖 My Agent Session
&lt;/h2&gt;

&lt;p&gt;My development workflow focused on three ideas:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Theme first:&lt;/strong&gt; Connect the spooky debugging experience with the idea of preserving the history of retired code.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Separate prediction from explanation:&lt;/strong&gt; Have the forecasting component produce the risk estimate before the language model generates its explanation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Verify behaviour:&lt;/strong&gt; Run unit tests and the telemetry analysis script rather than relying only on a convincing demo.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This approach helped turn a creative challenge theme into a project with a concrete technical workflow.&lt;/p&gt;

&lt;h2&gt;
  
  
  🌼 The Spirit of GitGeist
&lt;/h2&gt;

&lt;p&gt;Code has a history.&lt;/p&gt;

&lt;p&gt;A strange delay, an unusual workaround, or a retired function may look meaningless today, but it might once have prevented a race condition or kept a service running during a difficult incident.&lt;/p&gt;

&lt;p&gt;GitGeist is my attempt to make exploring that history more useful — and a little more fun.&lt;/p&gt;

&lt;p&gt;The haunted terminal brings the mystery. The risk forecaster brings a structured signal. The Digital Code Ofrenda brings a moment of appreciation for the developers and decisions that came before us.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sometimes the ghost in the machine isn't a bug. It's a piece of engineering history waiting to be understood.&lt;/strong&gt;&lt;/p&gt;

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

&lt;p&gt;The project is intended for the following challenge categories, subject to the official rules and eligibility requirements:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Overall Winner:&lt;/strong&gt; The combination of Git-history analysis, local AI, and the Digital Code Ofrenda.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of Gemma:&lt;/strong&gt; Gemma 3 generates contextual explanations grounded in supplied repository metadata.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of TabPFN:&lt;/strong&gt; Tabular telemetry forecasting and sensitivity analysis.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of Render:&lt;/strong&gt; The included Render Blueprint for a deployable web application.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🙌 Thanks
&lt;/h2&gt;

&lt;p&gt;Thanks to the organisers of the Hacktoberfest Open-Source AI Challenge for a theme that encouraged me to look at old code from a different perspective.&lt;/p&gt;

&lt;p&gt;If you find GitGeist interesting, explore the repository, try the local workflow, and share feedback or ideas for improvement.&lt;/p&gt;

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

&lt;p&gt;&lt;em&gt;Built with curiosity, open-source tools, and respect for the ghosts in our codebases.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>GitGeist 👻: The Ghost in the Machine</title>
      <dc:creator>Ravi Jaipal</dc:creator>
      <pubDate>Tue, 27 Oct 2026 20:50:03 +0000</pubDate>
      <link>https://dev.to/ravi_jaipal_/gitgeist-the-ghost-in-the-machine-15g3</link>
      <guid>https://dev.to/ravi_jaipal_/gitgeist-the-ghost-in-the-machine-15g3</guid>
      <description>&lt;h1&gt;
  
  
  GitGeist: The Ghost in the Machine 👻 | Offline-First AI for Haunted Git Histories
&lt;/h1&gt;

&lt;p&gt;&lt;em&gt;Built for the &lt;a href="https://dev.to/challenges/hacktoberfest-week4-2026-10-26"&gt;Hacktoberfest Open-Source AI Challenge — Week 4: Ghost in the Machine&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Every codebase has a haunted corridor.&lt;/p&gt;

&lt;p&gt;It's that one file containing a mysterious &lt;code&gt;time.sleep(0.666)&lt;/code&gt;, a forgotten workaround, or a comment that says: &lt;code&gt;// temporary fix — DO NOT TOUCH&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;You run &lt;code&gt;git blame&lt;/code&gt; to investigate, only to discover the most frightening answer in software engineering: &lt;strong&gt;the ghost is you, from three years ago.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;But old code isn't always something to fear. Legacy functions, retired modules, and forgotten commits often tell the story of the people and decisions that kept our software running.&lt;/p&gt;

&lt;p&gt;That inspired me to build &lt;strong&gt;GitGeist&lt;/strong&gt; — an offline-first Haunted Git Séance and Digital Code Ofrenda that combines AI-powered code archaeology with a Halloween-inspired experience and a tribute to retired code.&lt;/p&gt;

&lt;p&gt;The project brings together two open-weight AI models running locally: &lt;strong&gt;Prior Labs' TabPFN&lt;/strong&gt; for tabular risk forecasting and &lt;strong&gt;Google's Gemma 3&lt;/strong&gt;, through Ollama, for grounded explanations of Git history.&lt;/p&gt;

&lt;p&gt;The goal is simple: investigate suspicious commits, understand their context, and keep private repository data on your own machine.&lt;/p&gt;

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

&lt;p&gt;GitGeist combines three main features.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. The TabPFN Haunting Forecaster
&lt;/h3&gt;

&lt;p&gt;The forecaster analyses Git and system telemetry, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Commit time and late-night activity&lt;/li&gt;
&lt;li&gt;Lines changed and files touched&lt;/li&gt;
&lt;li&gt;Cyclomatic complexity changes&lt;/li&gt;
&lt;li&gt;Days since a file was last modified&lt;/li&gt;
&lt;li&gt;Test coverage signals&lt;/li&gt;
&lt;li&gt;CPU thermal telemetry&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It produces a &lt;strong&gt;Haunting Risk Score&lt;/strong&gt;, an estimated 10–90% range, and the signals contributing to the forecast.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. The Haunted Terminal Séance
&lt;/h3&gt;

&lt;p&gt;Using Google Gemma 3 locally through Ollama, GitGeist turns commit metadata into an understandable explanation of suspicious code.&lt;/p&gt;

&lt;p&gt;It can reference the commit hash, author, timestamp, and forecast supplied by the risk engine. The aim is to help developers investigate why a workaround may exist before deleting it.&lt;/p&gt;

&lt;p&gt;If Ollama is unavailable, a deterministic fallback can still format the available metadata.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. The Digital Code Ofrenda 🌼
&lt;/h3&gt;

&lt;p&gt;Inspired by Día de los Muertos, this feature creates a digital remembrance card for retired code and the maintainers behind it.&lt;/p&gt;

&lt;p&gt;Instead of treating deleted functions as disposable leftovers, GitGeist gives developers a creative way to document their history and acknowledge the work that came before.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Who is it for?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Developers maintaining legacy codebases&lt;/li&gt;
&lt;li&gt;Engineers investigating regressions and unusual commits&lt;/li&gt;
&lt;li&gt;Open-source maintainers exploring repository history&lt;/li&gt;
&lt;li&gt;Teams that want local AI-assisted code analysis&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;GitGeist is designed to run locally, including on CPU-only systems, without requiring a paid AI API key.&lt;/p&gt;

&lt;p&gt;It offers two interfaces:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Haunted Terminal CLI:&lt;/strong&gt; &lt;code&gt;python3 cli.py --preset 0&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Web interface:&lt;/strong&gt; &lt;code&gt;python3 run.py&lt;/code&gt;, with the interface intended to run at &lt;code&gt;http://localhost:8080&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The repository also includes a Dockerfile and a Render Blueprint for deployment.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Live demo:&lt;/strong&gt; [Add your deployed URL here, if available]&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Demo video:&lt;/strong&gt; [Add your video link here, if available]&lt;/p&gt;

&lt;h2&gt;
  
  
  💻 Code and Quick Start
&lt;/h2&gt;

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

&lt;p&gt;&lt;strong&gt;License:&lt;/strong&gt; MIT&lt;/p&gt;

&lt;p&gt;Clone the repository and install its dependencies:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/ravindrajaipal/gitgeist.git
&lt;span class="nb"&gt;cd &lt;/span&gt;gitgeist
pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; requirements.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Run the tests:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python3 &lt;span class="nt"&gt;-m&lt;/span&gt; unittest discover tests &lt;span class="nt"&gt;-v&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Try the terminal experience:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python3 cli.py &lt;span class="nt"&gt;--preset&lt;/span&gt; 0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Run the telemetry analysis:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python3 scripts/analyze.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Launch the web interface:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python3 run.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For model-backed features, follow the repository instructions for installing the required dependencies and configuring Ollama and the model weights.&lt;/p&gt;

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

&lt;p&gt;GitGeist separates numerical forecasting from language generation.&lt;/p&gt;

&lt;h3&gt;
  
  
  The architecture
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Git scanner:&lt;/strong&gt; Extracts repository and commit information.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;TabPFN forecaster:&lt;/strong&gt; Processes tabular telemetry and estimates risk.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gemma 3 via Ollama:&lt;/strong&gt; Uses the supplied metadata and forecast to produce a contextual explanation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Local coordinator and interfaces:&lt;/strong&gt; Connect the components to the CLI and web UI.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Code Ofrenda:&lt;/strong&gt; Presents a remembrance experience for retired code.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Why use two different models?
&lt;/h3&gt;

&lt;p&gt;A language model can explain code in natural language, but its prose should not be treated as a calibrated risk estimate.&lt;/p&gt;

&lt;p&gt;GitGeist therefore assigns different responsibilities to its components:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;TabPFN:&lt;/strong&gt; Tabular forecasting&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gemma 3:&lt;/strong&gt; Natural-language explanations and storytelling&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deterministic fallback:&lt;/strong&gt; Basic output when the local language model is unavailable&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The intention is to keep the forecast separate from the generated narrative, making the system easier to inspect and reason about.&lt;/p&gt;

&lt;h2&gt;
  
  
  🧪 Testing and Verification
&lt;/h2&gt;

&lt;p&gt;The project includes unit tests for core behaviour, such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ensuring the Ofrenda tribute acknowledges the author&lt;/li&gt;
&lt;li&gt;Checking that the Séance references the expected commit and risk score&lt;/li&gt;
&lt;li&gt;Testing whether a witching-hour commit increases the forecast in the test scenario&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Run the verification suite with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python3 &lt;span class="nt"&gt;-m&lt;/span&gt; unittest discover tests &lt;span class="nt"&gt;-v&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The repository also contains a telemetry sensitivity analysis script:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python3 scripts/analyze.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;These tests and scripts help make the expected behaviour reproducible. Forecast quality should still be evaluated against suitable labelled data before using risk scores to make production decisions.&lt;/p&gt;

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

&lt;h3&gt;
  
  
  🔐 Privacy by design
&lt;/h3&gt;

&lt;p&gt;Git history can contain proprietary implementation details, internal incident notes, and sensitive metadata. Running analysis locally can reduce the need to send repository contents to external AI services.&lt;/p&gt;

&lt;h3&gt;
  
  
  📴 Offline-first development
&lt;/h3&gt;

&lt;p&gt;A local workflow is useful when internet access is unreliable or external APIs are unavailable. Once dependencies and model weights are installed, the intended local workflow does not require a cloud AI API.&lt;/p&gt;

&lt;h3&gt;
  
  
  🔍 More transparent responsibilities
&lt;/h3&gt;

&lt;p&gt;Separating tabular risk estimation from narrative generation makes it easier to inspect the inputs, examine the outputs, and replace individual components.&lt;/p&gt;

&lt;h3&gt;
  
  
  💸 No per-request cloud AI API bill
&lt;/h3&gt;

&lt;p&gt;Local inference avoids per-request charges from a hosted AI API, although hardware, electricity, storage, and setup still have costs.&lt;/p&gt;

&lt;p&gt;Open tools give developers the freedom to experiment, inspect, adapt, and build without being tied to a single hosted provider.&lt;/p&gt;

&lt;h2&gt;
  
  
  🤖 My Agent Session
&lt;/h2&gt;

&lt;p&gt;My development workflow focused on three ideas:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Theme first:&lt;/strong&gt; Connect the spooky debugging experience with the idea of preserving the history of retired code.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Separate prediction from explanation:&lt;/strong&gt; Have the forecasting component produce the risk estimate before the language model generates its explanation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Verify behaviour:&lt;/strong&gt; Run unit tests and the telemetry analysis script rather than relying only on a convincing demo.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This approach helped turn a creative challenge theme into a project with a concrete technical workflow.&lt;/p&gt;

&lt;h2&gt;
  
  
  🌼 The Spirit of GitGeist
&lt;/h2&gt;

&lt;p&gt;Code has a history.&lt;/p&gt;

&lt;p&gt;A strange delay, an unusual workaround, or a retired function may look meaningless today, but it might once have prevented a race condition or kept a service running during a difficult incident.&lt;/p&gt;

&lt;p&gt;GitGeist is my attempt to make exploring that history more useful — and a little more fun.&lt;/p&gt;

&lt;p&gt;The haunted terminal brings the mystery. The risk forecaster brings a structured signal. The Digital Code Ofrenda brings a moment of appreciation for the developers and decisions that came before us.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sometimes the ghost in the machine isn't a bug. It's a piece of engineering history waiting to be understood.&lt;/strong&gt;&lt;/p&gt;

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

&lt;p&gt;The project is intended for the following challenge categories, subject to the official rules and eligibility requirements:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Overall Winner:&lt;/strong&gt; The combination of Git-history analysis, local AI, and the Digital Code Ofrenda.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of Gemma:&lt;/strong&gt; Gemma 3 generates contextual explanations grounded in supplied repository metadata.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of TabPFN:&lt;/strong&gt; Tabular telemetry forecasting and sensitivity analysis.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of Render:&lt;/strong&gt; The included Render Blueprint for a deployable web application.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🙌 Thanks
&lt;/h2&gt;

&lt;p&gt;Thanks to the organisers of the Hacktoberfest Open-Source AI Challenge for a theme that encouraged me to look at old code from a different perspective.&lt;/p&gt;

&lt;p&gt;If you find GitGeist interesting, explore the repository, try the local workflow, and share feedback or ideas for improvement.&lt;/p&gt;

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

&lt;p&gt;&lt;em&gt;Built with curiosity, open-source tools, and respect for the ghosts in our codebases.&lt;/em&gt;&lt;/p&gt;

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