<?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: Muhammad Tahir Hasni</title>
    <description>The latest articles on DEV Community by Muhammad Tahir Hasni (@muhammad_tahir_hasni).</description>
    <link>https://dev.to/muhammad_tahir_hasni</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3073250%2F1d1676b6-d851-431e-b926-0d76821c9f7c.png</url>
      <title>DEV Community: Muhammad Tahir Hasni</title>
      <link>https://dev.to/muhammad_tahir_hasni</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/muhammad_tahir_hasni"/>
    <language>en</language>
    <item>
      <title>How I Built an AI Agent That Runs My Inbox Automatically HireAI

## The Problem
I was spending 3+ hours every day just managing emails.
Reading. Sorting. Replying. Following up.
As a founder building HireAI, I couldn't afford that. So I built an 
AI age</title>
      <dc:creator>Muhammad Tahir Hasni</dc:creator>
      <pubDate>Sun, 29 Mar 2026 11:34:30 +0000</pubDate>
      <link>https://dev.to/muhammad_tahir_hasni/how-i-built-an-ai-agent-that-runs-my-inbox-automatically-hireai-the-problem-i-was-spending-3c1a</link>
      <guid>https://dev.to/muhammad_tahir_hasni/how-i-built-an-ai-agent-that-runs-my-inbox-automatically-hireai-the-problem-i-was-spending-3c1a</guid>
      <description></description>
    </item>
    <item>
      <title>AI Hiring Agent: Using Notion as a Live AI Control Tower</title>
      <dc:creator>Muhammad Tahir Hasni</dc:creator>
      <pubDate>Sun, 29 Mar 2026 03:29:38 +0000</pubDate>
      <link>https://dev.to/muhammad_tahir_hasni/ai-hiring-agent-using-notion-as-a-live-ai-control-tower-55cc</link>
      <guid>https://dev.to/muhammad_tahir_hasni/ai-hiring-agent-using-notion-as-a-live-ai-control-tower-55cc</guid>
      <description>&lt;p&gt;Every recruiter I've spoken to says the same thing: &lt;em&gt;"We're drowning in applications."&lt;/em&gt; Hundreds of resumes pour in for a single role. Most get skimmed for 6 seconds. Great candidates slip through the cracks. The process is slow, biased, and fundamentally broken.&lt;/p&gt;

&lt;p&gt;So I built an AI agent that fixes it — and I gave it a brain powered by Groq and a command center powered by Notion.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;AI Hiring Agent&lt;/strong&gt; is an autonomous recruitment system that turns a Notion database into a live AI control tower for hiring. No dashboards to build. No new tools to learn. Your team already lives in Notion — now your AI does too.&lt;/p&gt;

&lt;p&gt;Here's the core idea: you drop a candidate into a Notion table with their name, skills, experience, and the role they applied for. That's it. The agent picks them up automatically, sends their profile to a large language model (LLaMA 3.3 70B via Groq), and within seconds writes back a &lt;strong&gt;fit score (0–100)&lt;/strong&gt;, &lt;strong&gt;five tailored interview questions&lt;/strong&gt;, and a &lt;strong&gt;hire/reject recommendation with reasoning&lt;/strong&gt; — all directly into the same Notion row. The candidate's status flips from &lt;code&gt;Pending&lt;/code&gt; to &lt;code&gt;Reviewed&lt;/code&gt; without a single human click.&lt;/p&gt;

&lt;p&gt;This isn't a chatbot. It's not a form processor. It's a &lt;strong&gt;persistent, polling agent&lt;/strong&gt; that watches your hiring pipeline 24/7 and acts the moment new candidates appear. Think of it as a senior recruiter who never sleeps, never has an off day, and evaluates every single applicant with the same rigorous criteria.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem It Solves
&lt;/h2&gt;

&lt;p&gt;Traditional hiring is broken in three specific ways:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Volume kills quality.&lt;/strong&gt; A single job posting on LinkedIn can generate 200–500 applications. Recruiters physically cannot give each one the attention it deserves. The result? Pattern-matching on brand names and keyword scanning — not actual evaluation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Inconsistency is the norm.&lt;/strong&gt; The first resume reviewed on Monday morning gets a different level of scrutiny than the 80th one reviewed on Friday afternoon. Human fatigue introduces invisible bias that no training session can fully eliminate.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Speed matters and teams are slow.&lt;/strong&gt; Top candidates have a shelf life of about 10 days before they accept another offer. Most companies take 3–6 weeks to move from application to first interview. The best people are gone before you even open their resume.&lt;/p&gt;

&lt;p&gt;The AI Hiring Agent attacks all three problems simultaneously. Every candidate gets the same depth of analysis. Evaluations happen in seconds, not days. And because the agent runs continuously, there's zero lag between a candidate appearing and being evaluated.&lt;/p&gt;

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

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/fTEDSz0vj4k"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Watch the full walkthrough — from candidate insertion to AI-powered evaluation, all happening live inside Notion.&lt;/p&gt;

&lt;h2&gt;
  
  
  How Notion MCP Is the Core
&lt;/h2&gt;

&lt;p&gt;This is the part I want to emphasize: &lt;strong&gt;Notion isn't just the database here. It's the entire control plane.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In most AI projects, you'd build a separate frontend, wire up a REST API, design a dashboard, and bolt on a database. That's weeks of work before you even get to the AI logic. With Notion as the Model Context Protocol (MCP) layer, I collapsed all of that into a single surface.&lt;/p&gt;

&lt;p&gt;Notion serves as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The input layer&lt;/strong&gt; — recruiters add candidates directly where they already work&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The processing trigger&lt;/strong&gt; — the &lt;code&gt;Pending&lt;/code&gt; status acts as a job queue&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The output layer&lt;/strong&gt; — scores, questions, and recommendations appear in the same row&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The audit trail&lt;/strong&gt; — every evaluation is timestamped and visible to the entire team&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The human override&lt;/strong&gt; — managers can review AI decisions and change statuses manually&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The agent doesn't own the data. Notion does. The agent doesn't own the workflow. Your team does. The AI is a &lt;em&gt;participant&lt;/em&gt; in a human-controlled system, not a black box making decisions in isolation. That's the power of using Notion as a control tower — &lt;strong&gt;full transparency, zero context switching&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Architecture
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;┌─────────────────┐     poll every 60s     ┌───────────────────┐
│   Notion DB      │ ◄─────────────────── │  AI Hiring Agent   │
│   (Candidates)   │ ──────────────────► │  (Python)          │
└─────────────────┘  read Pending /       └─────────┬─────────┘
                     write Score,                    │
                     Questions,                      │ analyze
                     Recommendation,                 │ candidate
                     Status                          ▼
                                            ┌─────────────────┐
                                            │    Groq API      │
                                            │  (LLaMA 3.3 70B) │
                                            └─────────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No queues. No middleware. No infrastructure to maintain. Just a Python script, two APIs, and a Notion database doing the heavy lifting.&lt;/p&gt;

&lt;h2&gt;
  
  
  How It Works — Step by Step
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Step 1: Candidate Entry&lt;/strong&gt;&lt;br&gt;
A recruiter (or the included &lt;code&gt;sample_candidates.py&lt;/code&gt; script) adds a new row to the Notion database with the candidate's name, skills, years of experience, and target role. Status is set to &lt;code&gt;Pending&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2: Agent Polls&lt;/strong&gt;&lt;br&gt;
The agent queries the Notion API every 60 seconds, filtering for all rows where &lt;code&gt;Status = Pending&lt;/code&gt;. If none are found, it sleeps and checks again.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3: LLM Analysis&lt;/strong&gt;&lt;br&gt;
Each pending candidate's profile is packaged into a structured prompt and sent to Groq's API running LLaMA 3.3 70B. The model is instructed to return strict JSON with a score, reasoning, five interview questions, and a hire/reject recommendation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 4: Results Written Back&lt;/strong&gt;&lt;br&gt;
The agent parses the LLM response and writes the score, interview questions, and recommendation directly into the candidate's Notion row via the Notion API.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 5: Status Update&lt;/strong&gt;&lt;br&gt;
The candidate's status is flipped from &lt;code&gt;Pending&lt;/code&gt; to &lt;code&gt;Reviewed&lt;/code&gt;. The agent moves on to the next candidate. The recruiter sees results the next time they glance at the table.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tech Stack
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Technology&lt;/th&gt;
&lt;th&gt;Role&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Python 3.12&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Core agent runtime&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Notion API&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Database operations — read candidates, write evaluations&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Groq API&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;LLM inference (LLaMA 3.3 70B Versatile)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;python-dotenv&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Secure environment variable management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;requests&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;HTTP client for Notion API communication&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Key Features
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Autonomous polling&lt;/strong&gt; — runs 24/7, picks up new candidates automatically&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Structured AI evaluation&lt;/strong&gt; — score, reasoning, interview questions, and recommendation in strict JSON&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Direct Notion integration&lt;/strong&gt; — no external dashboards, no context switching&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Transparent scoring&lt;/strong&gt; — every decision includes written justification&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Role-aware analysis&lt;/strong&gt; — the LLM evaluates candidates relative to the specific role they applied for&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Batch processing&lt;/strong&gt; — handles multiple pending candidates per cycle&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Graceful error handling&lt;/strong&gt; — API failures don't crash the agent; it logs and retries&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sample data included&lt;/strong&gt; — &lt;code&gt;sample_candidates.py&lt;/code&gt; seeds 5 realistic test profiles&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  GitHub Repository
&lt;/h2&gt;

&lt;p&gt;The full source code is open and ready to run:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/muhammadtahirhasni/ai-hiring-agent-notion" rel="noopener noreferrer"&gt;muhammadtahirhasni/ai-hiring-agent-notion&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Clone it, add your API keys, and you'll have a working AI recruiter in under 5 minutes.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's Next
&lt;/h2&gt;

&lt;p&gt;This is a v1, and I'm already mapping the roadmap:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Slack/Discord notifications&lt;/strong&gt; — alert hiring managers the moment a high-scoring candidate is evaluated&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Resume parsing&lt;/strong&gt; — accept PDF uploads, extract structured data automatically, and feed it into the pipeline&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multi-model evaluation&lt;/strong&gt; — run candidates through multiple LLMs and aggregate scores for higher confidence&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Interview scheduling&lt;/strong&gt; — auto-send calendar invites to candidates who score above a threshold&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Notion kanban workflow&lt;/strong&gt; — move candidates through stages (Screened → Interview → Offer → Hired) with AI assistance at each step&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Custom scoring rubrics&lt;/strong&gt; — let teams define role-specific evaluation criteria that the LLM uses as grading guidelines&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;The future of hiring isn't about replacing recruiters. It's about giving them superpowers. Notion becomes the cockpit. AI becomes the co-pilot. Every candidate gets a fair, thorough, instant evaluation.&lt;/p&gt;

&lt;p&gt;That's what I built. That's what Notion MCP makes possible.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Built by &lt;a href="https://github.com/muhammadtahirhasni" rel="noopener noreferrer"&gt;Muhammad Tahir Hasni&lt;/a&gt; — Agentic AI Developer &amp;amp; Founder of HireAI&lt;/em&gt;&lt;/p&gt;

</description>
      <category>mcp</category>
      <category>devchallenge</category>
      <category>ai</category>
      <category>notionchallenge</category>
    </item>
  </channel>
</rss>
