<?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: Malay-dev</title>
    <description>The latest articles on DEV Community by Malay-dev (@malaydev).</description>
    <link>https://dev.to/malaydev</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%2F956164%2Fc0538d99-4b9b-4554-9877-357f79361d4a.png</url>
      <title>DEV Community: Malay-dev</title>
      <link>https://dev.to/malaydev</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/malaydev"/>
    <language>en</language>
    <item>
      <title>The Ticket Sold Out While I Was Lazyinhh... So I Built Clutch.</title>
      <dc:creator>Malay-dev</dc:creator>
      <pubDate>Sun, 25 Oct 2026 16:38:24 +0000</pubDate>
      <link>https://dev.to/malaydev/the-ticket-sold-out-while-i-was-lazyinhh-so-i-built-clutch-542f</link>
      <guid>https://dev.to/malaydev/the-ticket-sold-out-while-i-was-lazyinhh-so-i-built-clutch-542f</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;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;I missed GDG DevFest Bengaluru by one day. The announcement sat unread in my Discord (cause too much clutter and procrastination on reading all those) while the last ticket sold.&lt;/p&gt;

&lt;p&gt;I don't need more notifications. I need something that knows what I can't afford to miss.&lt;/p&gt;

&lt;p&gt;Clutch watches your communities — Discord, Luma, KonfHub, Hacktoberfest, RSS - scores every event against your interests using Gemma 3 locally, and puts only what matters on your Google Calendar with colors that escalate as deadlines approach.&lt;/p&gt;

&lt;p&gt;330+ events. 5 sources. One calendar || feed || any form factor.&lt;/p&gt;

&lt;h3&gt;
  
  
  Gemma knows the difference
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Profile: AI/ML, open source, hackathons, robotics, Bengaluru

[HIGH    ] 0.79  Build Agents with Omega (Bengaluru)
[HIGH    ] 0.77  Physical AI Demo Night (Bengaluru)
[HIGH    ] 0.76  Hacktober Hack (Bengaluru)
[INFO    ] 0.19  10 Tips for CSS Grid Layouts
[INFO    ] 0.05  Flower Bouquet Out Of Pipecleaners
[INFO    ] 0.05  Social dynamics of toxic metal in medieval Europe
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;blockquote&gt;
&lt;p&gt;A flower bouquet workshop never even reaches the model. Pre-filter catches it.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;
  
  
  Calendar does the nagging
&lt;/h3&gt;

&lt;p&gt;Google Calendar's native colors. No emojis. Time drives the escalation.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Time left&lt;/th&gt;
&lt;th&gt;Color&lt;/th&gt;
&lt;th&gt;Suffix&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&amp;gt;7 days&lt;/td&gt;
&lt;td&gt;Blue&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3-7 days&lt;/td&gt;
&lt;td&gt;Orange&lt;/td&gt;
&lt;td&gt;[5d left]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;lt;3 days&lt;/td&gt;
&lt;td&gt;Red&lt;/td&gt;
&lt;td&gt;[TOMORROW]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Past&lt;/td&gt;
&lt;td&gt;gone&lt;/td&gt;
&lt;td&gt;auto-deleted&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&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%2Fpo90d47ijps6ffr8lox7.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%2Fpo90d47ijps6ffr8lox7.png" alt="Google Calendar showing Clutch Radar with orange and red color-coded events approaching their deadlines" width="800" height="409"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  The pipeline
&lt;/h3&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%2F77tp9f3p6kg2wzg32tai.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%2F77tp9f3p6kg2wzg32tai.png" alt="Clutch architecture diagram showing connectors flowing through pre-filter and Gemma scoring to Google Calendar, backed by Tiger Data and Temporal" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Connectors
&lt;/h3&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%2F562bz750q70vp9nxe3qd.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%2F562bz750q70vp9nxe3qd.png" alt="Terminal output of clutch connectors command showing 5 auto-discovered plugins - discord, hacktoberfest, konfhub, luma, and rss" width="799" height="200"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Source&lt;/th&gt;
&lt;th&gt;Events&lt;/th&gt;
&lt;th&gt;Auth&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Luma&lt;/td&gt;
&lt;td&gt;90&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;KonfHub&lt;/td&gt;
&lt;td&gt;128&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hacktoberfest&lt;/td&gt;
&lt;td&gt;80&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;RSS&lt;/td&gt;
&lt;td&gt;32&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Discord&lt;/td&gt;
&lt;td&gt;varies&lt;/td&gt;
&lt;td&gt;Bot token&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;Every connector is a standalone pip package. &lt;code&gt;pip install&lt;/code&gt; and Clutch discovers it. We want the community to add Telegram, Slack, GitHub, Meetup — any source where opportunities hide in noise.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;
  
  
  Escalation in action
&lt;/h3&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%2F3os9cl4noyjmqk68mt33.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%2F3os9cl4noyjmqk68mt33.png" alt="Terminal output of clutch escalate showing time-based color changes - red for expired and today, orange for events 4 days away" width="800" height="344"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  The radar
&lt;/h3&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%2Fsdimhbmc7ca1dal8hkpc.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%2Fsdimhbmc7ca1dal8hkpc.png" alt="Terminal output of clutch radar showing a priority table with 20 scored events sorted by relevance" width="800" height="429"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Temporal workflow
&lt;/h3&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%2F6npwvtyxjbccfti67623.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%2F6npwvtyxjbccfti67623.png" alt="Temporal UI showing the Clutch one-shot workflow with 6 completed activities - fetch, dedup, score, persist, and calendar sync" width="800" height="397"&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/Malay-dev" rel="noopener noreferrer"&gt;
        Malay-dev
      &lt;/a&gt; / &lt;a href="https://github.com/Malay-dev/clutch" rel="noopener noreferrer"&gt;
        clutch
      &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;Clutch&lt;/h1&gt;
&lt;/div&gt;

&lt;p&gt;The AI that won't let you miss what matters.&lt;/p&gt;

&lt;p&gt;Clutch is a local-first AI agent that monitors your communities — Discord, Luma, KonfHub, Hacktoberfest, RSS — scores every event against your interest profile using Gemma 3, and puts what matters on your Google Calendar with escalating color-coded reminders.&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;5 Connectors (330+ events)
  -&amp;gt; Pre-filter (keyword match, drops obvious noise)
  -&amp;gt; Gemma 3 scoring (interest, urgency, scarcity, impact)
  -&amp;gt; Google Calendar (time-based color escalation)
  -&amp;gt; Temporal (durable 4h cycle, survives restarts)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Events start blue on your calendar. As deadlines approach, they turn orange, then red. Past events are auto-deleted. You never configure this — time does it.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Quick Start&lt;/h2&gt;
&lt;/div&gt;

&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;&lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; Prerequisites: Python 3.12+, Ollama with gemma3:4b, Podman (optional)&lt;/span&gt;
ollama pull gemma3:4b
&lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; Clone and install&lt;/span&gt;
git clone https://github.com/Malay-dev/clutch.git
&lt;span class="pl-c1"&gt;cd&lt;/span&gt; clutch
uv venv &lt;span class="pl-k"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="pl-c1"&gt;source&lt;/span&gt; .venv/bin/activate
uv pip install -e &lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;"&lt;/span&gt;.[dev]&lt;span class="pl-pds"&gt;"&lt;/span&gt;&lt;/span&gt;
uv pip install -e connectors/rss&lt;/pre&gt;…
&lt;/div&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/Malay-dev/clutch" 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;&lt;strong&gt;Gemma 3 4B via Ollama&lt;/strong&gt; — local inference, no cloud. Four-dimension scoring (interest, urgency, scarcity, impact) as structured JSON. Batch mode, 5 events per LLM call. Pre-filter drops noise before the model sees anything.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The prompt does the heavy lifting — it checks attending eligibility (same city? online? worth traveling?), penalizes expired events, and scores conservatively. Most things are noise. Only what you can realistically act on gets through.&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Scoring guide baked into the prompt:
- Generic blog post: 0.1-0.2
- Hackathon in your city matching interests: 0.8+
- Great topic but wrong city: 0.2-0.4 (unless online)
- Online workshop matching interests: 0.6-0.8
- Expired event: urgency 0.0 regardless of topic
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Temporal&lt;/strong&gt; — 6-activity durable workflow. Connectors fetch in parallel. If one fails, the rest proceed. 4-hour durable timer survives restarts. Every activity visible in the Temporal UI. - Durable code, best observability, native OSS&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Google Calendar API&lt;/strong&gt; — native color IDs, time-based escalation, triple dedup (in-memory + SQLite + Calendar-side), capped at 10 active events. (Google here, but any calendar app with API support could be used)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;pgvector (Tiger Data)&lt;/strong&gt; — Temporal persistence backend + future interest graph. - all in one&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Podman&lt;/strong&gt; — full stack in containers. Ollama native on host for GPU.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Your interest profile is a YAML file. Your data stays on your machine. The model runs on your hardware. That's the whole point.&lt;/p&gt;
&lt;/blockquote&gt;

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

&lt;blockquote&gt;
&lt;p&gt;Clutch monitors your Discord messages, your event feeds, your community channels. That is attention data. With Gemma running locally, none of it leaves your machine.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A closed API would mean every community message gets shipped somewhere you don't control. Open weight means offline, on a plane, behind a firewall. Swap the model whenever — Gemma today, Llama tomorrow.&lt;/p&gt;

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

&lt;p&gt;Before: 6 Discord servers, 3 Telegram groups, Luma, KonfHub, RSS. Checked manually. Usually too late.&lt;/p&gt;

&lt;p&gt;After: I check my calendar.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I used Clutch this week to track this hackathon's own deadline. It worked.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Ship your own
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;Here's the thing — don't run this on your MacBook while you work. Deploy it on a Raspberry Pi, an old laptop, any machine gathering dust. Let it run 24/7 as your personal attention server. Gemma runs slow on a Pi — ~30s per event instead of 4. But for a 4-hour cycle, that's fine. Slow and steady is literally the point.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;We move fast. The tech world moves faster. Conferences sell out. CFPs close quietly. Hackathon deadlines pass while you're "going to get to it."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Don't just read about it. Deploy it. Level up.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Set it up once. Forget about it. Your calendar fills itself with what matters. Opportunities stop slipping through the cracks while you're busy shipping code or, you know, lazying.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Gemma&lt;/strong&gt; — Core scoring engine. Local inference, batch mode, structured output. 100+ events per cycle on consumer hardware. #Gemma&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Temporal&lt;/strong&gt; — 6-activity workflow. Parallel fetches, retries, durable timers, full UI observability. #Temporal&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tiger Data&lt;/strong&gt; — pgvector as Temporal backend and interest graph store. #Tiger&lt;/p&gt;

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