<?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: Manthan Gupta</title>
    <description>The latest articles on DEV Community by Manthan Gupta (@manthan_gupta_fceef7b2ea6).</description>
    <link>https://dev.to/manthan_gupta_fceef7b2ea6</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%2F4009477%2F02614349-0ae2-42c7-962b-f39ec20a4072.png</url>
      <title>DEV Community: Manthan Gupta</title>
      <link>https://dev.to/manthan_gupta_fceef7b2ea6</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/manthan_gupta_fceef7b2ea6"/>
    <language>en</language>
    <item>
      <title>Necropsy</title>
      <dc:creator>Manthan Gupta</dc:creator>
      <pubDate>Sat, 31 Oct 2026 12:25:03 +0000</pubDate>
      <link>https://dev.to/manthan_gupta_fceef7b2ea6/necropsy-2k7c</link>
      <guid>https://dev.to/manthan_gupta_fceef7b2ea6/necropsy-2k7c</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission 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;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;Every abandoned repository is a ghost. Someone's decisions are still in there, along with their abandoned ideas and a last commit that reads like a final breath, but nobody can talk to it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Necropsy&lt;/strong&gt; performs an autopsy on a dead Git repository and then lets you hold a séance with it.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The autopsy&lt;/strong&gt; finds the time of death, the last-gasp commit, the activity curve, the bus factor, and the project's "eras". Its &lt;strong&gt;graveyard&lt;/strong&gt; lists tombstones for deleted files and functions, each carrying the deleting commit's message as its epitaph.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The séance&lt;/strong&gt; is a chat with the project's ghost. You drag a &lt;strong&gt;time slider&lt;/strong&gt; to any date in the project's life, and the ghost knows only what existed on that date. Every claim it makes cites real commits, and a verifier removes any claim it can't back up. When the evidence isn't there, it answers: &lt;em&gt;"The dead do not remember that."&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I took "Ghost in the Machine" literally: a ghost made of a machine's own memory. A repository is a recorded history of someone's mind, and I wanted to make it answerable without letting it make things up.&lt;/p&gt;

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


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/Manthan-gupta-21906" rel="noopener noreferrer"&gt;
        Manthan-gupta-21906
      &lt;/a&gt; / &lt;a href="https://github.com/Manthan-gupta-21906/Necropsy" rel="noopener noreferrer"&gt;
        Necropsy
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;🪦 Necropsy&lt;/h1&gt;
&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Hold a séance with any dead repository.&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Necropsy performs an &lt;strong&gt;autopsy&lt;/strong&gt; on an abandoned Git repository (when it died, how it declined, what code was lost) and opens a &lt;strong&gt;séance&lt;/strong&gt;: a chat with the project's ghost, which can only answer from what existed on the date you pick. Every claim cites real commits, and anything that can't be verified is removed.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Everything runs locally on open-weight models. After the first clone, it works with the network unplugged.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Built for the Hacktoberfest &lt;strong&gt;"Ghost in the Machine"&lt;/strong&gt; open-source AI challenge.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Status:&lt;/strong&gt; in development. Items under &lt;a href="https://github.com/Manthan-gupta-21906/Necropsy#roadmap" rel="noopener noreferrer"&gt;Roadmap&lt;/a&gt; show what is done. Commands in this README describe the planned interface; adjust them to the final &lt;code&gt;Makefile&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Contents&lt;/h2&gt;

&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://github.com/Manthan-gupta-21906/Necropsy#why-this-exists" rel="noopener noreferrer"&gt;Why this exists&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Manthan-gupta-21906/Necropsy#what-you-can-do" rel="noopener noreferrer"&gt;What you can do&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Manthan-gupta-21906/Necropsy#how-it-works-in-plain-english" rel="noopener noreferrer"&gt;How it works, in plain English&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Manthan-gupta-21906/Necropsy#architecture" rel="noopener noreferrer"&gt;Architecture&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Manthan-gupta-21906/Necropsy#the-idea-that-makes-it-different-time-travel" rel="noopener noreferrer"&gt;The idea that makes it different: time travel&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Manthan-gupta-21906/Necropsy#concepts-explained" rel="noopener noreferrer"&gt;Concepts explained&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Manthan-gupta-21906/Necropsy#models" rel="noopener noreferrer"&gt;Models&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Manthan-gupta-21906/Necropsy#quickstart" rel="noopener noreferrer"&gt;Quickstart&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Manthan-gupta-21906/Necropsy#project-structure" rel="noopener noreferrer"&gt;Project structure&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Manthan-gupta-21906/Necropsy#why-open-source-ai-matters-here" rel="noopener noreferrer"&gt;Why open-source AI matters here&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;…&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/Manthan-gupta-21906/Necropsy" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;The most important idea in the project fits in two lines:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;bisect_right&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;item_dates&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;as_of_end&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;   &lt;span class="c1"&gt;# commit dates sorted ascending
&lt;/span&gt;&lt;span class="n"&gt;scores&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;vectors&lt;/span&gt;&lt;span class="p"&gt;[:&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt; &lt;span class="n"&gt;query_vec&lt;/span&gt;          &lt;span class="c1"&gt;# later commits are not in this slice
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Commit embeddings are stored &lt;strong&gt;sorted by date&lt;/strong&gt;, so "everything up to the chosen date" is a prefix of the list. Commits after that date are never scored, so they can't influence which evidence comes back. Filtering after ranking would let the future leak into the past.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Open-source AI in the core:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Ghost model:&lt;/strong&gt; an open-weight Qwen3 model (&lt;strong&gt;[EDIT: confirm the exact tag you ran, e.g. &lt;code&gt;qwen3:8b&lt;/code&gt;, and your fallback]&lt;/strong&gt;) served locally by &lt;strong&gt;Ollama&lt;/strong&gt;. It writes the ghost's answers as structured JSON: an answer plus a list of claims, each with commit hashes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Embeddings:&lt;/strong&gt; &lt;code&gt;BAAI/bge-small-en-v1.5&lt;/code&gt; runs in-process through sentence-transformers. It powers retrieval, the verifier's support check, and the clustering behind the project's "eras". It's small enough to run on a CPU.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Everything else is ordinary, auditable code:&lt;/strong&gt; PyDriller reads the Git history, tree-sitter finds deleted functions, SQLite stores it all in one file, scikit-learn and UMAP cluster the eras, FastAPI serves the API, and a static HTML/JS frontend with D3 draws the charts and the time slider. There's no framework build step and no CDN.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Why it's more than a chatbot over a repo:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;The time axis is the product.&lt;/strong&gt; The date filter is structural (the prefix slice above), and a mandatory automated test builds a fixture repo with known dates and checks that nothing newer than the chosen date reaches retrieval, the prompt, the graveyard, or the statistics.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The ghost has to show its evidence.&lt;/strong&gt; The verifier is plain code, not another model. It checks that each cited commit exists, is dated before the chosen date, was in the evidence the model was shown, and is semantically close to the claim. Small local models cite things that don't exist, so unsupported claims are deleted.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Numbers never come from the LLM.&lt;/strong&gt; Time of death, decline onset and bus factor are formulas over commit data, so they're reproducible. The model explains them but never computes them.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Eras are display-only.&lt;/strong&gt; Clusters are computed from the whole history, so they depend on the future. Their labels never enter the ghost's context.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The ghost speaks as the project, not as a person.&lt;/strong&gt; It quotes real commit messages verbatim and never impersonates a named maintainer.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;[EDIT: describe what actually works at submission time, and list anything still planned. Judges can tell.]&lt;/strong&gt;&lt;/p&gt;

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

&lt;p&gt;Necropsy exists because of what a closed API makes impossible.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Dead private repos.&lt;/strong&gt; The projects most worth autopsying are often old company code or unreleased side projects. They can't be pasted into a hosted service. With local inference they never leave the machine.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It costs nothing to run.&lt;/strong&gt; Indexing thousands of commits and asking unlimited questions costs electricity, not API credits. An autopsy that you'd think twice about running if it cost per query becomes something you run on every repo.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Offline.&lt;/strong&gt; After the initial clone and one-time model downloads, you can unplug the network and keep working.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reproducibility and preservation.&lt;/strong&gt; This one is personal to the theme. A tool about preserving history shouldn't depend on a model that gets quietly updated or retired. Pinned open weights mean an autopsy produced today can be reproduced years from now.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The model is a replaceable part.&lt;/strong&gt; Swapping an 8B model for a 4B one is a one-line config change. &lt;strong&gt;[EDIT: if your eval harness ran, add one real sentence on what the comparison showed. Don't invent numbers.]&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A hosted model would give me a nicer answer on a good day. It couldn't give me privacy, an offline demo, or an answer that can be reproduced next year.&lt;/p&gt;

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

&lt;p&gt;I gave the agent the product, technical and architecture documents and an &lt;code&gt;AGENTS.md&lt;/code&gt; of non-negotiables, such as the time-travel invariant, verified citations, and no closed APIs, so it built against a spec instead of improvising. &lt;strong&gt;[EDIT: confirm this is what you did.]&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Spirit of It
&lt;/h2&gt;

&lt;p&gt;I pointed Necropsy at &lt;strong&gt;[your abandoned project]&lt;/strong&gt;, dragged the slider back to &lt;strong&gt;[month/year]&lt;/strong&gt;, and asked &lt;strong&gt;[your question]&lt;/strong&gt;. It answered &lt;strong&gt;[what it said]&lt;/strong&gt;, and cited &lt;strong&gt;[the commit]&lt;/strong&gt;. I had forgotten &lt;strong&gt;[what you'd forgotten]&lt;/strong&gt;.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>Touch Grass, Check the Clouds First: SkyReader</title>
      <dc:creator>Manthan Gupta</dc:creator>
      <pubDate>Sun, 11 Oct 2026 11:47:36 +0000</pubDate>
      <link>https://dev.to/manthan_gupta_fceef7b2ea6/touch-grass-check-the-clouds-first-skyreader-3948</link>
      <guid>https://dev.to/manthan_gupta_fceef7b2ea6/touch-grass-check-the-clouds-first-skyreader-3948</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;SkyReader&lt;/strong&gt; is a website that reads the sky. Take one photo of the clouds and it names the cloud type (cirrus, cumulonimbus, stratus and so on), checks live weather for your area, and gives a plain verdict: &lt;strong&gt;Go, Go with care, Wait, or Stay in&lt;/strong&gt;, with the reasons and a short note on what those clouds usually mean.&lt;/p&gt;

&lt;p&gt;It's built to make the screen the shortest part of going outside: look up, take one photo, get an answer in a few seconds, put the phone away. A built-in cloud atlas helps you learn to read the sky yourself, and a sky log later checks whether the tip held up against what actually happened.&lt;/p&gt;

&lt;p&gt;It's for walkers, runners, hikers and anyone curious about the weather above them.&lt;/p&gt;

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


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://manthan-gupta-21906.github.io/SkyReader/" rel="noopener noreferrer" class="c-link"&gt;
            SkyReader
          &lt;/a&gt;
        &lt;/h2&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
          manthan-gupta-21906.github.io
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


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


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/Manthan-gupta-21906" rel="noopener noreferrer"&gt;
        Manthan-gupta-21906
      &lt;/a&gt; / &lt;a href="https://github.com/Manthan-gupta-21906/SkyReader" rel="noopener noreferrer"&gt;
        SkyReader
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;SkyReader&lt;/h1&gt;

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



&lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/Manthan-gupta-21906/SkyReader" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Cloud classifier:&lt;/strong&gt; a small open-weight image model (MobileNetV3-Small) [fine-tuned on public ground-based cloud datasets plus my own phone photos: confirm once done], exported to ONNX and run &lt;strong&gt;in the browser&lt;/strong&gt; with &lt;code&gt;onnxruntime-web&lt;/code&gt;. Photos never leave the device.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Weather:&lt;/strong&gt; the Open-Meteo API, which needs no key. Only a rounded location is sent.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Verdict:&lt;/strong&gt; a transparent rule engine, not an LLM. Cloud signal, rain chance, wind gusts, convective energy, UV, temperature and daylight each add a penalty, and a thunderstorm signal can never produce a plain "Go". Every reason is shown on screen.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;App:&lt;/strong&gt; React, TypeScript and Tailwind as an installable PWA that works offline, with IndexedDB for the local sky log.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Built with an agent:&lt;/strong&gt; I wrote the requirements first (PRD, TRD, UX design, data schema, architecture and a phase plan), then had &lt;strong&gt;OpenCode&lt;/strong&gt; build the app phase by phase from them, using [model name and how you accessed it].&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Result&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Top-1 accuracy, held-out test set&lt;/td&gt;
&lt;td&gt;[after training]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Top-1 accuracy, my own phone photos&lt;/td&gt;
&lt;td&gt;[after field test]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Verdict hit rate over [N] days&lt;/td&gt;
&lt;td&gt;[after outcome checks]&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The photo stays on your device.&lt;/strong&gt; An open model that runs in the browser needs no upload and no API key. A closed vision API would need both.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Classification keeps working without signal,&lt;/strong&gt; which matters on a trail.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;I could tune it for my own sky.&lt;/strong&gt; Fine-tuning and calibrating an open model on local photos is possible. A closed classifier doesn't offer that.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Open data and an open weather API&lt;/strong&gt; keep it free to run and easy to audit.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The model is swappable.&lt;/strong&gt; Drop in a new &lt;code&gt;model.onnx&lt;/code&gt; and manifest and the app uses it, with no code changes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;[Add one honest comparison once measured, for example open model vs a closed API on your own photos.]&lt;/p&gt;

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

&lt;p&gt;[Embed the DevRelay session with the agent_session tag, or link it.]&lt;/p&gt;

&lt;p&gt;It wasn't a smooth run: the agent used bash syntax in PowerShell, started in the wrong repo and tried to open Notepad. Fixing that meant stricter prompts and stopping after each phase, and I'd recommend the same to anyone building with an agent.&lt;/p&gt;

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

&lt;p&gt;[List the partner categories you qualify for, or remove this section.]&lt;/p&gt;

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