<?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: Ankith M</title>
    <description>The latest articles on DEV Community by Ankith M (@ankithm1006).</description>
    <link>https://dev.to/ankithm1006</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%2F4161494%2F8f1002ef-d04c-4f14-b098-1a3a7919960e.png</url>
      <title>DEV Community: Ankith M</title>
      <link>https://dev.to/ankithm1006</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ankithm1006"/>
    <language>en</language>
    <item>
      <title>GitHub said 31 issues were open. 0 were actually free. So I built Unclaimed for my best friend</title>
      <dc:creator>Ankith M</dc:creator>
      <pubDate>Sun, 04 Oct 2026 18:35:33 +0000</pubDate>
      <link>https://dev.to/ankithm1006/github-said-31-issues-were-open-0-were-actually-free-so-i-built-unclaimed-for-my-best-friend-39jh</link>
      <guid>https://dev.to/ankithm1006/github-said-31-issues-were-open-0-were-actually-free-so-i-built-unclaimed-for-my-best-friend-39jh</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;My best friend &lt;a href="https://github.com/SanjanaG-01" rel="noopener noreferrer"&gt;@SanjanaG-01&lt;/a&gt; and I are both taking part in Kestra Hacktober this October. Writing the code is not the hard part. Finding an issue nobody has taken yet is.&lt;/p&gt;

&lt;p&gt;On a busy repo, a fresh &lt;code&gt;good first issue&lt;/code&gt; gets its first "can I work on this?" comment within about 20 minutes. By the time you open it, it might already have a pull request, five people asking for it, or a maintainer saying it isn't ready yet. GitHub still shows it as &lt;strong&gt;open&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;So I measured it. GitHub's own search for open, unassigned good first issues in &lt;code&gt;kestra-io/kestra&lt;/code&gt; returned &lt;strong&gt;31 issues&lt;/strong&gt;. When I checked every one of them:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;21&lt;/strong&gt; already had a pull request (one had three)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;8&lt;/strong&gt; had people asking for them in the comments (up to 11 on a single issue)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;2&lt;/strong&gt; were marked "not ready for contributions"&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;0&lt;/strong&gt; were actually free&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That's why I built &lt;strong&gt;Unclaimed&lt;/strong&gt;. Paste a repository, and it tells you which issues are really &lt;strong&gt;Free&lt;/strong&gt;, which are &lt;strong&gt;Claimed&lt;/strong&gt;, which &lt;strong&gt;Have a PR&lt;/strong&gt;, which are &lt;strong&gt;Assigned&lt;/strong&gt; and which are &lt;strong&gt;Not ready&lt;/strong&gt;, with proof for each one. Instead of opening 30 tabs and reading every comment, my friend sees the free ones first.&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%2F27yyzssri3bmxb5uyn9u.jpg" 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%2F27yyzssri3bmxb5uyn9u.jpg" alt=" " width="799" height="475"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;Try it live: &lt;strong&gt;&lt;a href="https://unclaimed-production.up.railway.app" rel="noopener noreferrer"&gt;https://unclaimed-production.up.railway.app&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Paste any public repo, or a link to a single issue. It works beyond Kestra too: on &lt;code&gt;zed-industries/zed&lt;/code&gt; it found that the repo calls its label &lt;code&gt;.contrib/good first issue&lt;/code&gt;, and showed 4 of the 15 newest issues as free.&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%2Fpaqpbxpb1l22zeky5ur1.jpg" 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%2Fpaqpbxpb1l22zeky5ur1.jpg" alt=" " width="799" height="475"&gt;&lt;/a&gt;&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/Ankith-m1006" rel="noopener noreferrer"&gt;
        Ankith-m1006
      &lt;/a&gt; / &lt;a href="https://github.com/Ankith-m1006/unclaimed" rel="noopener noreferrer"&gt;
        unclaimed
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Find open-source issues nobody has taken yet. Gemma reads every issue thread for you.
    &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;Unclaimed&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;Find open-source issues nobody has taken yet.&lt;/p&gt;
&lt;p&gt;During Hacktoberfest, a fresh &lt;code&gt;good first issue&lt;/code&gt; can get its first "can I work on this?" within 20 minutes. By the time you open it, it may be assigned, already have a pull request, carry a "not ready for contributions" banner, or have five people asking for it in the comments. Unclaimed checks all of that for you.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;How it works&lt;/h2&gt;
&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Hard facts from the GitHub API.&lt;/strong&gt; For each open issue with the label you choose, it checks the assignees, linked pull requests (open or merged, from the issue timeline), and the "not ready for contributions" banner some projects add. Any of these settles the verdict without asking the model.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gemma reads the thread.&lt;/strong&gt; When nothing hard blocks the issue, the comment thread decides. Gemma 3 (4B), an open-weight model, runs on our own Ollama server and reads the issue and its…&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/Ankith-m1006/unclaimed" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


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

&lt;p&gt;Unclaimed works in two steps.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Facts from GitHub first.&lt;/strong&gt; For each issue it checks the assignees, the linked pull requests, and the "not ready" banner some projects add. If any of these settles it, the model is not needed at all.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Gemma reads the rest.&lt;/strong&gt; When nothing hard blocks an issue, the comments decide. &lt;strong&gt;Gemma 3 4B&lt;/strong&gt;, running in &lt;strong&gt;Ollama&lt;/strong&gt; on our own small server, reads the issue and its latest comments and returns structured JSON: who asked to be assigned, who says they're working on it, what a maintainer decided, a one-line summary of the work, and a difficulty estimate.&lt;/p&gt;

&lt;p&gt;Every claim comes with its proof: the person's real comment, their avatar, the date, and a link. You don't have to trust the model blindly.&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%2F3srmrdosqy3f9z0jd9sg.jpg" 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%2F3srmrdosqy3f9z0jd9sg.jpg" alt=" " width="799" height="475"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The stack is deliberately small: plain Node.js, one HTML page, Gemma 3 through Ollama, and two containers on Railway.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What went wrong (and how I fixed it):&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The 1B model wasn't good enough.&lt;/strong&gt; &lt;code&gt;gemma3:1b&lt;/code&gt; was fast, but it said "nobody asked" on an issue where five people had. Switching to &lt;code&gt;gemma3:4b&lt;/code&gt; fixed accuracy at about 6 to 16 seconds per issue on CPU.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Requests timing out.&lt;/strong&gt; The small model kept generating inside the JSON until it hit the timeout. Capping the answer length fixed it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;One rule made it worse.&lt;/strong&gt; Someone wrote "I think you missed assigning this to Omer", and it counted as a claim. When I told Gemma to only count people asking for themselves, it became too cautious and missed all five real claimants. A small code rule worked better: let the model be generous, then correct it with cheap checks you can verify.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hidden maintainers.&lt;/strong&gt; On freeCodeCamp, a maintainer's standard note was counted as six claims, because many maintainers keep their organisation membership private. Now anyone who labelled or assigned the issue counts as a maintainer.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The token that hid pull requests.&lt;/strong&gt; After I added a read-only GitHub token, issues with open PRs suddenly looked free. GitHub leaves pull request links out of the issue history for fine-grained tokens. The fix was to also search for PRs that mention the issue.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I checked it against 8 real issues I had read by hand, and it got all 8 right.&lt;/p&gt;

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

&lt;p&gt;Unclaimed reads other people's comments and usernames. With an open model on our own server, none of that goes to a closed AI company. There's no per-request bill either, so my friend can re-check as often as she likes during a race that is measured in minutes. And because it's open, she can run the whole thing on her own laptop with &lt;code&gt;ollama pull gemma3:4b&lt;/code&gt; and &lt;code&gt;node server.js&lt;/code&gt;. An open model helping people make their first open-source contribution felt like the right fit.&lt;/p&gt;

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

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




&lt;p&gt;Built with my best friend &lt;a href="https://github.com/SanjanaG-01" rel="noopener noreferrer"&gt;@SanjanaG-01&lt;/a&gt;. Good luck to everyone in Hacktober, and read the thread before you ask for an issue!&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Thank you&lt;/em&gt;&lt;/p&gt;

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