<?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>Forem: Kourtney Lee</title>
    <description>The latest articles on Forem by Kourtney Lee (@kourtneylee1611).</description>
    <link>https://forem.com/kourtneylee1611</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%2F3842312%2F490cdedd-032c-4f69-9cac-2c390c2672ef.jpg</url>
      <title>Forem: Kourtney Lee</title>
      <link>https://forem.com/kourtneylee1611</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/kourtneylee1611"/>
    <language>en</language>
    <item>
      <title>AuroraPath - Chasing the northern lights | Earth Day Weekend Challenge</title>
      <dc:creator>Kourtney Lee</dc:creator>
      <pubDate>Mon, 20 Apr 2026 03:51:28 +0000</pubDate>
      <link>https://forem.com/kourtneylee1611/aurorapath-chasing-the-northern-lights-479l</link>
      <guid>https://forem.com/kourtneylee1611/aurorapath-chasing-the-northern-lights-479l</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for &lt;a href="https://dev.to/challenges/weekend-2026-04-16"&gt;Weekend Challenge: Earth Day Edition&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;AuroraPath&lt;/strong&gt; — a real-time, carbon-optimized dashboard for sustainable aurora borealis viewing. 🌌🌿&lt;/p&gt;

&lt;p&gt;Aurora hunting typically means driving long distances into rural darkness alone at night — one of the least carbon-efficient leisure activities imaginable. AuroraPath flips that script: it combines live NOAA space weather data with an Auth0-managed AI agent that generates travel recommendations prioritizing trains, buses, and carpooling over solo drives.&lt;/p&gt;

&lt;p&gt;Auth0 is the backbone of AuroraPath's trust model. It enforces two distinct identity layers:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Human identity (User Auth)&lt;/strong&gt; — Only authenticated users can invoke the AI. This prevents anonymous abuse of the Gemini API budget and ensures every recommendation is tied to a real account.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Machine identity (M2M Agent Auth)&lt;/strong&gt; — The Gemini AI orchestrator runs under its own dedicated Auth0 Machine-to-Machine credential, completely separate from user auth. The AI agent has a traceable, revocable identity — if the M2M token is rotated or revoked, the AI stops calling Gemini without touching a single user session.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The remaining features are built on top of this trust foundation:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Aurora Visibility Score (AVS)&lt;/strong&gt; — a deterministic 0–100 score from live NOAA G-scale indices and solar wind speed&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Real-time geomagnetic dashboard&lt;/strong&gt; — G/R/S-scale meters, solar wind, 24/48h forecasts, auto-refreshing from NOAA SWPC&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Interactive map&lt;/strong&gt; — latitude-based aurora visibility bands that update with geomagnetic conditions&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Green Path AI recommendations&lt;/strong&gt; — 3 nearby dark-sky spots with public transit directions, CO₂ saved vs. solo driving, and dark-sky ratings — only unlocked when Auth0 confirms the user's identity&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Per-user daily quota&lt;/strong&gt; — Upstash Redis tracks each Auth0 user's Gemini calls (10/day) using a hashed sub claim as the key&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;🔗 Project URL: &lt;a href="https://aurora-path.vercel.app/" rel="noopener noreferrer"&gt;https://aurora-path.vercel.app/&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;The dashboard loads with live NOAA data immediately. Click "Find My Green Path" — Auth0 Universal Login appears if you're not signed in. Once authenticated, the AI agent (operating under its own M2M credential) generates sustainable viewing routes near your GPS location.&lt;/p&gt;

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

&lt;p&gt;⚠️ &lt;strong&gt;Hackathon Note:&lt;/strong&gt; Green Path uses Google AI Studio free tier (100 req/day shared). If it returns an error, the daily quota may be exhausted. The Aurora dashboard always works regardless.&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/klee1611" rel="noopener noreferrer"&gt;
        klee1611
      &lt;/a&gt; / &lt;a href="https://github.com/klee1611/AuroraPath" rel="noopener noreferrer"&gt;
        AuroraPath
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      🌌 Carbon-optimized aurora sighting dashboard — Earth Day 2026 Hackathon
    &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;AuroraPath 🌌&lt;/h1&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Sustainable Aurora Viewing — Earth Day Hackathon 2026&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;A real-time, carbon-optimized dashboard for aurora borealis sightings
Built for the &lt;a href="https://dev.to/challenges/weekend-2026-04-16" rel="nofollow"&gt;dev.to Earth Day Weekend Challenge&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href="https://vercel.com/new/clone?repository-url=https://github.com/YOUR_REPO" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/7015516519ae874ab75537283bc75f86b3d46386ed994093a3790a1180913164/68747470733a2f2f76657263656c2e636f6d2f627574746f6e" alt="Deploy with Vercel"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;✨ What It Does&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;AuroraPath&lt;/strong&gt; combines live NOAA space weather data with Google Gemini AI to help you:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Track real-time aurora activity&lt;/strong&gt; — Aurora Visibility Score (AVS), G/R/S-scale meters, solar wind speed&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;See where auroras are visible&lt;/strong&gt; — Interactive map with latitude visibility bands that update with geomagnetic conditions&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Find sustainable viewing routes&lt;/strong&gt; — AI-generated "Green Path" recommendations with carbon savings, public transit options, and dark-sky ratings&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;🧬 Aurora Visibility Score (AVS)&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;An empirical model based on NOAA space weather indices:&lt;/p&gt;
&lt;div class="snippet-clipboard-content notranslate position-relative overflow-auto"&gt;&lt;pre class="notranslate"&gt;&lt;code&gt;AVS = (G-Scale/5 × 65) + (max(windSpeed - 300, 0)/500 × 25) + forecastBonus
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Score&lt;/th&gt;
&lt;th&gt;Level&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;80–100&lt;/td&gt;
&lt;td&gt;🌌 Excellent&lt;/td&gt;
&lt;td&gt;Visible at mid-latitudes (≥45°N)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;60–79&lt;/td&gt;
&lt;td&gt;✨ High&lt;/td&gt;
&lt;td&gt;Strong activity at high latitudes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;35–59&lt;/td&gt;
&lt;td&gt;🌠 Moderate&lt;/td&gt;
&lt;td&gt;Visible at polar regions (≥60°N)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10–34&lt;/td&gt;
&lt;td&gt;🌃&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&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/klee1611/AuroraPath" 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;h3&gt;
  
  
  Architecture
&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.amazonaws.com%2Fuploads%2Farticles%2Fqgrojlaf0ijk98un4uxj.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.amazonaws.com%2Fuploads%2Farticles%2Fqgrojlaf0ijk98un4uxj.png" alt="Architecture graph" width="800" height="375"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Two-Layer Auth0 Identity Model
&lt;/h3&gt;

&lt;p&gt;The most interesting architectural decision was treating user identity and AI agent identity as separate&lt;br&gt;
concerns:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Layer 1 — User Auth (Regular Web App)&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User → Auth0 Universal Login → Session cookie (httpOnly, SameSite)
                                      ↓
/api/green-path checks getSession() → rejects anonymous requests (401)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Layer 2 — Agent Auth (M2M Application)&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/api/green-path → Auth0 /oauth/token (client_credentials grant)
                        ↓
                M2M access token → logged as agentId in every response 
                (revocable independently of all user sessions)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Every AI recommendation response includes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
   &lt;/span&gt;&lt;span class="nl"&gt;"agentId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"auth0-m2m|..."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
   &lt;/span&gt;&lt;span class="nl"&gt;"generatedAt"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2026-04-19T..."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
   &lt;/span&gt;&lt;span class="nl"&gt;"quota"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"remaining"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"limit"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"resetAt"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"..."&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
 &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This makes the AI fully auditable: you know who asked (Auth0 user sub) and who acted (Auth0 M2M agent ID) for every call.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Aurora Visibility Score (AVS)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Rather than showing raw space-weather indices, a deterministic scoring model converts them to a 0–100 scale:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;AVS = (G-Scale/5 × 65) + (max(windSpeed − 300, 0)/500 × 25) + forecastBonus
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;G-Scale (65% weight)&lt;/strong&gt; — NOAA's geomagnetic storm index, the primary aurora driver&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Solar wind speed (25% weight)&lt;/strong&gt; — elevated wind (&amp;gt;300 km/s) correlates with aurora enhancement&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Forecast bonus (+3–5 pts)&lt;/strong&gt; — rewards stable or improving 24h conditions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The AVS gates the Green Path feature: users below AVS 10 ("None" activity) cannot trigger AI recommendations — there's no point generating eco-travel routes when there's nothing to see.&lt;/p&gt;

&lt;h3&gt;
  
  
  Gemini Green Path
&lt;/h3&gt;

&lt;p&gt;The Gemini prompt injects the AVS score, G-scale, and reverse-geocoded region (resolved server-side to protect user GPS privacy), then requests structured JSON directly — no markdown parsing needed. Before any Gemini call:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Auth0 session verified (user layer)&lt;/li&gt;
&lt;li&gt;Auth0 M2M token fetched (agent layer)&lt;/li&gt;
&lt;li&gt;Upstash Redis quota checked (ratelimit:{sha256(userId)[0:32]}:{YYYY-MM-DD})&lt;/li&gt;
&lt;li&gt;Input sanitized (sanitizeRegion() strips control chars, caps at 100 chars)&lt;/li&gt;
&lt;li&gt;Gemini called with 30s timeout&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Security Hardening
&lt;/h3&gt;

&lt;p&gt;Full 7-phase audit conducted:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Per-user Gemini quota via Upstash Redis (hashed sub, in-memory fallback for dev)&lt;/li&gt;
&lt;li&gt;IP rate limiting (30 req/min) on public /api/aurora&lt;/li&gt;
&lt;li&gt;Server-side Nominatim proxy — raw GPS never leaves the server&lt;/li&gt;
&lt;li&gt;5 HTTP security headers: HSTS, X-Frame-Options, X-Content-Type-Options, Referrer-Policy, Permissions-Policy&lt;/li&gt;
&lt;li&gt;CORS restricted to own AUTH0_BASE_URL origin&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;🔐 &lt;strong&gt;Best Use of Auth0 for Agents&lt;/strong&gt; - AuroraPath implements the full Auth0 for Agents pattern: a dedicated M2M application gives the Gemini AI orchestrator its own managed identity, completely decoupled from user auth.&lt;br&gt;
Every AI recommendation is traceable to both a human (user.sub) and a machine (agentId). The M2M credential can be rotated or revoked without impacting any user session. The per-user daily quota uses the Auth0 sub claim (SHA-256 hashed) as the Redis key — Auth0 identity drives resource governance end-to-end.&lt;/p&gt;

&lt;p&gt;✨ &lt;strong&gt;Best Use of Google Gemini&lt;/strong&gt; - Gemini 1.5 Flash powers the Green Path feature — generating 3 location-aware sustainable aurora viewing recommendations as structured JSON, dynamically conditioned on the live AVS score and geomagnetic context. The model is only invoked after passing both Auth0 authentication layers and the Upstash quota check.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>weekendchallenge</category>
      <category>ai</category>
      <category>auth0challenge</category>
    </item>
    <item>
      <title>Never Miss an AI Hackathon Again: Building an Autonomous Discovery Agent with Notion &amp; Brave MCP</title>
      <dc:creator>Kourtney Lee</dc:creator>
      <pubDate>Mon, 30 Mar 2026 00:10:15 +0000</pubDate>
      <link>https://forem.com/kourtneylee1611/never-miss-an-ai-hackathon-again-building-an-autonomous-discovery-agent-with-notion-brave-mcp-1kjg</link>
      <guid>https://forem.com/kourtneylee1611/never-miss-an-ai-hackathon-again-building-an-autonomous-discovery-agent-with-notion-brave-mcp-1kjg</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/notion-2026-03-04"&gt;Notion MCP Challenge&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;HackathonSniper&lt;/strong&gt; is an autonomous AI agent designed to eliminate "hackathon fatigue." If you're like me, you spend hours every month checking Devpost, DoraHacks, and Dev.to just to find one hackathon that fits your niche. &lt;/p&gt;

&lt;p&gt;HackathonSniper turns this manual hunt into an automated pipeline. It doesn't just "search"—it &lt;strong&gt;thinks&lt;/strong&gt;. It uses the Model Context Protocol (MCP) to bridge the gap between AI reasoning and the real web.&lt;/p&gt;

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

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

&lt;h2&gt;
  
  
  Show us the 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/klee1611" rel="noopener noreferrer"&gt;
        klee1611
      &lt;/a&gt; / &lt;a href="https://github.com/klee1611/HackathonSniper" rel="noopener noreferrer"&gt;
        HackathonSniper
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      AI-powered hackathon discovery agent using Brave Search + Notion MCP
    &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;Hackathon Sniper 🎯 — AI-Powered Hackathon Discovery Agent&lt;/h1&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Hackathon Sniper&lt;/strong&gt; is a TypeScript agent that automatically discovers, evaluates, and tracks hackathons using AI-powered analysis, real MCP server integration, and strict environment separation. Point it at the web; it returns only the hackathons worth entering.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;What it does in one sentence:&lt;/strong&gt; Hackathon Sniper searches the web for hackathons, scores each one against your criteria with a Groq-powered AI evaluator, and saves qualified results directly to a Notion database — all in a single command.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Features ✨&lt;/h2&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Intelligent Search 🔍&lt;/strong&gt; — Real Brave Search MCP server integration&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI Evaluation 🤖&lt;/strong&gt; — Groq-powered hackathon qualification analysis&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Notion Integration 📊&lt;/strong&gt; — Real Notion MCP server for storage and tracking&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Test Isolation 🎭&lt;/strong&gt; — Complete environment isolation for testing (zero external dependencies)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fast Development ⚡&lt;/strong&gt; — Hot reload, comprehensive Makefile, pnpm package management&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Type Safety 🛡️&lt;/strong&gt; — End-to-end TypeScript with Zod schema validation&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Robust Testing&lt;/strong&gt;…&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/klee1611/HackathonSniper" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;h3&gt;
  
  
  The Technical Architecture
&lt;/h3&gt;

&lt;p&gt;The agent follows a rigorous 3-phase lifecycle:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;🔍 The Hunt (Brave Search MCP)&lt;/strong&gt;: It performs targeted searches across the web to find new hackathon announcements, even those buried in blog posts or obscure landing pages.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;🤖 The Vetting (Groq LLM)&lt;/strong&gt;: Every discovery is analyzed by a Llama-3 model. It evaluates the prize pool, solo-friendliness, AI relevance, and proximity to the deadline.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;📊 The Storage (Notion MCP)&lt;/strong&gt;: Qualified opportunities are instantly synced to a beautifully structured Notion database, complete with metadata, deadlines, and AI-generated summaries.&lt;/li&gt;
&lt;/ol&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.amazonaws.com%2Fuploads%2Farticles%2Fyqoxsyaoj3udjkhz6gmo.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.amazonaws.com%2Fuploads%2Farticles%2Fyqoxsyaoj3udjkhz6gmo.png" alt="tech_architecture" width="204" height="761"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How I Used Notion MCP
&lt;/h2&gt;

&lt;p&gt;The &lt;strong&gt;Notion MCP Server&lt;/strong&gt; (&lt;code&gt;@notionhq/notion-mcp-server&lt;/code&gt;) is the "nervous system" of this project. It transforms a simple script into a powerful productivity tool by allowing the AI to interact with my Notion workspace as if it were a native application.&lt;/p&gt;

&lt;p&gt;Instead of writing complex, boilerplate-heavy API calls to the Notion REST API, the Notion MCP is integrated. This allowed the agent to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Dynamic Schema Mapping&lt;/strong&gt;: The agent automatically maps structured AI evaluation objects to Notion database properties (Dates, Checkboxes, URLs, and Rich Text).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Process Isolation&lt;/strong&gt;: By using the MCP &lt;code&gt;StdioClientTransport&lt;/code&gt;, the Notion integration runs in its own isolated process, managed entirely by the Model Context Protocol.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automated Workflows&lt;/strong&gt;: The agent uses the &lt;code&gt;create_notion_page&lt;/code&gt; tool provided by the MCP server to dynamically populate my "Hackathon Scout" dashboard.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Wrapping Up
&lt;/h3&gt;

&lt;p&gt;This integration unlocks a "set and forget" workflow. I can run HackathonSniper as a background task, and my Notion workspace stays updated with a high-signal, low-noise list of opportunities. It’s not just data entry; it’s an &lt;strong&gt;autonomous data clerk&lt;/strong&gt; powered by Notion MCP.&lt;/p&gt;

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