This is a submission for the Hacktoberfest Weekend Challenge: Build for a Friend
What I Built
My best friend @SanjanaG-01 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.
On a busy repo, a fresh good first issue 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 open.
So I measured it. GitHub's own search for open, unassigned good first issues in kestra-io/kestra returned 31 issues. When I checked every one of them:
- 21 already had a pull request (one had three)
- 8 had people asking for them in the comments (up to 11 on a single issue)
- 2 were marked "not ready for contributions"
- 0 were actually free
That's why I built Unclaimed. Paste a repository, and it tells you which issues are really Free, which are Claimed, which Have a PR, which are Assigned and which are Not ready, with proof for each one. Instead of opening 30 tabs and reading every comment, my friend sees the free ones first.
Demo
Try it live: https://unclaimed-production.up.railway.app
Paste any public repo, or a link to a single issue. It works beyond Kestra too: on zed-industries/zed it found that the repo calls its label .contrib/good first issue, and showed 4 of the 15 newest issues as free.
Code
Ankith-m1006
/
unclaimed
Find open-source issues nobody has taken yet. Gemma reads every issue thread for you.
Unclaimed
Find open-source issues nobody has taken yet.
During Hacktoberfest, a fresh good first issue 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.
How it works
- Hard facts from the GitHub API. 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.
- Gemma reads the thread. 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β¦
How I Built It
Unclaimed works in two steps.
1. Facts from GitHub first. 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.
2. Gemma reads the rest. When nothing hard blocks an issue, the comments decide. Gemma 3 4B, running in Ollama 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.
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.
The stack is deliberately small: plain Node.js, one HTML page, Gemma 3 through Ollama, and two containers on Railway.
What went wrong (and how I fixed it):
-
The 1B model wasn't good enough.
gemma3:1bwas fast, but it said "nobody asked" on an issue where five people had. Switching togemma3:4bfixed accuracy at about 6 to 16 seconds per issue on CPU. - Requests timing out. The small model kept generating inside the JSON until it hit the timeout. Capping the answer length fixed it.
- One rule made it worse. 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.
- Hidden maintainers. 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.
- The token that hid pull requests. 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.
I checked it against 8 real issues I had read by hand, and it got all 8 right.
Why Does Open Innovation Matter?
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 ollama pull gemma3:4b and node server.js. An open model helping people make their first open-source contribution felt like the right fit.
Prize Categories
Best Use of Gemma
Built with my best friend @SanjanaG-01. Good luck to everyone in Hacktober, and read the thread before you ask for an issue!
Thank you



Top comments (0)