<?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: chamod  dhananjaya</title>
    <description>The latest articles on DEV Community by chamod  dhananjaya (@dhananjayachamod0754).</description>
    <link>https://dev.to/dhananjayachamod0754</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%2F4186738%2F83cc5ed3-2c57-4814-affb-e1f5ff7d158b.png</url>
      <title>DEV Community: chamod  dhananjaya</title>
      <link>https://dev.to/dhananjayachamod0754</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/dhananjayachamod0754"/>
    <language>en</language>
    <item>
      <title>I Need Money for My Studies, So I Built an Agent That Hunts for It While I Sleep</title>
      <dc:creator>chamod  dhananjaya</dc:creator>
      <pubDate>Thu, 22 Oct 2026 09:38:15 +0000</pubDate>
      <link>https://dev.to/dhananjayachamod0754/i-need-money-for-my-studies-so-i-built-an-agent-that-hunts-for-it-while-i-sleep-1mpi</link>
      <guid>https://dev.to/dhananjayachamod0754/i-need-money-for-my-studies-so-i-built-an-agent-that-hunts-for-it-while-i-sleep-1mpi</guid>
      <description>&lt;p&gt;&lt;em&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;/em&gt;&lt;/p&gt;

&lt;p&gt;Hi! I'm Chamod, a third-year IT student in Sri Lanka, and I need money for my studies.&lt;/p&gt;

&lt;p&gt;The money is out there. There are scholarships, research grants, paid remote internships, and hackathons with real cash prizes. The problem is finding it. Every search turns into twenty tabs, and half of them say "US residents only", or closed last month, or turn out to be a "Top 50 Hackathons of 2026" list that links to another list.&lt;/p&gt;

&lt;p&gt;So I did the laziest thing I could think of. I built an agent that hunts for money while I sleep.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Lazy Scholar&lt;/strong&gt; wakes up every night, searches the web for opportunities, and reads every result the way I would. It asks: can &lt;em&gt;I&lt;/em&gt; actually apply to this? Is it still open? Is there real money in it?&lt;/p&gt;

&lt;p&gt;By morning there's a short digest waiting for me at &lt;a href="https://lazyscholar.tech" rel="noopener noreferrer"&gt;lazyscholar.tech&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%2Fvi24acp7r142ax28zwqh.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%2Fvi24acp7r142ax28zwqh.png" alt="Lazy Scholar morning digest showing match cards" width="746" height="591"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Each match comes with the deadline, the prize or pay, a score out of 100 for how well it fits me, and the reasons behind that score. There's also an application email already drafted for the best match, so the hardest part of applying (starting) is done.&lt;/p&gt;

&lt;p&gt;It's built for me, but anyone can fork it, write their own profile, and get their own nightly digest.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Live:&lt;/strong&gt; &lt;a href="https://lazyscholar.tech" rel="noopener noreferrer"&gt;lazyscholar.tech&lt;/a&gt; (rebuilt every night)&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/dhananjaya-hbc" rel="noopener noreferrer"&gt;
        dhananjaya-hbc
      &lt;/a&gt; / &lt;a href="https://github.com/dhananjaya-hbc/lazy-scholar" rel="noopener noreferrer"&gt;
        lazy-scholar
      &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;Lazy Scholar&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;An agent that hunts for money for my studies while I sleep.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Every night, Lazy Scholar searches the web for scholarships, grants, paid internships and
hackathons with prizes. An open-weight &lt;strong&gt;Gemma&lt;/strong&gt; model reads each result against my profile and
decides whether I can actually apply. Each morning it publishes a short digest with a drafted
application email for the best match.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Live digest:&lt;/strong&gt; &lt;a href="https://lazyscholar.tech" rel="nofollow noopener noreferrer"&gt;https://lazyscholar.tech&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Built for the &lt;a href="https://dev.to/challenges/hacktoberfest-week3-2026-10-19" rel="nofollow"&gt;DEV Hacktoberfest Open-Source AI Challenge, Week 3 "Slow and Steady"&lt;/a&gt;.&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;div class="snippet-clipboard-content notranslate position-relative overflow-auto"&gt;&lt;pre class="notranslate"&gt;&lt;code&gt; GitHub Actions, every night (02:00 Sri Lanka time)
 │
 ├─ 1. Search    SerpApi runs 6 Google queries          search.py
 ├─ 2. Remember  SQLite skips links already judged      db.py
 ├─ 3. Judge     Gemma scores each new link → JSON      judge.py, llm.py
 ├─ 4. Digest    HTML page + email draft for top match  digest.py
 └─ 5. Publish   GitHub Pages at lazyscholar.tech       .github/workflows/nightly.yml
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Search.&lt;/strong&gt; &lt;a href="https://serpapi.com" rel="nofollow noopener noreferrer"&gt;SerpApi&lt;/a&gt; runs a few Google queries tuned…&lt;/p&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/dhananjaya-hbc/lazy-scholar" 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;Every night at 2 AM Sri Lanka time, GitHub Actions runs five small steps.&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%2Fu35ozupufrvgzv025g83.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%2Fu35ozupufrvgzv025g83.png" alt="Green GitHub Actions run of the Nightly hunt workflow" width="799" height="357"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Search.&lt;/strong&gt; &lt;a href="https://serpapi.com" rel="noopener noreferrer"&gt;SerpApi&lt;/a&gt; runs six Google searches tuned to me, such as remote AI internships, online hackathons with cash prizes, and scholarships open to Sri Lankan students. I exclude the big job boards, because a page with 50 jobs on it can't be judged as one opportunity.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Remember.&lt;/strong&gt; Every link goes into a small SQLite database with its verdict. If the agent has seen a link before, it skips it. GitHub Actions starts from a clean machine every run, so the database lives on a separate &lt;code&gt;data&lt;/code&gt; branch of the repo between nights.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Judge.&lt;/strong&gt; This is where Gemma comes in. For each new link, Gemma 4 (&lt;code&gt;gemma-4-26b-a4b-it&lt;/code&gt;) gets my profile, today's date and the search result, and has to answer in JSON:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{"eligible": true, "category": "hackathon", "score": 85,
 "deadline": "2026-11-30", "amount": "...", "reasons": ["..."]}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;It's stricter than I expected. It turned down an in-person hackathon in the UK because I can't travel, a hackathon whose deadline had passed eleven days earlier, and every "best hackathons" list page.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Digest.&lt;/strong&gt; A plain HTML page with one card per match, sorted by deadline. Gemma also writes the email draft, using placeholders like &lt;code&gt;[your CGPA]&lt;/code&gt; instead of my real details, because the page is public.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Publish.&lt;/strong&gt; GitHub Pages, on a free &lt;code&gt;.tech&lt;/code&gt; domain.&lt;/p&gt;

&lt;p&gt;Not everything worked the first time:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The first run took 22 minutes.&lt;/strong&gt; Each Gemma call takes about 17 seconds, and I was judging 49 links one at a time. Now it judges three at once, and since it never judges the same link twice, a normal night takes about three minutes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gemma gave everything a 95.&lt;/strong&gt; Five matches, five identical scores, which made ranking useless. I added clear score bands to the prompt (90+ only if the fit, the prize &lt;em&gt;and&lt;/em&gt; the deadline are all clear), and the next match came back as an 85.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;"New" matches weren't new.&lt;/strong&gt; GitHub's servers run on UTC, so at 5 AM in Colombo it was still "yesterday", and old matches kept showing up as new. One line in the workflow, &lt;code&gt;TZ: Asia/Colombo&lt;/code&gt;, fixed it.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I built this with help from Claude Code, an AI coding assistant. It wrote much of the code, and it helped me write this post. I made the decisions, tested every step against real searches, and reviewed each commit before it went in.&lt;/p&gt;

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

&lt;p&gt;My laptop is an M2 MacBook with 8 GB of RAM. It isn't running a 26-billion-parameter model any time soon. So right now Gemma runs on Google AI Studio's free tier.&lt;/p&gt;

&lt;p&gt;The important part is that I'm not stuck there. Gemma's weights are open, so the exact same model can run somewhere else, and in Lazy Scholar that's one setting:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;MODEL_PROVIDER&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;google    &lt;span class="c"&gt;# or: openrouter, ollama&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If the free tier changes, I can switch to OpenRouter. If my university gives me access to a GPU, or I get a better laptop one day, I can run the model locally and my profile never leaves my own machine. With a closed model, the API &lt;em&gt;is&lt;/em&gt; the product, and if it changes, the project breaks.&lt;/p&gt;

&lt;p&gt;For a student with no budget, that's the difference between a project that lasts and one that dies when a free trial ends.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Lazy Payoff
&lt;/h2&gt;

&lt;p&gt;In its first day, Lazy Scholar read &lt;strong&gt;76 different links&lt;/strong&gt; and found &lt;strong&gt;7 open opportunities&lt;/strong&gt; that actually fit me. One is an online AI hackathon whose listing shows a €50,000 prize pool, closing November 8.&lt;/p&gt;

&lt;p&gt;The whole thing runs on free tiers: six searches a night out of SerpApi's 250 a month, and a few Gemma calls.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Gemma:&lt;/strong&gt; Gemma 4 judges every opportunity and drafts the emails&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SerpApi:&lt;/strong&gt; powers the nightly search&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;.tech domain:&lt;/strong&gt; &lt;a href="https://lazyscholar.tech" rel="noopener noreferrer"&gt;lazyscholar.tech&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitHub Copilot:&lt;/strong&gt; the whole agent is automated with GitHub Actions (nightly cron, a &lt;code&gt;data&lt;/code&gt; branch for memory, Pages deploy)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Somewhere out there is a scholarship with my name on it. Lazy Scholar will find it. I'll be asleep.&lt;/p&gt;

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