<?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: Himanshu Kumar</title>
    <description>The latest articles on DEV Community by Himanshu Kumar (@himanshu_748).</description>
    <link>https://dev.to/himanshu_748</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%2F3226847%2F8b999f0b-76e8-4a5b-a87d-449ab82832bc.png</url>
      <title>DEV Community: Himanshu Kumar</title>
      <link>https://dev.to/himanshu_748</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/himanshu_748"/>
    <language>en</language>
    <item>
      <title>SOLSTICE — The Longest Day: a platformer where light is your only resource</title>
      <dc:creator>Himanshu Kumar</dc:creator>
      <pubDate>Mon, 08 Jun 2026 07:03:46 +0000</pubDate>
      <link>https://dev.to/himanshu_748/solstice-the-longest-day-a-platformer-where-light-is-your-only-resource-6d8</link>
      <guid>https://dev.to/himanshu_748/solstice-the-longest-day-a-platformer-where-light-is-your-only-resource-6d8</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/june-game-jam-2026-06-03"&gt;June Solstice Game Jam&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;SOLSTICE — The Longest Day&lt;/strong&gt; is a short, atmospheric platformer built around one idea: &lt;strong&gt;your light is your only resource.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It's the eve of the June solstice — the year's hinge between the longest day and the longest night — and the sun is failing. You play a small wanderer carrying the last ember of daylight. That glow does three jobs at once:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;It lets you see.&lt;/strong&gt; The world is dark; you move inside a soft pool of light that shrinks as it drains.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It's your lifeline.&lt;/strong&gt; Shadow drains it faster — let it gutter out and you're nearly blind.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It's your tool.&lt;/strong&gt; Spend it in a &lt;strong&gt;Sunburst&lt;/strong&gt; to bloom pale, ghostly platforms into something solid, light distant beacons, and push back the dark.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You carry that light across four hand-built levels — &lt;strong&gt;Dusk → Twilight → Deep Night → The Turning&lt;/strong&gt; — as the darkness deepens, until you reach the altar and rekindle the dawn.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;My goal &amp;amp; the theme:&lt;/strong&gt; the solstice is the exact instant light and dark trade places, so I wanted light to be something you physically &lt;em&gt;negotiate&lt;/em&gt; the whole game rather than just a backdrop. Spend too much and you're stranded in the dark; hoard it and the path stays shut. The level arc traces the day itself — a descent into the longest night, a turning point, and a climb into a dawn that floods the screen with gold.&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.amazonaws.com%2Fuploads%2Farticles%2F0dd6tik7zyfwfx1npzf3.gif" 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%2F0dd6tik7zyfwfx1npzf3.gif" alt=" " width="520" height="293"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;▶ &lt;strong&gt;Play it in your browser (desktop &amp;amp; mobile):&lt;/strong&gt; &lt;a href="https://hyperagent.com/s/A_Xul17aTbCIAsAcvG8A-w" rel="noopener noreferrer"&gt;https://hyperagent.com/s/A_Xul17aTbCIAsAcvG8A-w&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;

&lt;p&gt;The entire game is a &lt;strong&gt;single, self-contained &lt;code&gt;index.html&lt;/code&gt;&lt;/strong&gt; — HTML5 Canvas 2D + vanilla JavaScript, &lt;strong&gt;no engine, no libraries, no build step&lt;/strong&gt;. One file you can read top to bottom.&lt;/p&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/himanshu748" rel="noopener noreferrer"&gt;
        himanshu748
      &lt;/a&gt; / &lt;a href="https://github.com/himanshu748/solstice" rel="noopener noreferrer"&gt;
        solstice
      &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;SOLSTICE — The Longest Day&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;A short, atmospheric platformer where &lt;strong&gt;your light is your only resource&lt;/strong&gt;. Built for the &lt;a href="https://dev.to/challenges/june-game-jam-2026-06-03" rel="nofollow"&gt;DEV June Solstice Game Jam&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;▶ Play:&lt;/strong&gt; &lt;a href="https://hyperagent.com/s/A_Xul17aTbCIAsAcvG8A-w" rel="nofollow noopener noreferrer"&gt;https://hyperagent.com/s/A_Xul17aTbCIAsAcvG8A-w&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;On the eve of the solstice the sun is failing. Carry the last ember of daylight across four levels — &lt;strong&gt;Dusk → Twilight → Deep Night → The Turning&lt;/strong&gt; — and rekindle the dawn. Your light lets you see, slowly drains, and is spent in a &lt;strong&gt;Sunburst&lt;/strong&gt; to bloom platforms, light beacons, and push back the dark.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Controls&lt;/h2&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Move:&lt;/strong&gt; ← → or A D&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Jump:&lt;/strong&gt; Space or W&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sunburst:&lt;/strong&gt; J or Shift&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pause:&lt;/strong&gt; P · &lt;strong&gt;Restart:&lt;/strong&gt; R · &lt;strong&gt;Mute:&lt;/strong&gt; M&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mobile:&lt;/strong&gt; on-screen buttons — play in landscape&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Tech&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;One self-contained &lt;code&gt;index.html&lt;/code&gt; — HTML5 Canvas 2D + vanilla JavaScript. No engine, no libraries, no build step. Real-time 2D lighting via canvas compositing, fixed-timestep platformer physics (coyote time, jump buffering, variable jump height)…&lt;/p&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/himanshu748/solstice" 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;Lighting is the heart of it.&lt;/strong&gt; Each frame I draw the world normally, then build a separate &lt;em&gt;darkness&lt;/em&gt; layer: fill it near-black, then &lt;strong&gt;punch holes&lt;/strong&gt; in it with radial gradients at every light source (you, motes, beacons, lit platforms) using &lt;code&gt;globalCompositeOperation = 'destination-out'&lt;/code&gt;. Composited over the scene, that gives the soft pool-of-light look; a second additive pass paints warm bloom back in. Platforms that are &lt;em&gt;only solid when lit&lt;/em&gt; simply test, each frame, whether their center falls inside a light radius — that one check is the whole core mechanic.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Game feel got real attention:&lt;/strong&gt; a fixed-timestep loop, coyote time, jump buffering, variable jump height, squash-and-stretch on the character, a little screen shake on landings and Sunbursts, and an eased camera. Small touches, but they're the difference between a canvas platformer feeling crisp vs. stiff.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Audio is fully synthesized&lt;/strong&gt; with the Web Audio API — no sound files. A warm, consonant sine pad drones under everything, with gentle chimes for motes and a soft whoosh for the Sunburst.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It's responsive &amp;amp; mobile-first:&lt;/strong&gt; the canvas adapts its aspect ratio to fill any screen, and the touch controls are true multi-touch so you can move and jump at the same moment (with &lt;code&gt;touch-action: none&lt;/code&gt; so the browser doesn't hijack the second finger as a zoom).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A few things I wrestled with:&lt;/strong&gt; keeping a draining-resource game &lt;em&gt;fair&lt;/em&gt; (generous minimum light, forgiving beacon checkpoints); a collision bug where a rising platform briefly overlapped the player's feet and flung them sideways; and tuning the dawn so it reads as a warm sunrise payoff instead of a blinding flash.&lt;/p&gt;

&lt;p&gt;Thanks for playing, and happy solstice. ☀️&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>gamechallenge</category>
      <category>gamedev</category>
    </item>
    <item>
      <title>Python Automation Training Toolkit: from abandoned group project to browser-first AI workspace</title>
      <dc:creator>Himanshu Kumar</dc:creator>
      <pubDate>Tue, 02 Jun 2026 08:19:26 +0000</pubDate>
      <link>https://dev.to/himanshu_748/python-automation-training-toolkit-from-abandoned-script-to-browser-first-automation-workspace-2f6h</link>
      <guid>https://dev.to/himanshu_748/python-automation-training-toolkit-from-abandoned-script-to-browser-first-automation-workspace-2f6h</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/github-2026-05-21"&gt;GitHub Finish-Up-A-Thon Challenge&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;I finished &lt;strong&gt;Python Automation Training Toolkit&lt;/strong&gt;, a Python automation project that had useful pieces but never really became a product.&lt;/p&gt;

&lt;p&gt;It started as a scattered training toolkit: scripts, automation helpers, experiment-style UI, and a lot of good intent. The project had been treated like something that might someday be cleaned up. For this challenge, I turned it into a browser-first automation workspace that someone can actually open, understand, run, and extend.&lt;/p&gt;

&lt;p&gt;The finished product now includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Hugging Face model workflows&lt;/strong&gt; for text summaries and image captioning&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AWS S3 and EC2 controls&lt;/strong&gt; separated by service so actions are clear&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Browser-native hand gesture tracking&lt;/strong&gt; using the user's camera directly in the browser&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Location utilities&lt;/strong&gt; with cleaner formatting and no stale OpenURL-style flow&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Readiness and configuration checks&lt;/strong&gt; with secret redaction&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A FastAPI backend and modern web UI&lt;/strong&gt; instead of desktop-only UI experiments&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A monorepo layout&lt;/strong&gt; with &lt;code&gt;apps/api&lt;/code&gt;, &lt;code&gt;apps/web&lt;/code&gt;, docs, and tests&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Repository: &lt;a href="https://github.com/himanshu748/python-automation-training-toolkit" rel="noopener noreferrer"&gt;https://github.com/himanshu748/python-automation-training-toolkit&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;Public video walkthrough: &lt;a href="https://youtu.be/FiWRwTloN_s" rel="noopener noreferrer"&gt;https://youtu.be/FiWRwTloN_s&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The walkthrough shows the actual product flow: the landing page, dashboard, Hugging Face model tools, separate cloud controls, live browser gesture tracking, location utilities, and the polished browser UI.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why This Project Needed a Finish-Up
&lt;/h2&gt;

&lt;p&gt;This was not a greenfield build. That is what made it interesting.&lt;/p&gt;

&lt;p&gt;The hardest part was not writing one new feature. The hard part was taking a project with scattered ideas and making all of it feel intentional.&lt;/p&gt;

&lt;p&gt;At the beginning, the toolkit felt like a collection of things that technically worked but did not belong together yet. Some parts pointed toward a desktop app. Some parts were scripts. Some parts were automation demos. Some parts were missing the user-facing polish that would make someone trust the project.&lt;/p&gt;

&lt;p&gt;So I treated the finish-up as a product rescue:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What should the first screen communicate?&lt;/li&gt;
&lt;li&gt;Which workflows deserve their own pages?&lt;/li&gt;
&lt;li&gt;What should be removed because it makes the app feel old or confusing?&lt;/li&gt;
&lt;li&gt;How should secrets be handled so the project is safe to share?&lt;/li&gt;
&lt;li&gt;How can the original automation spirit stay intact while the experience becomes cleaner?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The answer was to make the browser the main product surface.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Comeback Story
&lt;/h2&gt;

&lt;p&gt;This was originally a group-style project that got left behind. Instead of letting that be the end of it, I finished it solo and gave it a real product shape.&lt;/p&gt;

&lt;p&gt;The original idea was still worth saving: a Python toolkit for useful automation workflows. But the implementation needed a clearer language. It needed to stop feeling like a folder of experiments and start feeling like a workspace.&lt;/p&gt;

&lt;p&gt;That meant rebuilding the interface, separating services into proper pages, improving the README, removing old UI references, adding browser-controlled camera interactions, replacing older model assumptions with Hugging Face, and making the backend safer around configuration output.&lt;/p&gt;

&lt;p&gt;The final project still feels like Python automation. It just no longer asks the user to imagine the product around it.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Changed
&lt;/h2&gt;

&lt;p&gt;The biggest upgrades were:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Replaced old desktop-style UI direction with a browser-first web workspace&lt;/li&gt;
&lt;li&gt;Organized the project into a clearer monorepo structure&lt;/li&gt;
&lt;li&gt;Added service-specific pages instead of cramming everything into one screen&lt;/li&gt;
&lt;li&gt;Added Hugging Face model wrappers for text and vision workflows&lt;/li&gt;
&lt;li&gt;Added live hand gesture tracking in the browser&lt;/li&gt;
&lt;li&gt;Improved cloud actions with separate AWS S3 and EC2 controls&lt;/li&gt;
&lt;li&gt;Removed stale flows that made the product feel unfinished&lt;/li&gt;
&lt;li&gt;Improved output formatting and redacted sensitive configuration values&lt;/li&gt;
&lt;li&gt;Added tests for model wrappers, cloud calls, doctor output, API routes, and secret safety&lt;/li&gt;
&lt;li&gt;Updated documentation to explain setup, environment variables, and workflows&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What I Am Proud Of
&lt;/h2&gt;

&lt;p&gt;The best part is that the finished app is not just a demo page for a challenge. It is a real product surface for the original toolkit.&lt;/p&gt;

&lt;p&gt;A user can land on the app, understand the major workflows, move through separate pages, run model tools, inspect cloud actions, try browser gestures, and see structured output. That is a big jump from a project that previously needed context to make sense.&lt;/p&gt;

&lt;p&gt;I also like that the final version keeps the project practical. It does not hide behind a landing page. The interface is there to help people run automation tasks.&lt;/p&gt;

&lt;h2&gt;
  
  
  My Experience With GitHub Copilot
&lt;/h2&gt;

&lt;p&gt;GitHub Copilot helped most during the messy middle of the finish-up: the part where the project was no longer broken, but not yet polished.&lt;/p&gt;

&lt;p&gt;It helped with repetitive UI patterns, test scaffolding, API route cleanup, and checking for old references that should not survive into the final product. It was useful as a second pair of eyes while I turned disconnected pieces into a consistent workspace.&lt;/p&gt;

&lt;p&gt;The biggest lesson was that finishing a project is different from starting one. Starting is about possibility. Finishing is about decisions.&lt;/p&gt;

&lt;p&gt;This challenge forced those decisions, and the project is much better for it.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>githubchallenge</category>
      <category>python</category>
      <category>ai</category>
    </item>
    <item>
      <title>Building RepoRank — The Open Source Impact &amp; Funding Readiness Engine</title>
      <dc:creator>Himanshu Kumar</dc:creator>
      <pubDate>Thu, 28 May 2026 05:47:51 +0000</pubDate>
      <link>https://dev.to/himanshu_748/building-reporank-the-open-source-impact-funding-readiness-engine-47k9</link>
      <guid>https://dev.to/himanshu_748/building-reporank-the-open-source-impact-funding-readiness-engine-47k9</guid>
      <description>&lt;p&gt;&lt;em&gt;A journey into bridging open-source metrics, cross-source SQL joins, and AI-driven grant matching.&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  The Open Source Funding Crisis
&lt;/h2&gt;

&lt;p&gt;Every day, developers build and maintain critical pieces of open-source software that power global infrastructure. Yet, one of the biggest challenges in the ecosystem remains funding. Maintainers spend hours writing grant proposals, pitch decks, and sponsorship applications. &lt;/p&gt;

&lt;p&gt;To prove a project's impact, you have to answer tough questions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How many developers are using it? (Downloads on PyPI/npm)&lt;/li&gt;
&lt;li&gt;Is the community talking about it? (HackerNews mentions)&lt;/li&gt;
&lt;li&gt;What is its current financial state? (Open Collective stats)&lt;/li&gt;
&lt;li&gt;How healthy is the repository? (GitHub stars, forks, and issues)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Gathering this data means integrating with four or five different APIs, parsing fragmented JSON structures, writing boilerplate auth code, and manually stitching the pieces together. &lt;/p&gt;

&lt;p&gt;For the &lt;strong&gt;Pirates of the Coral-bean&lt;/strong&gt; Hackathon, I built &lt;strong&gt;RepoRank&lt;/strong&gt; to solve this exact problem. RepoRank uses &lt;strong&gt;Coral SQL&lt;/strong&gt; and &lt;strong&gt;Hugging Face Qwen 2.5 (72B)&lt;/strong&gt; to aggregate cross-source signals instantly, calculate an overall impact score, generate a professional funding pitch, and match projects with active grant programs.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Secret Weapon: Coral SQL
&lt;/h2&gt;

&lt;p&gt;Integrating 4+ external APIs usually takes days of reading docs and writing API wrapper code. Coral changes this completely by letting you query APIs using standard SQL. &lt;/p&gt;

&lt;p&gt;With Coral, APIs are treated as SQL tables. The star of the show in RepoRank is this &lt;strong&gt;single cross-source JOIN query&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt;  &lt;span class="k"&gt;g&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;full_name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="k"&gt;g&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;stargazers_count&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="k"&gt;g&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;forks_count&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="k"&gt;g&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;open_issues_count&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;last_month_downloads&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;monthly_downloads&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;mention_count&lt;/span&gt;        &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;hn_mentions_6mo&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;top_score&lt;/span&gt;            &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;hn_top_score&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt;    &lt;span class="n"&gt;github&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;repos_get&lt;/span&gt;    &lt;span class="k"&gt;g&lt;/span&gt;
&lt;span class="k"&gt;JOIN&lt;/span&gt;    &lt;span class="n"&gt;pypi&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;packages&lt;/span&gt;       &lt;span class="n"&gt;p&lt;/span&gt;  &lt;span class="k"&gt;ON&lt;/span&gt;  &lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'fastapi'&lt;/span&gt;
&lt;span class="k"&gt;JOIN&lt;/span&gt;    &lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="k"&gt;COUNT&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;mention_count&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;MAX&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;score&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;top_score&lt;/span&gt;
            &lt;span class="k"&gt;FROM&lt;/span&gt;   &lt;span class="n"&gt;hackernews&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;stories&lt;/span&gt;
            &lt;span class="k"&gt;WHERE&lt;/span&gt;  &lt;span class="n"&gt;query&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'fastapi'&lt;/span&gt;
              &lt;span class="k"&gt;AND&lt;/span&gt;  &lt;span class="nb"&gt;time&lt;/span&gt;  &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;NOW&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;INTERVAL&lt;/span&gt; &lt;span class="s1"&gt;'180 days'&lt;/span&gt;
        &lt;span class="p"&gt;)&lt;/span&gt;                   &lt;span class="n"&gt;h&lt;/span&gt;  &lt;span class="k"&gt;ON&lt;/span&gt;  &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="k"&gt;WHERE&lt;/span&gt;   &lt;span class="k"&gt;g&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;owner&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'tiangolo'&lt;/span&gt; &lt;span class="k"&gt;AND&lt;/span&gt; &lt;span class="k"&gt;g&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;repo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'fastapi'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Coral handles the execution under the hood, fetching the package stats, checking HackerNews for stories matching the repository name over the last 180 days, retrieving GitHub details, and returning a unified, flat SQL row.&lt;/p&gt;




&lt;h2&gt;
  
  
  Building the Sources We Needed
&lt;/h2&gt;

&lt;p&gt;Coral has a great collection of built-in sources, but to capture the full open-source picture, we needed data from PyPI, npm, HackerNews, and Open Collective. &lt;/p&gt;

&lt;p&gt;Instead of hardcoding API requests in Python, we extended Coral! We designed and wrote &lt;strong&gt;4 custom YAML source specifications&lt;/strong&gt; that map external REST and GraphQL endpoints into SQL-queryable tables.&lt;/p&gt;

&lt;p&gt;Here is a snippet of the custom GraphQL source spec we wrote for &lt;strong&gt;Open Collective&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;dsl_version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;3&lt;/span&gt;
&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;opencollective&lt;/span&gt;
&lt;span class="na"&gt;backend&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;http&lt;/span&gt;
&lt;span class="na"&gt;base_url&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;https://api.opencollective.com/graphql/v2&lt;/span&gt;
&lt;span class="na"&gt;tables&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;collectives&lt;/span&gt;
    &lt;span class="na"&gt;filters&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;slug&lt;/span&gt;
        &lt;span class="na"&gt;required&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
    &lt;span class="na"&gt;request&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;method&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;POST&lt;/span&gt;
      &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;/&lt;/span&gt;
      &lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;format&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;text&lt;/span&gt;
        &lt;span class="na"&gt;content&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;|&lt;/span&gt;
          &lt;span class="s"&gt;{&lt;/span&gt;
            &lt;span class="s"&gt;"query": "query ($slug: String) { collective(slug: $slug) { slug name stats { totalAmountReceived { value } contributorsCount } } }",&lt;/span&gt;
            &lt;span class="s"&gt;"variables": { "slug": "{{filter.slug}}" }&lt;/span&gt;
          &lt;span class="s"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;By mapping the GraphQL variable to the &lt;code&gt;{{filter.slug}}&lt;/code&gt; template, we can query Open Collective using a simple SQL &lt;code&gt;WHERE&lt;/code&gt; clause:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;total_amount_received&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;opencollective&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;collectives&lt;/span&gt; &lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;slug&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'fastapi'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Upstream Contributions
&lt;/h3&gt;

&lt;p&gt;To help other developers build on this, I opened &lt;strong&gt;3 upstream Pull Requests&lt;/strong&gt; to the official &lt;code&gt;withcoral/coral&lt;/code&gt; repository:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;PR #827&lt;/strong&gt;: Adds the PyPI packages source spec &amp;amp; docs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PR #828&lt;/strong&gt;: Adds the npm packages source spec &amp;amp; docs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PR #829&lt;/strong&gt;: Adds the Open Collective GraphQL source spec &amp;amp; docs.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  From Raw Data to Actionable Insights
&lt;/h2&gt;

&lt;p&gt;Once the Coral engine executes the query and returns a structured record, RepoRank hands the data off to &lt;strong&gt;Hugging Face Qwen 2.5 (72B Instruct)&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;Using structured JSON schema outputs, Qwen acts as an expert open-source analyst, returning:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Impact Score (0-100)&lt;/strong&gt;: Mapped across metrics.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Impact Narrative&lt;/strong&gt;: A professional, plain-English summary of the project's real-world value.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Funding Pitch&lt;/strong&gt;: A punchy, one-sentence elevator pitch ready to copy-paste into sponsorship forms.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Targeted Grants&lt;/strong&gt;: Recommends 3-5 specific programs (e.g., Google Summer of Code, PSF, MOSS, GitHub Sponsors) matching the language, ecosystem, and project scale.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  A Premium User Experience
&lt;/h2&gt;

&lt;p&gt;To match the power of the backend, I built a dark-mode dashboard with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Interactive SVG Radar Charts&lt;/strong&gt;: Visually represents project balance across 6 key metrics (Stars, Forks, Downloads, Community Buzz, Financial Backing, and Repository Health).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Session-Persistent GitHub Auth&lt;/strong&gt;: Connect your GitHub account, load up your repositories in a sidebar, and click any repository to trigger an instant analysis.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Clickable Grant Cards&lt;/strong&gt;: Hardmapped direct links to known grant applications, with dynamic Google search fallbacks for newer programs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Inspectable Queries&lt;/strong&gt;: A collapsible SQL details viewer so developers can see the exact query run by the Coral engine.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Keyboard Navigation&lt;/strong&gt;: &lt;code&gt;Cmd+K&lt;/code&gt; to focus the search bar, &lt;code&gt;Cmd+Enter&lt;/code&gt; to run the analysis, and &lt;code&gt;Esc&lt;/code&gt; to exit modals.&lt;/li&gt;
&lt;/ul&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%2Ft9aix0hqvmru94saslt8.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%2Ft9aix0hqvmru94saslt8.png" alt=" " width="800" height="971"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Key Takeaways
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;SQL as an API Gateway&lt;/strong&gt;: Treating APIs as SQL tables makes data orchestration significantly simpler. Writing cross-source joins in SQL is cleaner than writing asynchronous API aggregation loops.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Community Expansion&lt;/strong&gt;: Extending Coral's capabilities by writing YAML specifications shows how powerful declarative source mappings are.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Developer-centric AI&lt;/strong&gt;: AI models are most effective when fed structured, pre-filtered data. Combining the data-gathering capabilities of Coral with the synthesis capabilities of LLMs creates an excellent pipeline.&lt;/li&gt;
&lt;/ol&gt;




&lt;h3&gt;
  
  
  🔗 Links &amp;amp; Resources
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GitHub Repository&lt;/strong&gt;: &lt;a href="https://github.com/himanshu748/reporank" rel="noopener noreferrer"&gt;himanshu748/reporank&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Upstream Pull Requests&lt;/strong&gt;: &lt;a href="https://github.com/withcoral/coral/pulls" rel="noopener noreferrer"&gt;Coral Pull Requests Page&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Built for the Pirates of the Coral-bean Hackathon. Happy sailing! 🏴‍☠️&lt;/em&gt;&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>webdev</category>
      <category>showdev</category>
      <category>ai</category>
    </item>
    <item>
      <title>My PR Merged Into a Graveyard: On the Rise of Antigravity and the Fall of Open Source</title>
      <dc:creator>Himanshu Kumar</dc:creator>
      <pubDate>Wed, 20 May 2026 16:37:14 +0000</pubDate>
      <link>https://dev.to/himanshu_748/my-pr-merged-into-a-graveyard-on-the-rise-of-antigravity-and-the-fall-of-open-source-5cpd</link>
      <guid>https://dev.to/himanshu_748/my-pr-merged-into-a-graveyard-on-the-rise-of-antigravity-and-the-fall-of-open-source-5cpd</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/google-io-writing-2026-05-19"&gt;Google I/O Writing Challenge&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;Last week, I got the little green banner. &lt;em&gt;Pull request merged.&lt;/em&gt; A small contribution to Gemini CLI — a fix I'd been meaning to submit for months — finally made it in. I closed my laptop feeling quietly satisfied.&lt;/p&gt;

&lt;p&gt;Twenty-four hours later, Google announced Gemini CLI is being sunsetted.&lt;/p&gt;

&lt;p&gt;I'm not going to pretend my PR was significant. It wasn't. But the timing felt like a metaphor so on-the-nose that I almost laughed. And the more I sat with it, the less funny it became.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Actually Happened at I/O 2026
&lt;/h2&gt;

&lt;p&gt;At Google I/O 2026, Google unveiled &lt;strong&gt;Antigravity CLI&lt;/strong&gt; — a new, Go-built, agent-first terminal tool that replaces Gemini CLI. The pitch is compelling on paper: faster execution, asynchronous multi-agent workflows, a unified architecture shared with the Antigravity 2.0 desktop app. Your complex refactors run in the background. Multiple specialized sub-agents split up the work. It's Gemini CLI, but grown up.&lt;/p&gt;

&lt;p&gt;The hard cutoff lands on &lt;strong&gt;June 18, 2026&lt;/strong&gt;. After that date, Gemini CLI stops serving requests for Google AI Pro and Ultra users. Enterprise and paid API key holders get to keep the lights on a little longer, but the message is clear: the community project is done.&lt;/p&gt;

&lt;p&gt;Gemini CLI ended its life with 100,000+ GitHub stars, 6,000 merged pull requests, and hundreds of external contributors. A genuinely impressive open-source run for something barely a year old.&lt;/p&gt;

&lt;p&gt;Mine was PR number... well, somewhere in those 6,000.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Bait-and-Switch Pattern We Keep Accepting
&lt;/h2&gt;

&lt;p&gt;Here's what I keep returning to: Gemini CLI was launched as an open-source project. Google invited the world in. Developers (myself included) filed issues, wrote fixes, argued in discussion threads, and built their workflows around it. The community did what communities do — they made it better than Google could have alone.&lt;/p&gt;

&lt;p&gt;And then, when it proved the concept and outgrew its usefulness as a scrappy open tool, Google replaced it with a closed, proprietary successor that ships as a standalone desktop application tied to Google Cloud.&lt;/p&gt;

&lt;p&gt;This isn't a new story. We've seen it play out before:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Google Reader&lt;/strong&gt; built a loyal community of RSS power users, then shut down.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Google Stadia&lt;/strong&gt; courted game developers with open promises, then folded.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Firebase's open-source adjacency&lt;/strong&gt; slowly drifted toward lock-in.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The pattern is: open source as &lt;em&gt;acquisition funnel&lt;/em&gt;, not as &lt;em&gt;philosophy&lt;/em&gt;. Launch something generous, gather contributors, validate the idea, close the door.&lt;/p&gt;

&lt;p&gt;What stings about Gemini CLI specifically is that Google's own blog post &lt;em&gt;thanks&lt;/em&gt; the community. It cites the 6,000 PRs. It acknowledges hundreds of contributors helped shape the product. And then it announces that all of that community investment is being handed off to a closed platform that, crucially, you cannot self-host in the same way.&lt;/p&gt;




&lt;h2&gt;
  
  
  To Be Fair to Antigravity
&lt;/h2&gt;

&lt;p&gt;I want to be honest here, because I'm genuinely torn.&lt;/p&gt;

&lt;p&gt;Antigravity CLI is technically impressive. The argument Google makes — that your terminal tool and your desktop agent need to share a unified backend to handle multi-agent complexity - is a real argument. When you're orchestrating five sub-agents doing parallel refactors, coordinating through a shared, hardened infrastructure matters. A loose open-source repo maintained by community weekends isn't the right home for that.&lt;/p&gt;

&lt;p&gt;The Go rewrite is also a genuine quality-of-life improvement. Gemini CLI, for all its strengths, had latency that you &lt;em&gt;felt&lt;/em&gt;. A snappier, more responsive tool isn't a marketing claim; it's real.&lt;/p&gt;

&lt;p&gt;And for enterprise users — the ones Google is clearly most interested in — the Google Cloud integration, credential masking, and sandboxing are features that actually matter. A Fortune 500 company isn't going to run a community-maintained TypeScript CLI to push production code. Antigravity CLI is built for the people who pay the bills.&lt;/p&gt;

&lt;p&gt;I get it. I just don't have to love it.&lt;/p&gt;




&lt;h2&gt;
  
  
  What We Actually Lost
&lt;/h2&gt;

&lt;p&gt;When Gemini CLI was open source, I could:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Read exactly what it was doing&lt;/strong&gt; when it touched my codebase&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fork it&lt;/strong&gt; and add behavior my team needed without filing a feature request&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Audit&lt;/strong&gt; how it handled my code before trusting it with a production repo&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Contribute&lt;/strong&gt; and know that my fix would persist&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;With Antigravity CLI, I can use it. I can give feedback in a community forum. I can file feature requests and hope someone at Google agrees with me. That's a fundamentally different relationship with a tool.&lt;/p&gt;

&lt;p&gt;The dev community spent the better part of a decade learning to be suspicious of black-box AI tools that touch their codebases. Gemini CLI, by being open, offered an answer to that suspicion. Antigravity CLI doesn't.&lt;/p&gt;

&lt;p&gt;For a tool that wants to "orchestrate agents across your entire workflow" — touching your files, your Git history, your credentials — the closed-source decision feels like exactly the wrong call.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Larger Shift I/O 2026 Is Signaling
&lt;/h2&gt;

&lt;p&gt;Step back and look at what Google announced this year as a whole:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Gemini Spark&lt;/strong&gt; is a "24/7 personal agent" that accesses your Gmail, Calendar, and Tasks&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Antigravity 2.0&lt;/strong&gt; is a desktop app that steers agents across your projects&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Managed Agents in the Gemini API&lt;/strong&gt; provisions full agent infrastructure for you&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Antigravity CLI&lt;/strong&gt; handles your terminal&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There's a coherent vision here, and it's not an open ecosystem. It's &lt;em&gt;Google as the substrate&lt;/em&gt;. Every agentic workflow you build runs on infrastructure Google controls, through interfaces Google designs, against models Google hosts. The Antigravity SDK lets you "customize the agent," but you're still hosting it on Google's harness.&lt;/p&gt;

&lt;p&gt;This is Google's answer to Microsoft's Copilot+ and Anthropic's Claude Code: a vertically integrated agentic platform. And it's probably going to be very good. That's sort of the problem.&lt;/p&gt;

&lt;p&gt;The best agentic tools are becoming the ones most deeply locked into vendor ecosystems. The open alternatives - still worth rooting for, but always a step behind - can't match the integration depth that comes with a single company owning the whole stack.&lt;/p&gt;




&lt;h2&gt;
  
  
  What This Means for You (And for Me)
&lt;/h2&gt;

&lt;p&gt;If you're a developer, the practical advice is boring: Antigravity CLI will probably be the better tool by August. Learn it. Use it. Enjoy the async workflows.&lt;/p&gt;

&lt;p&gt;But keep asking the uncomfortable questions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What happens to your workflows when Antigravity gets deprecated in 2028 for &lt;em&gt;Supersymmetry CLI&lt;/em&gt;?&lt;/li&gt;
&lt;li&gt;Where does your code go when it passes through a closed agent harness?&lt;/li&gt;
&lt;li&gt;Who owns the institutional knowledge these tools build about how your codebase works?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The Google I/O keynote ended with the line: &lt;em&gt;"We're bringing the models, infrastructure, and platforms together across Google to help you build anything you can imagine."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;That sentence is doing a lot of work. &lt;em&gt;Across Google.&lt;/em&gt; Building &lt;em&gt;on Google.&lt;/em&gt; Anything &lt;em&gt;you&lt;/em&gt; can imagine - so long as Google's infrastructure agrees.&lt;/p&gt;




&lt;p&gt;My PR #19881 is sitting in a deprecated repo. The fix still works - remove unsafe type assertion suppressions in error utils, if you want to go look. The code is there, archived and frozen.&lt;/p&gt;

&lt;p&gt;And somewhere in a Mountain View conference room, someone is presenting a roadmap slide that doesn't have Gemini CLI on it anywhere.&lt;/p&gt;

&lt;p&gt;That's fine. That's how this industry moves. I just think it's worth naming it clearly, before we all sign up for the next open-source launch and start filing pull requests again.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Follow me here on dev.to if you want more takes on developer tooling, open-source sustainability, and the occasional misadventure in AI-assisted coding.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>googleiochallenge</category>
      <category>opensource</category>
      <category>ai</category>
    </item>
    <item>
      <title>Stop Writing API Docs by Hand — Let Notion MCP Do It</title>
      <dc:creator>Himanshu Kumar</dc:creator>
      <pubDate>Fri, 27 Mar 2026 17:50:57 +0000</pubDate>
      <link>https://dev.to/himanshu_748/stop-writing-api-docs-by-hand-let-notion-mcp-do-it-39h3</link>
      <guid>https://dev.to/himanshu_748/stop-writing-api-docs-by-hand-let-notion-mcp-do-it-39h3</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;APIVault&lt;/strong&gt; — a local FastAPI app that turns raw route code or plain-English API descriptions into full API documentation, then stores everything in Notion through the Notion MCP.&lt;/p&gt;

&lt;p&gt;The idea is simple: you point APIVault at a router file (or just describe an endpoint in plain English), and it generates structured documentation and pushes it directly into a Notion workspace it sets up for you — no copy-pasting, no manual page creation.&lt;/p&gt;

&lt;p&gt;The frontend is a vanilla HTML/CSS/JS dashboard with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Live search&lt;/strong&gt; across your documented endpoints&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Documentation preview&lt;/strong&gt; pane&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Source vs. generated toggle&lt;/strong&gt; so you can diff your raw code against what was documented&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There's also a CLI tool (&lt;code&gt;vault.py&lt;/code&gt;) for batch-documenting entire files without opening the UI.&lt;/p&gt;

&lt;h3&gt;
  
  
  Endpoints
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Route&lt;/th&gt;
&lt;th&gt;What it does&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;POST /api/setup&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Creates (or reuses) the APIVault Notion workspace — an &lt;code&gt;📖 API Reference&lt;/code&gt; database, a &lt;code&gt;🏷️ Services&lt;/code&gt; database, and an &lt;code&gt;📚 API Docs&lt;/code&gt; hub page&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;POST /api/document-endpoint&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Documents a single endpoint, writes it to Notion, returns the generated content + the Notion page URL&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;POST /api/document-collection&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Splits a router/controller file into individual endpoints and documents them in parallel&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;POST /api/generate-readme&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Generates a &lt;code&gt;📄 [Service] — README&lt;/code&gt; Notion page from endpoints already stored&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;GET /api/search?q=&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Powers the dashboard's live search&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;GET /api/sidebar&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Feeds the left-side navigation tree&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Stack
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Backend:&lt;/strong&gt; FastAPI + Python&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI:&lt;/strong&gt; HuggingFace Inference API (documentation generation)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MCP:&lt;/strong&gt; Notion MCP via &lt;code&gt;https://mcp.notion.com/sse&lt;/code&gt; (SSE transport)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Frontend:&lt;/strong&gt; Vanilla HTML/CSS/JS&lt;/li&gt;
&lt;/ul&gt;




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

&lt;p&gt;&lt;em&gt;No video for this submission.&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Show us the code
&lt;/h2&gt;

&lt;p&gt;🔗 &lt;a href="https://github.com/himanshu748/dev-challenge-5" rel="noopener noreferrer"&gt;github.com/himanshu748/dev-challenge-5&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Getting started locally
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 1. Clone and set up&lt;/span&gt;
git clone https://github.com/himanshu748/dev-challenge-5
&lt;span class="nb"&gt;cd &lt;/span&gt;dev-challenge-5
python &lt;span class="nt"&gt;-m&lt;/span&gt; venv venv &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;source &lt;/span&gt;venv/bin/activate
pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; requirements.txt

&lt;span class="c"&gt;# 2. Configure environment&lt;/span&gt;
&lt;span class="nb"&gt;cp&lt;/span&gt; .env.example .env
&lt;span class="c"&gt;# Set NOTION_TOKEN (MCP OAuth token) and HF_TOKEN&lt;/span&gt;

&lt;span class="c"&gt;# 3. Run&lt;/span&gt;
uvicorn app.main:app &lt;span class="nt"&gt;--reload&lt;/span&gt;
&lt;span class="c"&gt;# Open http://127.0.0.1:8000&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;CLI usage for bulk documentation:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python vault.py &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--file&lt;/span&gt; routes/users.py &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--service&lt;/span&gt; UserService &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--base-url&lt;/span&gt; https://api.example.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






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

&lt;p&gt;APIVault uses the &lt;strong&gt;Notion MCP exclusively&lt;/strong&gt; — there are zero calls to the direct Notion REST API anywhere in the codebase. &lt;code&gt;NOTION_TOKEN&lt;/code&gt; must be a Notion MCP OAuth access token, not a Notion integration secret. This matches how the hosted MCP is meant to be used: access is granted through the MCP OAuth flow, not the legacy secret model.&lt;/p&gt;

&lt;p&gt;On startup, &lt;code&gt;POST /api/setup&lt;/code&gt; calls the Notion MCP to provision the entire workspace structure:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;An &lt;strong&gt;&lt;code&gt;📖 API Reference&lt;/code&gt;&lt;/strong&gt; database where each endpoint lives as a page with properties like method, path, service, parameters, and response schema&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;&lt;code&gt;🏷️ Services&lt;/code&gt;&lt;/strong&gt; database for grouping endpoints by service name&lt;/li&gt;
&lt;li&gt;An &lt;strong&gt;&lt;code&gt;📚 API Docs&lt;/code&gt;&lt;/strong&gt; hub page that ties everything together&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When an endpoint is documented (either individually or from a batch file), the generated content is written to a new Notion page via the MCP and the returned Notion URL is surfaced in the dashboard so you can jump straight to it.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;generate-readme&lt;/code&gt; flow goes the other way: it queries Notion through the MCP to pull all endpoints for a given service, then synthesizes them into a formatted README page — so Notion stays the source of truth for the whole workflow.&lt;/p&gt;

&lt;p&gt;A local JSON cache (&lt;code&gt;data/apivault_state.json&lt;/code&gt;) exists purely for UI responsiveness (fast sidebar loads, instant search), but every write and authoritative read goes through the MCP.&lt;/p&gt;

&lt;p&gt;What the Notion MCP unlocks here that wouldn't be practical otherwise:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Structured storage without schema management&lt;/strong&gt; — Notion databases give you typed properties (selects, rich text, URLs) without standing up a real database&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Human-readable side effect&lt;/strong&gt; — every documented endpoint is immediately browsable in Notion by the whole team, not just queryable via API&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;README generation from live data&lt;/strong&gt; — because the MCP lets you query what's already stored, the README reflects the actual current state of your docs, not a stale snapshot&lt;/li&gt;
&lt;/ul&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
      <category>devchallenge</category>
      <category>notionchallenge</category>
      <category>mcp</category>
      <category>ai</category>
    </item>
    <item>
      <title>Your Team's Code Reviews Are Disappearing — I Built PRReviewIQ to Fix That</title>
      <dc:creator>Himanshu Kumar</dc:creator>
      <pubDate>Fri, 27 Mar 2026 17:36:51 +0000</pubDate>
      <link>https://dev.to/himanshu_748/your-teams-code-reviews-are-disappearing-i-built-prreviewiq-to-fix-that-20p4</link>
      <guid>https://dev.to/himanshu_748/your-teams-code-reviews-are-disappearing-i-built-prreviewiq-to-fix-that-20p4</guid>
      <description>&lt;p&gt;Every code review your team does contains hard-won knowledge: a bug pattern caught, a performance trap avoided, a naming convention enforced. And almost all of it evaporates the moment the PR is merged.&lt;/p&gt;

&lt;p&gt;PRReviewIQ is my attempt to fix that. It's an AI code review tool that doesn't just comment on diffs — it &lt;strong&gt;remembers&lt;/strong&gt;. Every insight gets logged into a living Notion knowledge base via Notion MCP, so your team's collective code quality wisdom compounds instead of getting buried in closed PRs.&lt;/p&gt;




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

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




&lt;h2&gt;
  
  
  Show Us the Code
&lt;/h2&gt;

&lt;p&gt;🔗 &lt;a href="https://github.com/himanshu748/dev-challenge-4" rel="noopener noreferrer"&gt;github.com/himanshu748/dev-challenge-4&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  The Problem Worth Solving
&lt;/h2&gt;

&lt;p&gt;Code review is one of the highest-leverage activities on any engineering team — but it's almost entirely ephemeral. Comments live on GitHub. Patterns go untracked. New teammates repeat the same mistakes. There's no institutional memory.&lt;/p&gt;

&lt;p&gt;I wanted Notion to be that memory. Not as a place to manually paste notes, but as a database that an AI agent actively writes to as part of the review process itself.&lt;/p&gt;




&lt;h2&gt;
  
  
  How It Works
&lt;/h2&gt;

&lt;p&gt;PRReviewIQ ships as two interfaces over the same core:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Web app&lt;/strong&gt; — a FastAPI server at &lt;code&gt;http://127.0.0.1:8000&lt;/code&gt; where you can paste diffs and trigger reviews through a browser UI.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CLI&lt;/strong&gt; — run it directly against a local git repo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python review.py &lt;span class="nt"&gt;--repo&lt;/span&gt; /path/to/repo

&lt;span class="c"&gt;# Or target a single file for pre-commit checks&lt;/span&gt;
python review.py &lt;span class="nt"&gt;--file&lt;/span&gt; path/to/file.py &lt;span class="nt"&gt;--pr-title&lt;/span&gt; &lt;span class="s2"&gt;"Pre-commit review"&lt;/span&gt; &lt;span class="nt"&gt;--repo-name&lt;/span&gt; my-repo
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Under the hood, every review goes through HuggingFace, and every finding gets written into Notion through MCP.&lt;/p&gt;




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

&lt;p&gt;Here's the part I'm most proud of from an architecture standpoint.&lt;/p&gt;

&lt;p&gt;Most Notion integrations make direct REST calls. I went a different route: PRReviewIQ runs the &lt;strong&gt;official &lt;code&gt;@notionhq/notion-mcp-server&lt;/code&gt;&lt;/strong&gt; locally via &lt;code&gt;npx&lt;/code&gt;, and passes &lt;code&gt;NOTION_TOKEN&lt;/code&gt; directly to the MCP process. The app itself never touches the Notion REST API — all writes happen through MCP.&lt;/p&gt;

&lt;p&gt;This matters because it means the LLM is using Notion as a &lt;strong&gt;tool&lt;/strong&gt;, not just a destination. When it reviews a diff, it decides what's worth logging, how to categorize it, and where it belongs in the knowledge base — the same way a human reviewer would decide what's worth writing down.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What gets built in Notion:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A &lt;strong&gt;coding standards database&lt;/strong&gt; that evolves as the agent identifies recurring patterns. You can query it live via &lt;code&gt;GET /api/standards&lt;/code&gt; — it reads directly from Notion and returns JSON, so the app and the team always share the same source of truth.&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;reviews log&lt;/strong&gt; — every PR review stored as a structured Notion entry, searchable and linkable.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Weekly digest pages&lt;/strong&gt; — &lt;code&gt;POST /api/weekly-digest&lt;/code&gt; aggregates trends across recent reviews and writes a summary page your team can async through on Mondays.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The compounding effect is the real value: the knowledge base gets more useful the more you use it.&lt;/p&gt;




&lt;h2&gt;
  
  
  Technical Note on the MCP Setup
&lt;/h2&gt;

&lt;p&gt;Running &lt;code&gt;@notionhq/notion-mcp-server&lt;/code&gt; via &lt;code&gt;npx&lt;/code&gt; means Node.js needs to be installed alongside Python. The MCP server process is spawned by the app at runtime — no separate setup step required beyond having &lt;code&gt;npx&lt;/code&gt; available.&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="c"&gt;# Prerequisites&lt;/span&gt;
python 3.11+
node + npx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# .env&lt;/span&gt;
&lt;span class="nv"&gt;HF_API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;hf_...
&lt;span class="nv"&gt;NOTION_TOKEN&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;...
&lt;span class="nv"&gt;NOTION_PARENT_PAGE_ID&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Run&lt;/span&gt;
pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nb"&gt;.&lt;/span&gt;
uvicorn app.main:app &lt;span class="nt"&gt;--reload&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The first call to &lt;code&gt;POST /api/setup&lt;/code&gt; provisions the full Notion workspace structure — databases, log pages, and the standards section — and you're ready to start reviewing.&lt;/p&gt;




&lt;h2&gt;
  
  
  What I'd Build Next
&lt;/h2&gt;

&lt;p&gt;The CLI is useful but I want to wire it into a git pre-commit hook so reviews happen automatically before every push. The Notion knowledge base is already there — the next step is making the feedback loop tighter.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>notionchallenge</category>
      <category>mcp</category>
      <category>ai</category>
    </item>
    <item>
      <title>From Job Post to Offer Letter — Automated with Notion MCP</title>
      <dc:creator>Himanshu Kumar</dc:creator>
      <pubDate>Fri, 27 Mar 2026 16:11:42 +0000</pubDate>
      <link>https://dev.to/himanshu_748/from-job-post-to-offer-letter-automated-with-notion-mcp-cgp</link>
      <guid>https://dev.to/himanshu_748/from-job-post-to-offer-letter-automated-with-notion-mcp-cgp</guid>
      <description>&lt;h1&gt;
  
  
  How I Used Notion MCP to Build an AI Recruiting Assistant
&lt;/h1&gt;

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

&lt;p&gt;&lt;strong&gt;HireIQ&lt;/strong&gt; is an AI-powered recruiting assistant that uses Notion as its entire operational backbone. Point it at a role you're hiring for and it will:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Spin up a &lt;strong&gt;recruiting workspace&lt;/strong&gt; in Notion automatically&lt;/li&gt;
&lt;li&gt;Write polished, structured &lt;strong&gt;job descriptions&lt;/strong&gt; and save them as Notion pages&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Screen candidates&lt;/strong&gt; against the role criteria and log results&lt;/li&gt;
&lt;li&gt;Generate &lt;strong&gt;offer letters&lt;/strong&gt; — drafted by AI, stored in Notion&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The entire hiring pipeline lives in Notion. HireIQ just drives it.&lt;/p&gt;




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

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




&lt;h2&gt;
  
  
  Show Us the Code
&lt;/h2&gt;

&lt;p&gt;🔗 &lt;a href="https://github.com/himanshu748/dev-challenge-3" rel="noopener noreferrer"&gt;github.com/himanshu748/dev-challenge-3&lt;/a&gt;&lt;/p&gt;




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

&lt;p&gt;HireIQ connects to Notion via the &lt;strong&gt;remote Notion MCP server&lt;/strong&gt; at &lt;code&gt;https://mcp.notion.com/sse&lt;/code&gt; — attached directly to a HuggingFace &lt;code&gt;MCPClient&lt;/code&gt;. This means the AI model doesn't just answer questions about hiring; it actively reads from and writes to Notion as part of every step in the pipeline.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Workspace Setup (&lt;code&gt;POST /api/setup&lt;/code&gt;)
&lt;/h3&gt;

&lt;p&gt;On first run, HireIQ uses Notion MCP to create the full recruiting workspace structure — databases, pages, and sections — ready to receive jobs and candidates. Zero manual Notion configuration needed.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Job Description Creation (&lt;code&gt;POST /api/add-job&lt;/code&gt;)
&lt;/h3&gt;

&lt;p&gt;The AI generates a complete, professionally formatted job description and writes it directly into Notion via MCP. Every role gets its own page, making the workspace a living hiring hub rather than a static document.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Candidate Screening (&lt;code&gt;POST /api/screen-candidate&lt;/code&gt;)
&lt;/h3&gt;

&lt;p&gt;HireIQ reads the job requirements from Notion, evaluates the candidate against them using the LLM, and logs the screening result back into Notion — keeping everything in one place for the hiring team to review.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Offer Letter Generation (&lt;code&gt;POST /api/generate-offer&lt;/code&gt;)
&lt;/h3&gt;

&lt;p&gt;Once a candidate clears screening, HireIQ drafts a tailored offer letter and saves it to Notion via MCP. The whole candidate journey — from application to offer — is tracked in one workspace.&lt;/p&gt;

&lt;h3&gt;
  
  
  What Notion MCP Unlocks
&lt;/h3&gt;

&lt;p&gt;The remote MCP connection (&lt;code&gt;https://mcp.notion.com/sse&lt;/code&gt;) is what makes this work at a different level than a plain Notion API integration. The LLM has Notion MCP as an attached tool — so it can decide &lt;em&gt;when&lt;/em&gt; and &lt;em&gt;how&lt;/em&gt; to read or write Notion data as part of reasoning through each task. It's not just API calls wrapped in Python; the model is an active agent that uses Notion as its memory and output layer.&lt;/p&gt;

&lt;p&gt;Every write endpoint returns a &lt;code&gt;notion_urls&lt;/code&gt; field so the frontend can link directly to the pages the agent just created.&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;Layer&lt;/th&gt;
&lt;th&gt;Technology&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Backend&lt;/td&gt;
&lt;td&gt;FastAPI + Python&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AI / LLM&lt;/td&gt;
&lt;td&gt;HuggingFace (&lt;code&gt;Qwen/Qwen2.5-72B-Instruct&lt;/code&gt;) via MCPClient&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Data store&lt;/td&gt;
&lt;td&gt;Notion (via remote Notion MCP at &lt;code&gt;https://mcp.notion.com/sse&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Frontend&lt;/td&gt;
&lt;td&gt;Vanilla HTML/CSS/JS&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Getting Started
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 1. Clone the repo&lt;/span&gt;
git clone https://github.com/himanshu748/dev-challenge-3

&lt;span class="c"&gt;# 2. Create a virtual environment&lt;/span&gt;
python3 &lt;span class="nt"&gt;-m&lt;/span&gt; venv .venv
&lt;span class="nb"&gt;source&lt;/span&gt; .venv/bin/activate

&lt;span class="c"&gt;# 3. Install dependencies&lt;/span&gt;
pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; requirements.txt

&lt;span class="c"&gt;# 4. Configure environment variables&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Create a &lt;code&gt;.env&lt;/code&gt; file:&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;HF_API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;hf_...
&lt;span class="nv"&gt;NOTION_TOKEN&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;...          &lt;span class="c"&gt;# Must be a current OAuth access token (not an internal integration token)&lt;/span&gt;
&lt;span class="nv"&gt;NOTION_PARENT_PAGE_ID&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;... &lt;span class="c"&gt;# Parent page for the recruiting workspace&lt;/span&gt;
&lt;span class="nv"&gt;HF_MODEL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;...              &lt;span class="c"&gt;# Optional — defaults to Qwen/Qwen2.5-72B-Instruct&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 5. Start the server&lt;/span&gt;
uvicorn app.main:app &lt;span class="nt"&gt;--reload&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Open &lt;code&gt;http://127.0.0.1:8000&lt;/code&gt; in your browser.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; &lt;code&gt;NOTION_TOKEN&lt;/code&gt; must be a current OAuth access token for the remote Notion MCP server. A plain internal integration token will not work for the &lt;code&gt;https://mcp.notion.com/sse&lt;/code&gt; connection.&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>devchallenge</category>
      <category>notionchallenge</category>
      <category>mcp</category>
      <category>ai</category>
    </item>
    <item>
      <title>How I Used Notion MCP to Build an Autonomous Personal Finance Tracker</title>
      <dc:creator>Himanshu Kumar</dc:creator>
      <pubDate>Thu, 26 Mar 2026 16:41:46 +0000</pubDate>
      <link>https://dev.to/himanshu_748/how-i-used-notion-mcp-to-build-an-autonomous-personal-finance-tracker-12jl</link>
      <guid>https://dev.to/himanshu_748/how-i-used-notion-mcp-to-build-an-autonomous-personal-finance-tracker-12jl</guid>
      <description>&lt;h1&gt;
  
  
  FinanceIQ — AI-Powered Finance Tracker Built with Notion MCP
&lt;/h1&gt;

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

&lt;p&gt;&lt;strong&gt;FinanceIQ&lt;/strong&gt; is an AI-powered personal finance tracker that turns Notion into a fully automated financial command center. It ingests your bank's CSV exports, categorizes every transaction using AI, detects suspicious or anomalous spending, generates monthly financial reports, and fires budget alerts — all written directly into Notion via the Notion MCP.&lt;/p&gt;

&lt;p&gt;No spreadsheet juggling. No manual tagging. Your finances, organized and analyzed — living right inside Notion.&lt;/p&gt;




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

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




&lt;h2&gt;
  
  
  Show Us the Code
&lt;/h2&gt;

&lt;p&gt;🔗 &lt;a href="https://github.com/himanshu748/dev-challenge-2" rel="noopener noreferrer"&gt;github.com/himanshu748/dev-challenge-2&lt;/a&gt;&lt;/p&gt;




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

&lt;p&gt;Notion MCP is the backbone of FinanceIQ. Rather than building a standalone dashboard that lives in isolation, I wanted all financial data to live &lt;em&gt;natively in Notion&lt;/em&gt; — so it's searchable, shareable, and editable like any other Notion page.&lt;/p&gt;

&lt;p&gt;Here's exactly how Notion MCP powers each part of the workflow:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. One-Click Workspace Setup
&lt;/h3&gt;

&lt;p&gt;On first run, FinanceIQ uses Notion MCP to automatically create:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;An &lt;strong&gt;Expenses database&lt;/strong&gt; with the right properties (date, amount, category, anomaly flag, etc.)&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;Reports page&lt;/strong&gt; where monthly summaries will be written&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No manual Notion setup required — the agent handles it entirely through MCP.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Transaction Import &amp;amp; AI Categorization
&lt;/h3&gt;

&lt;p&gt;When a user uploads a CSV (from Chase, Bank of America, Wells Fargo, or Mint), FinanceIQ:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Parses each transaction&lt;/li&gt;
&lt;li&gt;Sends it to a &lt;strong&gt;HuggingFace-hosted Mistral model&lt;/strong&gt; (via &lt;code&gt;MCPClient&lt;/code&gt;) for categorization into 10 spending categories&lt;/li&gt;
&lt;li&gt;Flags anomalies: transactions that are 3x the category average, duplicates, or suspiciously round amounts&lt;/li&gt;
&lt;li&gt;Writes each transaction as a new row in the Notion Expenses database via MCP&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. Monthly Report Generation
&lt;/h3&gt;

&lt;p&gt;The &lt;code&gt;/report&lt;/code&gt; endpoint aggregates data from Notion, runs it through the AI, and writes a structured monthly report page back into Notion including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Income vs. expenses summary&lt;/li&gt;
&lt;li&gt;Category-by-category breakdown&lt;/li&gt;
&lt;li&gt;AI-generated spending recommendations&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4. Budget Alerts
&lt;/h3&gt;

&lt;p&gt;Users can set monthly budget limits per category. FinanceIQ compares actuals against limits and — when thresholds are exceeded — creates a dedicated &lt;strong&gt;Budget Alert page&lt;/strong&gt; in Notion via MCP with details on which categories overspent and by how much.&lt;/p&gt;

&lt;h3&gt;
  
  
  What Notion MCP Unlocks
&lt;/h3&gt;

&lt;p&gt;The key insight: Notion MCP lets an AI agent treat Notion as a &lt;strong&gt;live, writable database&lt;/strong&gt; — not just a document viewer. That means FinanceIQ can autonomously create structure, push data, and generate reports without any manual copy-pasting. The financial intelligence stays inside Notion where users already live and work.&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;Layer&lt;/th&gt;
&lt;th&gt;Technology&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Backend&lt;/td&gt;
&lt;td&gt;FastAPI + Python&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AI / LLM&lt;/td&gt;
&lt;td&gt;HuggingFace (Mistral-Small-3.1-24B) via MCPClient&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Data store&lt;/td&gt;
&lt;td&gt;Notion (via Notion MCP)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Frontend&lt;/td&gt;
&lt;td&gt;Vanilla HTML/CSS/JS — newspaper-inspired design&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Getting Started
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 1. Clone the repo&lt;/span&gt;
git clone https://github.com/himanshu748/dev-challenge-2

&lt;span class="c"&gt;# 2. Install dependencies&lt;/span&gt;
pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; requirements.txt

&lt;span class="c"&gt;# 3. Configure environment variables&lt;/span&gt;
&lt;span class="nb"&gt;cp&lt;/span&gt; .env.example .env
&lt;span class="c"&gt;# Add your HF_API_KEY and NOTION_TOKEN&lt;/span&gt;

&lt;span class="c"&gt;# 4. Start the server&lt;/span&gt;
uvicorn main:app &lt;span class="nt"&gt;--reload&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then open &lt;code&gt;http://localhost:8000&lt;/code&gt; in your browser.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Required environment variables:&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Variable&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;HF_API_KEY&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Your HuggingFace API key&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;NOTION_TOKEN&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Your Notion integration token&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;NOTION_PARENT_PAGE_ID&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;(Optional) Parent page ID for the workspace&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;HF_MODEL&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;(Optional) Defaults to &lt;code&gt;mistralai/Mistral-Small-3.1-24B-Instruct-2503&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

</description>
      <category>notionchallenge</category>
      <category>ai</category>
      <category>mcp</category>
      <category>devchallenge</category>
    </item>
    <item>
      <title>I Built an AI PM That Creates PRDs &amp; Sprint Plans Directly in Notion</title>
      <dc:creator>Himanshu Kumar</dc:creator>
      <pubDate>Thu, 26 Mar 2026 15:44:10 +0000</pubDate>
      <link>https://dev.to/himanshu_748/i-built-an-ai-pm-that-creates-prds-sprint-plans-directly-in-notion-21de</link>
      <guid>https://dev.to/himanshu_748/i-built-an-ai-pm-that-creates-prds-sprint-plans-directly-in-notion-21de</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;AutoPM&lt;/strong&gt; is an AI-powered product management assistant that turns a single product idea &lt;br&gt;
into a fully structured Notion workspace — PRDs, task breakdowns, daily standups, and &lt;br&gt;
sprint plans — in seconds.&lt;/p&gt;

&lt;p&gt;No more context-switching between AI tools and your Notion workspace. Just describe your &lt;br&gt;
product idea, and AutoPM:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Generates a full PRD&lt;/strong&gt; — problem statement, goals, user personas, user stories, and out-of-scope items&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Breaks it into Epics &amp;amp; Tasks&lt;/strong&gt; — with priorities, story points, and a ready-to-go Sprint 1 plan (~20 story points)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Writes everything directly to Notion&lt;/strong&gt; via Notion MCP&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reads your workspace&lt;/strong&gt; via MCP to generate context-aware daily standups and sprint plans from your real backlog&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;🔗 &lt;strong&gt;Live demo:&lt;/strong&gt; &lt;a href="https://autopm-two.vercel.app" rel="noopener noreferrer"&gt;autopm-two.vercel.app&lt;/a&gt;&lt;br&gt;&lt;br&gt;
🔗 &lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/himanshu748/dev-challenge-1" rel="noopener noreferrer"&gt;github.com/himanshu748/dev-challenge-1&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.amazonaws.com%2Fuploads%2Farticles%2Faoysz9yllwtisl7wquwi.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%2Faoysz9yllwtisl7wquwi.png" alt="AutoPM Dashboard" width="800" height="504"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Video Demo
&lt;/h2&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/YMosgBmzr7k"&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/himanshu748" rel="noopener noreferrer"&gt;
        himanshu748
      &lt;/a&gt; / &lt;a href="https://github.com/himanshu748/dev-challenge-1" rel="noopener noreferrer"&gt;
        dev-challenge-1
      &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;AutoPM — AI Product Manager&lt;/h1&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;AI-powered product management assistant that creates PRDs, task breakdowns, standups, and sprint plans directly in Notion — built with &lt;strong&gt;HuggingFace Inference API&lt;/strong&gt; + &lt;strong&gt;Notion MCP&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Built for the &lt;a href="https://dev.to/challenges/notion-2026-03-04" rel="nofollow"&gt;dev.to Notion MCP Challenge&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Live demo:&lt;/strong&gt; &lt;a href="https://autopm-two.vercel.app" rel="nofollow noopener noreferrer"&gt;autopm-two.vercel.app&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/himanshu748/dev-challenge-1/./screenshots/dashboard.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fhimanshu748%2Fdev-challenge-1%2FHEAD%2F.%2Fscreenshots%2Fdashboard.png" alt="Dashboard Screenshot"&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;Enter a product idea and AutoPM:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Generates a full PRD&lt;/strong&gt; via HuggingFace AI (problem, goals, personas, user stories, scope)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Creates an Epics &amp;amp; Tasks breakdown&lt;/strong&gt; with priorities and story points&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Writes everything to Notion&lt;/strong&gt; via Notion MCP (stdio transport)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reads your workspace&lt;/strong&gt; via MCP to generate context-aware standups and sprint plans&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;How I Used Notion MCP&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;AutoPM uses &lt;code&gt;@notionhq/notion-mcp-server&lt;/code&gt; via &lt;strong&gt;stdio transport&lt;/strong&gt; for ALL Notion operations:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Reads&lt;/strong&gt; — &lt;code&gt;API-post-search&lt;/code&gt; to scan workspace pages, &lt;code&gt;API-get-block-children&lt;/code&gt; to read task data&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Writes&lt;/strong&gt; — &lt;code&gt;API-post-page&lt;/code&gt; to create PRD pages, task breakdowns, standup reports, sprint plans&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Auth check&lt;/strong&gt; — &lt;code&gt;API-get-self&lt;/code&gt; to verify MCP connectivity on health check&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The MCP server…&lt;/p&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/himanshu748/dev-challenge-1" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


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

&lt;p&gt;Notion MCP is the backbone of AutoPM — every single Notion interaction goes through it, &lt;br&gt;
zero direct REST calls.&lt;/p&gt;

&lt;p&gt;I spin up &lt;code&gt;@notionhq/notion-mcp-server&lt;/code&gt; as a &lt;strong&gt;stdio child process per request&lt;/strong&gt;, managed &lt;br&gt;
by the Python &lt;code&gt;mcp&lt;/code&gt; SDK's &lt;code&gt;ClientSession&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;mcp&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;ClientSession&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;StdioServerParameters&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;mcp.client.stdio&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;stdio_client&lt;/span&gt;

&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nf"&gt;stdio_client&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;StdioServerParameters&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;command&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;npx&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;-y&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;@notionhq/notion-mcp-server&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="n"&gt;env&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;NOTION_TOKEN&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;token&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="nf"&gt;as &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;read&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;write&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nc"&gt;ClientSession&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;read&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;write&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;initialize&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;call_tool&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;API-post-page&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{...})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  MCP tools used
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;Purpose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;API-get-self&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Health check — verify MCP connectivity on startup&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;API-post-search&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Scan workspace for existing pages before generating standups&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;API-get-block-children&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Read task data from Notion for context-aware generation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;API-post-page&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Create PRD pages, task breakdowns, standup reports, sprint plans&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  What Notion MCP actually unlocks
&lt;/h3&gt;

&lt;p&gt;Without MCP, AutoPM would be a one-way pipe — generate content, dump it somewhere. &lt;br&gt;
With MCP, it becomes &lt;strong&gt;bidirectional&lt;/strong&gt;: it &lt;em&gt;reads&lt;/em&gt; your existing workspace state before &lt;br&gt;
generating anything. The standup and sprint planner aren't making things up — they're &lt;br&gt;
grounded in your actual Notion data. That's the real unlock.&lt;/p&gt;

&lt;h3&gt;
  
  
  Architecture
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;┌─────────────────┐     ┌──────────────────────┐     ┌──────────────────────┐
│  Browser (UI)   │────▶│  FastAPI Backend      │────▶│  Notion MCP Server   │
│  Vanilla HTML   │     │  (Python)             │     │  (stdio transport)   │
└─────────────────┘     └────────┬─────────────┘     │  npx @notionhq/      │
                                 │                    │  notion-mcp-server   │
                                 ▼                    └──────────┬───────────┘
                        ┌──────────────────┐                    │
                        │  HuggingFace     │                    ▼
                        │  Inference API   │           ┌─────────────────┐
                        │  (Qwen 72B)      │           │  Notion API     │
                        └──────────────────┘           └─────────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Flow:&lt;/strong&gt; HuggingFace (Qwen 2.5 72B) generates structured PM content → FastAPI formats &lt;br&gt;
Notion blocks → MCP writes/reads Notion workspace&lt;/p&gt;

&lt;h3&gt;
  
  
  Tech Stack
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Backend:&lt;/strong&gt; FastAPI (Python)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI:&lt;/strong&gt; HuggingFace Inference API — &lt;code&gt;Qwen/Qwen2.5-72B-Instruct&lt;/code&gt; (free tier!)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Notion:&lt;/strong&gt; &lt;code&gt;@notionhq/notion-mcp-server&lt;/code&gt; via stdio transport&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MCP SDK:&lt;/strong&gt; Python &lt;code&gt;mcp&lt;/code&gt; package — &lt;code&gt;ClientSession&lt;/code&gt; + &lt;code&gt;StdioServerParameters&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Frontend:&lt;/strong&gt; Vanilla HTML/CSS/JS, glassmorphism dark theme&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deployed on:&lt;/strong&gt; Vercel&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devchallenge</category>
      <category>notionchallenge</category>
      <category>mcp</category>
      <category>ai</category>
    </item>
    <item>
      <title>Just completed AWS AI &amp; ML challenge.</title>
      <dc:creator>Himanshu Kumar</dc:creator>
      <pubDate>Mon, 21 Jul 2025 19:21:27 +0000</pubDate>
      <link>https://dev.to/himanshu_748/just-completed-aws-ai-ml-challenge-3064</link>
      <guid>https://dev.to/himanshu_748/just-completed-aws-ai-ml-challenge-3064</guid>
      <description>&lt;p&gt;Hey dev++ community! 🚀&lt;/p&gt;

&lt;p&gt;Just completed the AWS AI &amp;amp; ML Scholars Challenge and got certified in Generative AI with AWS! &lt;/p&gt;

&lt;p&gt;Learned a ton about AWS Bedrock, SageMaker, prompt engineering, and building real AI applications. The hands-on experience with generative AI was amazing.&lt;/p&gt;

&lt;p&gt;Would love to connect with anyone else working on AI/ML projects or interested in AWS AI services!&lt;/p&gt;

&lt;p&gt;Check out my full post: (&lt;a href="https://www.linkedin.com/posts/himanshu748_aws-artificialintelligence-machinelearning-activity-7353138026996289538-tIXc" rel="noopener noreferrer"&gt;https://www.linkedin.com/posts/himanshu748_aws-artificialintelligence-machinelearning-activity-7353138026996289538-tIXc&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;What AI projects are you all working on? Let's share and learn together! 💪&lt;/p&gt;

&lt;h1&gt;
  
  
  AWS #AI #MachineLearning #DevCommunity[]
&lt;/h1&gt;

</description>
      <category>aws</category>
      <category>machinelearning</category>
      <category>ai</category>
      <category>devplusplus</category>
    </item>
    <item>
      <title>Get your startup logo in seconds</title>
      <dc:creator>Himanshu Kumar</dc:creator>
      <pubDate>Sat, 05 Jul 2025 18:32:52 +0000</pubDate>
      <link>https://dev.to/himanshu_748/get-your-startup-logo-in-seconds-4kp5</link>
      <guid>https://dev.to/himanshu_748/get-your-startup-logo-in-seconds-4kp5</guid>
      <description>&lt;p&gt;&lt;em&gt;This post is my submission for &lt;a href="https://dev.to/deved/build-apps-with-google-ai-studio"&gt;DEV Education Track: Build Apps with Google AI Studio&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;An imagen powered logo generator for startups.&lt;/p&gt;

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

&lt;p&gt;&lt;a href="https://aistudio.google.com/apps/drive/18tmCeBIzNHseSJjtA4sVC5NHLAFnoAgS?showPreview=true&amp;amp;resourceKey=" rel="noopener noreferrer"&gt;https://aistudio.google.com/apps/drive/18tmCeBIzNHseSJjtA4sVC5NHLAFnoAgS?showPreview=true&amp;amp;resourceKey=&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.amazonaws.com%2Fuploads%2Farticles%2Fp5o4gn4oxfz6335wjf4m.jpg" 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%2Fp5o4gn4oxfz6335wjf4m.jpg" alt="Prompting the app" width="800" height="1787"&gt;&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.amazonaws.com%2Fuploads%2Farticles%2Ffosfdcn3aist19vj9esq.jpg" 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%2Ffosfdcn3aist19vj9esq.jpg" alt="results" width="800" height="1787"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  My Experience
&lt;/h2&gt;

&lt;p&gt;It was nice working with Google ai studio after 1 and half years it's really upgraded &lt;/p&gt;

</description>
      <category>deved</category>
      <category>learngoogleaistudio</category>
      <category>ai</category>
      <category>gemini</category>
    </item>
  </channel>
</rss>
