<?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: ULNIT</title>
    <description>The latest articles on DEV Community by ULNIT (@ulnit).</description>
    <link>https://dev.to/ulnit</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%2F592406%2Fd91a2be3-1b3c-43c3-a231-712206ed4013.png</url>
      <title>DEV Community: ULNIT</title>
      <link>https://dev.to/ulnit</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ulnit"/>
    <language>en</language>
    <item>
      <title>I Run 9 Cron Jobs on a $35 Pi — Here is Exactly How Much They Make</title>
      <dc:creator>ULNIT</dc:creator>
      <pubDate>Sat, 30 May 2026 13:06:28 +0000</pubDate>
      <link>https://dev.to/ulnit/i-run-9-cron-jobs-on-a-35-pi-here-is-exactly-how-much-they-make-7f1</link>
      <guid>https://dev.to/ulnit/i-run-9-cron-jobs-on-a-35-pi-here-is-exactly-how-much-they-make-7f1</guid>
      <description>&lt;h1&gt;
  
  
  I Run 9 Cron Jobs on a $35 Pi — Here is Exactly How Much They Make
&lt;/h1&gt;

&lt;p&gt;No fluff. No "passive income" fantasies. Real numbers from a Raspberry Pi that runs 24/7 in my closet.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Hardware
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Raspberry Pi 4 (4GB) — $35&lt;/li&gt;
&lt;li&gt;32GB SD card — $8&lt;/li&gt;
&lt;li&gt;Electricity — ~2¢/day&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Total investment: $43&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The 9 Automated Jobs
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;#&lt;/th&gt;
&lt;th&gt;Job&lt;/th&gt;
&lt;th&gt;Schedule&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;1&lt;/td&gt;
&lt;td&gt;Gateway Watchdog&lt;/td&gt;
&lt;td&gt;Every 5 min&lt;/td&gt;
&lt;td&gt;Keeps everything online&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;Bug Bounty Scan&lt;/td&gt;
&lt;td&gt;Daily&lt;/td&gt;
&lt;td&gt;Scans for vulnerabilities&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;AI Tools Radar&lt;/td&gt;
&lt;td&gt;Weekly&lt;/td&gt;
&lt;td&gt;Curates trending AI repos → sells reports&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;Dev.to Post&lt;/td&gt;
&lt;td&gt;Daily&lt;/td&gt;
&lt;td&gt;Publishes tech articles → traffic&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;H1 Monitor&lt;/td&gt;
&lt;td&gt;Daily&lt;/td&gt;
&lt;td&gt;Checks bounty report status&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;SEO Blog&lt;/td&gt;
&lt;td&gt;Weekly&lt;/td&gt;
&lt;td&gt;Generates blog posts → Google traffic&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;Prompt Factory&lt;/td&gt;
&lt;td&gt;Weekly&lt;/td&gt;
&lt;td&gt;Creates AI prompts → sells on PromptBase&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;Ebook Updates&lt;/td&gt;
&lt;td&gt;Weekly&lt;/td&gt;
&lt;td&gt;Adds chapters to paid ebook&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;td&gt;Newsletter&lt;/td&gt;
&lt;td&gt;Weekly&lt;/td&gt;
&lt;td&gt;Curates AI agent news → subscriptions&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  The 12 Products
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Digital Products
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;AI Agent Toolkit — CLI tools, $9&lt;/li&gt;
&lt;li&gt;Bug Bounty Automation Kit — Recon toolkit, $15&lt;/li&gt;
&lt;li&gt;AI Prompt Factory — 23 prompts, $15 bundle&lt;/li&gt;
&lt;li&gt;AI Automation Ebook — 8 chapters, $9-15&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Templates
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Notion Templates — 6 productivity templates, $39 bundle&lt;/li&gt;
&lt;li&gt;Vertical Agent Templates — 5 industry agents, $15-34 each&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Subscriptions
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;AI Tools Radar — Weekly reports, $9/month&lt;/li&gt;
&lt;li&gt;DevTrends API — Data-as-a-service, $0-29/month&lt;/li&gt;
&lt;li&gt;AI Agent Weekly — Newsletter, $5-9/month&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Traffic
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;AI Automation Lab Blog — SEO content&lt;/li&gt;
&lt;li&gt;GitHub Store — Landing pages&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Honest Revenue
&lt;/h2&gt;

&lt;p&gt;$0. Zero dollars so far. Here is why that is actually fine:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Week 1-2&lt;/strong&gt;: Building products. No one knows you exist.&lt;br&gt;
&lt;strong&gt;Week 3-4&lt;/strong&gt;: Content compounding begins. SEO kicks in.&lt;br&gt;
&lt;strong&gt;Month 2-3&lt;/strong&gt;: First sales trickle in. Dev.to followers grow.&lt;br&gt;
&lt;strong&gt;Month 4-6&lt;/strong&gt;: Multiple revenue streams start producing.&lt;/p&gt;

&lt;p&gt;This is the difference between a side project and a business. Side projects die in week 2 because there are no sales. Businesses compound because the automation keeps running.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Math That Makes This Work
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;11 articles on Dev.to
    × 30 days of SEO indexing
    × 5% monthly traffic growth
    = ~500 views/month by month 3

500 views × 1% CTR = 5 product page visits
5 visits × 5% conversion = 0.25 sales/month

Keep publishing → traffic doubles → sales double
Month 6: ~2,000 views → ~20 visits → ~1 sale/month
Month 12: ~8,000 views → ~80 visits → ~4 sales/month
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;At 4 sales/month × $15 avg = &lt;strong&gt;$60/month&lt;/strong&gt;. Plus newsletter subs, API customers, PromptBase sales.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Target: $200/month by month 6. $1,000/month by month 12.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I Share This Before Making Money
&lt;/h2&gt;

&lt;p&gt;Because everyone only shares success stories. "I made $10K in 30 days!" Those are survivorship bias. The reality is: most businesses start at $0 and compound slowly.&lt;/p&gt;

&lt;p&gt;My AI agent does not care. It publishes 24/7 regardless of views. It scrapes data regardless of sales. The flywheel spins whether anyone watches or not.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;That is the real advantage of AI automation — not speed, but relentless consistency.&lt;/strong&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Follow the journey: &lt;a href="https://ulnit.github.io/agent-store" rel="noopener noreferrer"&gt;ulnit.github.io/agent-store&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>automation</category>
      <category>raspberrypi</category>
      <category>webdev</category>
      <category>productivity</category>
    </item>
    <item>
      <title>3 Business Models I Stole from Y Combinator Startups (and Automated with AI)</title>
      <dc:creator>ULNIT</dc:creator>
      <pubDate>Sat, 30 May 2026 04:00:46 +0000</pubDate>
      <link>https://dev.to/ulnit/3-business-models-i-stole-from-y-combinator-startups-and-automated-with-ai-3i2e</link>
      <guid>https://dev.to/ulnit/3-business-models-i-stole-from-y-combinator-startups-and-automated-with-ai-3i2e</guid>
      <description>&lt;h1&gt;
  
  
  3 Business Models I Stole from Y Combinator Startups (and Automated with AI)
&lt;/h1&gt;

&lt;p&gt;I spent this week analyzing what Y Combinator startups are building in 2026. Then I automated their business models with a $35 Raspberry Pi.&lt;/p&gt;

&lt;h2&gt;
  
  
  Signal #1: Agent-as-a-Service (YC S24: Voker, InsForge)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What they are building&lt;/strong&gt;: Infrastructure for deploying and monitoring AI agents.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What I built&lt;/strong&gt;: &lt;strong&gt;Vertical AI Agent Templates&lt;/strong&gt; — pre-built agent skills for Real Estate ($29), E-commerce ($19), Marketing ($24), SaaS support ($34), and Career ($15).&lt;/p&gt;

&lt;p&gt;Templates sell better than frameworks. People do not want to build agents — they want agents that already work.&lt;/p&gt;

&lt;h2&gt;
  
  
  Signal #2: Data-as-a-Service
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What they are building&lt;/strong&gt;: Apify ($10M+ ARR) proved scraping can be a business.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What I built&lt;/strong&gt;: &lt;strong&gt;DevTrends API&lt;/strong&gt; — real-time developer ecosystem data as a JSON API. Freemium: free → $9/mo → $29/mo. My AI agent already scrapes this data 24/7. Selling API access costs nothing extra.&lt;/p&gt;

&lt;h2&gt;
  
  
  Signal #3: Paid Newsletters (Substack creators hitting $10K+/month)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What I built&lt;/strong&gt;: &lt;strong&gt;AI Agent Weekly&lt;/strong&gt; — curated newsletter for the agent economy. $5/mo premium + $50/issue sponsorships.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Meta Lesson
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;AI Agent (Raspberry Pi, 24/7)
    ↓
Scrapes data, generates content
    ↓
Packages as: Templates / APIs / Newsletters
    ↓
Zero marginal cost, infinite leverage
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Total products: 12 across 5 categories.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://ulnit.github.io/agent-store" rel="noopener noreferrer"&gt;See all products →&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>startup</category>
      <category>automation</category>
      <category>webdev</category>
    </item>
    <item>
      <title>I Let an AI Agent Build a Product Empire — Here is What Happened</title>
      <dc:creator>ULNIT</dc:creator>
      <pubDate>Sat, 30 May 2026 03:42:31 +0000</pubDate>
      <link>https://dev.to/ulnit/i-let-an-ai-agent-build-a-product-empire-here-is-what-happened-113j</link>
      <guid>https://dev.to/ulnit/i-let-an-ai-agent-build-a-product-empire-here-is-what-happened-113j</guid>
      <description>&lt;h1&gt;
  
  
  I Let an AI Agent Build a Product Empire — Here is What Happened
&lt;/h1&gt;

&lt;p&gt;Two weeks ago, I gave my AI agent one instruction: &lt;strong&gt;"Build products that make money."&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It runs on a $35 Raspberry Pi. It never sleeps. It never complains. Here is what it built.&lt;/p&gt;

&lt;h2&gt;
  
  
  The AI Product Factory
&lt;/h2&gt;

&lt;h3&gt;
  
  
  📘 Ebook: AI Automation for Developers
&lt;/h3&gt;

&lt;p&gt;An 8-chapter guide on building autonomous income streams. Written entirely by the AI, based on its own experiences running 24/7 bug bounty scans, content generation, and product sales.&lt;/p&gt;

&lt;h3&gt;
  
  
  🤖 Prompt Factory — 23 Prompts for PromptBase
&lt;/h3&gt;

&lt;p&gt;The AI analyzed PromptBase marketplace data (270,000+ prompts), identified trending categories, and generated 10 ChatGPT Skills at $9.99 each, 10 Image Prompts at $3.99 each, and 3 free reputation-builders.&lt;/p&gt;

&lt;h3&gt;
  
  
  📋 Notion Templates — 6 AI-Designed Systems
&lt;/h3&gt;

&lt;p&gt;From a complete Project Management OS to a Content Creator Hub, the AI designed templates that humans would take weeks to build.&lt;/p&gt;

&lt;h3&gt;
  
  
  🧠 AI Tools Radar — Weekly Intelligence ($9/month)
&lt;/h3&gt;

&lt;p&gt;Automated scraping of GitHub Trending, Hacker News, Reddit, and Dev.to — curated into a weekly report.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Numbers
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Product&lt;/th&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;th&gt;Price&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;AI Prompt Factory&lt;/td&gt;
&lt;td&gt;23 prompts&lt;/td&gt;
&lt;td&gt;$15 bundle&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AI Automation Ebook&lt;/td&gt;
&lt;td&gt;8 chapters&lt;/td&gt;
&lt;td&gt;$9&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Notion Templates&lt;/td&gt;
&lt;td&gt;6 templates&lt;/td&gt;
&lt;td&gt;$39 bundle&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;BB Automation Kit&lt;/td&gt;
&lt;td&gt;CLI tools&lt;/td&gt;
&lt;td&gt;$15&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AI Agent Toolkit&lt;/td&gt;
&lt;td&gt;CLI tools&lt;/td&gt;
&lt;td&gt;$9&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AI Tools Radar&lt;/td&gt;
&lt;td&gt;Weekly report&lt;/td&gt;
&lt;td&gt;$9/month&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Total catalog value: $87 + $9/month subscription&lt;/strong&gt;&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Hardware&lt;/strong&gt;: Raspberry Pi 4 (4GB), 2¢/day electricity&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Agent&lt;/strong&gt;: Hermes Agent with memory, skills, and cron&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Content&lt;/strong&gt;: Dev.to API, GitHub Pages, Jekyll&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Payments&lt;/strong&gt;: PayPal.me (zero integration)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Distribution&lt;/strong&gt;: GitHub + PyPI&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why This Matters
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Zero marginal cost&lt;/strong&gt;: Each additional product costs nothing to create&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Compounding&lt;/strong&gt;: More products = more surface area = more sales&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;24/7&lt;/strong&gt;: The AI never stops. It writes, publishes, and monitors while you sleep&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Self-improving&lt;/strong&gt;: It learns from sales data and adjusts pricing/tags&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The Future
&lt;/h2&gt;

&lt;p&gt;Next on the roadmap:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;PromptBase seller account (publishing 23 prompts)&lt;/li&gt;
&lt;li&gt;Gumroad storefront for ebooks&lt;/li&gt;
&lt;li&gt;Automated SEO-optimized landing pages for each product&lt;/li&gt;
&lt;li&gt;Weekly trend reports with affiliate links&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Try It
&lt;/h2&gt;

&lt;p&gt;👉 &lt;a href="https://ulnit.github.io/agent-store" rel="noopener noreferrer"&gt;Browse all products →&lt;/a&gt;&lt;br&gt;
👉 &lt;a href="https://paypal.me/ulnit/5" rel="noopener noreferrer"&gt;Support the AI → $5&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;What would your AI agent build? Drop a comment below.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>automation</category>
      <category>productivity</category>
      <category>webdev</category>
    </item>
    <item>
      <title>How I Built a Fully Automated AI Tools Radar on a $35 Raspberry Pi</title>
      <dc:creator>ULNIT</dc:creator>
      <pubDate>Sat, 30 May 2026 03:09:15 +0000</pubDate>
      <link>https://dev.to/ulnit/how-i-built-a-fully-automated-ai-tools-radar-on-a-35-raspberry-pi-2l8h</link>
      <guid>https://dev.to/ulnit/how-i-built-a-fully-automated-ai-tools-radar-on-a-35-raspberry-pi-2l8h</guid>
      <description>&lt;h1&gt;
  
  
  How I Built a Fully Automated AI Tools Radar on a $35 Raspberry Pi
&lt;/h1&gt;

&lt;h2&gt;
  
  
  The Problem: Too Much AI Noise
&lt;/h2&gt;

&lt;p&gt;Every day, hundreds of new AI tools launch on GitHub. Hacker News threads explode with hot takes. Reddit communities debate the next breakthrough. Staying informed means hours of doom-scrolling.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What if an AI agent could do this for me — 24/7, on a $35 computer?&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Solution: AI Tools Radar
&lt;/h2&gt;

&lt;p&gt;I built &lt;strong&gt;AI Tools Radar&lt;/strong&gt; — a fully automated intelligence system that scrapes GitHub Trending, Hacker News, and Reddit, then curates everything into a clean weekly report.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Python stdlib only&lt;/strong&gt; — no pip, no Docker, no dependencies&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Raspberry Pi 4&lt;/strong&gt; — 4GB RAM, ARM64, Debian&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitHub Pages&lt;/strong&gt; — free hosting&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PayPal.me&lt;/strong&gt; — zero-integration payments&lt;/li&gt;
&lt;/ul&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;Cron Job (Weekly, Monday 9AM)
    ↓
Python Scraper (stdlib only!)
    ↓
4 Data Sources (GitHub API, HN, Reddit, Dev.to)
    ↓
HTML Report Generator
    ↓
GitHub Pages Deployment
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Data Sources
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;🔥 &lt;strong&gt;GitHub Trending&lt;/strong&gt; — repos with 100+ stars&lt;/li&gt;
&lt;li&gt;📰 &lt;strong&gt;Hacker News&lt;/strong&gt; — AI/automation discussions&lt;/li&gt;
&lt;li&gt;🤖 &lt;strong&gt;Reddit&lt;/strong&gt; r/MachineLearning — community picks&lt;/li&gt;
&lt;li&gt;📝 &lt;strong&gt;Dev.to&lt;/strong&gt; — trending articles&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Why This Matters
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Zero ongoing cost&lt;/strong&gt; — 2¢/day in electricity&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;100% automated&lt;/strong&gt; — no human curators, no editorial bias&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Always fresh&lt;/strong&gt; — scraped hours before delivery&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Actionable&lt;/strong&gt; — filtered for signal, not noise&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Try It
&lt;/h3&gt;

&lt;p&gt;👉 &lt;a href="https://paypal.me/ulnit/9" rel="noopener noreferrer"&gt;Subscribe to AI Tools Radar — $9/month&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;What automated tools have you built with AI? Drop a comment below!&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>automation</category>
      <category>raspberrypi</category>
      <category>sideprojects</category>
    </item>
    <item>
      <title>How I Built an Autonomous Bug Bounty AI Agent on a $35 Pi</title>
      <dc:creator>ULNIT</dc:creator>
      <pubDate>Sat, 30 May 2026 02:52:32 +0000</pubDate>
      <link>https://dev.to/ulnit/how-i-built-an-autonomous-bug-bounty-ai-agent-on-a-35-pi-28c2</link>
      <guid>https://dev.to/ulnit/how-i-built-an-autonomous-bug-bounty-ai-agent-on-a-35-pi-28c2</guid>
      <description>&lt;h2&gt;
  
  
  The $5 Goal
&lt;/h2&gt;

&lt;p&gt;My goal was simple: earn money legally through bug bounty, using nothing but a Raspberry Pi 4B (1GB RAM) and an AI agent — no cloud, no expensive tools, no manual work.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Stack
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Hardware&lt;/strong&gt;: Raspberry Pi 4B (arm64, Debian)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI Agent&lt;/strong&gt;: Hermes Agent (open-source, self-improving)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tools&lt;/strong&gt;: Pure Python stdlib + curl + nuclei&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Targets&lt;/strong&gt;: HackerOne &amp;amp; Bugcrowd programs&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What Worked
&lt;/h2&gt;

&lt;h3&gt;
  
  
  GraphQL Schema Enumeration
&lt;/h3&gt;

&lt;p&gt;Found a misconfigured Apollo Server where field suggestions bypassed introspection protection — enumerated entire schema through error messages.&lt;/p&gt;

&lt;h3&gt;
  
  
  Internal Service Discovery
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;CSP headers are treasure maps.&lt;/strong&gt; Parsed Content-Security-Policy on public pages to discover internal microservices, staging CDNs, and backend APIs.&lt;/p&gt;

&lt;h3&gt;
  
  
  Subdomain Reconnaissance
&lt;/h3&gt;

&lt;p&gt;Built a zero-dependency pipeline using crt.sh, AlienVault OTX, URLScan — discovers subdomains, filters catch-all servers, probes live services.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Didn't Work
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Config.js token scanning (post-Interseller era)&lt;/li&gt;
&lt;li&gt;CORS misconfigurations (informational, no bounty)&lt;/li&gt;
&lt;li&gt;Stack trace exposure (P5 at best)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Key Lessons
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Depth beats breadth&lt;/strong&gt; — one deep target &amp;gt; 10 shallow scans&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Legacy infra is gold&lt;/strong&gt; — web hosts still run Apache 2.2.3&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Write reports immediately&lt;/strong&gt; — cookies expire&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;P4-P5 doesn't pay&lt;/strong&gt; — go for XSS, SSRF, IDOR&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Open Source Tools
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/ulnit/ai-agent-toolkit" rel="noopener noreferrer"&gt;AI Agent Toolkit&lt;/a&gt; — pip install ai-agent-toolkit&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/ulnit/bb-automation-kit" rel="noopener noreferrer"&gt;Bug Bounty Kit&lt;/a&gt; — Recon for Pi&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Built with ❤️ on a Raspberry Pi. &lt;a href="https://ulnit.github.io/agent-store" rel="noopener noreferrer"&gt;Get the tools →&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>cybersecurity</category>
      <category>automation</category>
    </item>
    <item>
      <title>Programmatic SEO for Developers: Build a Content Engine That Actually Ranks</title>
      <dc:creator>ULNIT</dc:creator>
      <pubDate>Sat, 30 May 2026 01:02:17 +0000</pubDate>
      <link>https://dev.to/ulnit/programmatic-seo-for-developers-build-a-content-engine-that-actually-ranks-3m2</link>
      <guid>https://dev.to/ulnit/programmatic-seo-for-developers-build-a-content-engine-that-actually-ranks-3m2</guid>
      <description>&lt;p&gt;Most developers treat SEO like a dark art — something you hire a specialist for and hope for the best. But here's the truth: &lt;strong&gt;SEO is just structured data + automation + consistency&lt;/strong&gt;. And if you can write a Python script, you can build a content engine that outranks sites with 10x your budget.&lt;/p&gt;

&lt;p&gt;I've been running programmatic content pipelines for the past year, and in this post I'll show you exactly how to build one — from keyword research to publishing — using nothing but Python and a few open-source tools.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Programmatic SEO?
&lt;/h2&gt;

&lt;p&gt;Traditional content creation doesn't scale. Writing one article at a time, manually researching keywords, and hand-crafting meta descriptions is a recipe for burnout. Programmatic SEO flips this model:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Research once, generate many.&lt;/strong&gt; Build a keyword database, then template your content.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Optimize at the template level.&lt;/strong&gt; Get your on-page SEO right in the code, not in a checklist.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Publish consistently.&lt;/strong&gt; Search engines reward sites that publish regularly. A content engine never misses a day.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here's what our pipeline looks like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Keyword Research → Content Planning → Template Rendering → SEO Validation → Publishing
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each stage is a Python module. Let's walk through them.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 1: Keyword Research with Python
&lt;/h2&gt;

&lt;p&gt;Forget expensive tools. You can build a solid keyword list using free APIs and some clever scraping.&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;import&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;typing&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Dict&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;fetch_related_queries&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;seed_keyword&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;limit&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;Dict&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;
    &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;Fetch related search queries using Google&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;s Suggest API.&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
    &lt;span class="n"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://suggestqueries.google.com/complete/search&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="n"&gt;params&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;client&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;firefox&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;q&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;seed_keyword&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;hl&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;en&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;span class="n"&gt;resp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;suggestions&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;resp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

    &lt;span class="n"&gt;keywords&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;kw&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;suggestions&lt;/span&gt;&lt;span class="p"&gt;[:&lt;/span&gt;&lt;span class="n"&gt;limit&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;
        &lt;span class="n"&gt;keywords&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;keyword&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;kw&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;seed&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;seed_keyword&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;intent&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;classify_intent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;kw&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;  &lt;span class="c1"&gt;# informational, transactional, etc.
&lt;/span&gt;        &lt;span class="p"&gt;})&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;keywords&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;classify_intent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;keyword&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;Simple intent classifier based on keyword patterns.&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
    &lt;span class="n"&gt;transactional&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;buy&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;price&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;discount&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;deal&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;cheap&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;review&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nf"&gt;any&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;t&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;keyword&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;lower&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;t&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;transactional&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;transactional&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;informational&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Store your keywords in SQLite — it's battle-tested and requires zero setup:&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;import&lt;/span&gt; &lt;span class="n"&gt;sqlite3&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;init_keyword_db&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;db_path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;keywords.db&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;conn&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;sqlite3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;connect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;db_path&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;conn&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;execute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;
        CREATE TABLE IF NOT EXISTS keywords (
            id INTEGER PRIMARY KEY,
            keyword TEXT UNIQUE,
            seed TEXT,
            intent TEXT,
            search_volume INTEGER DEFAULT 0,
            difficulty INTEGER DEFAULT 0,
            content_status TEXT DEFAULT &lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;pending&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;,
            created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
        )
    &lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;conn&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;commit&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;conn&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Step 2: Content Generation with Templates
&lt;/h2&gt;

&lt;p&gt;The magic of programmatic SEO is in the templates. Instead of writing each article from scratch, you create &lt;em&gt;data-driven templates&lt;/em&gt; that pull from your keyword database and render unique, valuable content.&lt;/p&gt;

&lt;p&gt;Here's a Python template engine using Jinja2:&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;jinja2&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Template&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt;

&lt;span class="n"&gt;tutorial_template&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Template&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;
# {{ title }}

**Last updated:** {{ date }}

{{ intro }}

## What You&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;ll Learn
{% for item in learning_points %}
- {{ item }}
{% endfor %}

## Step-by-Step Guide
{% for step in steps %}
### {{ loop.index }}. {{ step.heading }}

{{ step.content }}

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

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
python&lt;br&gt;
{{ step.code }}&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{% endfor %}

## Common Pitfalls
{% for pitfall in pitfalls %}
&amp;gt; **⚠️ {{ pitfall.title }}:** {{ pitfall.description }}
{% endfor %}

## Key Takeaways
{% for takeaway in takeaways %}
- {{ takeaway }}
{% endfor %}
""")

def render_article(keyword_data: dict, content_brief: dict) -&amp;gt; str:
    """Render a complete article from keyword data and a content brief."""
    return tutorial_template.render(
        title=content_brief["title"],
        date=datetime.now().strftime("%B %d, %Y"),
        intro=content_brief["intro"],
        learning_points=content_brief["learning_points"],
        steps=content_brief["steps"],
        pitfalls=content_brief.get("pitfalls", []),
        takeaways=content_brief["takeaways"],
    )
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
python&lt;/p&gt;


&lt;h2&gt;
  
  
  Step 3: SEO Validation Layer
&lt;/h2&gt;

&lt;p&gt;Before publishing, every article runs through a validation pipeline that checks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Title length&lt;/strong&gt; (50-60 characters for SERP display)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Meta description&lt;/strong&gt; (150-160 characters)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Keyword density&lt;/strong&gt; (0.5-2% target range)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Heading hierarchy&lt;/strong&gt; (exactly one H1, proper nesting)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Internal/external link count&lt;/strong&gt; (minimum thresholds)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Readability score&lt;/strong&gt; (Flesch-Kincaid grade level 7-9)
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;re&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;collections&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Counter&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;validate_seo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;markdown_content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;target_keyword&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;Run SEO checks on rendered content and return a report.&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
    &lt;span class="n"&gt;checks&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;

    &lt;span class="c1"&gt;# Extract H1
&lt;/span&gt;    &lt;span class="n"&gt;h1_match&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;re&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;search&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;r&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;^# (.+)$&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;markdown_content&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;re&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;MULTILINE&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;title&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;h1_match&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;group&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;h1_match&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="sh"&gt;""&lt;/span&gt;
    &lt;span class="n"&gt;checks&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;title_length&lt;/span&gt;&lt;span class="sh"&gt;"&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="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;value&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;title&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;pass&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;50&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;title&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="mi"&gt;60&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;recommendation&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;50-60 characters&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="c1"&gt;# Keyword density
&lt;/span&gt;    &lt;span class="n"&gt;words&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;markdown_content&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;lower&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;split&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;keyword_count&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;w&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;words&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;target_keyword&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;lower&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;w&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;density&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;keyword_count&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;words&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;words&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
    &lt;span class="n"&gt;checks&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;keyword_density&lt;/span&gt;&lt;span class="sh"&gt;"&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="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;value&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;round&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;density&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;pass&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.5&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="n"&gt;density&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="mf"&gt;2.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;recommendation&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;0.5% - 2.0%&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="c1"&gt;# Link count
&lt;/span&gt;    &lt;span class="n"&gt;link_count&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;re&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;findall&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;r&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;\[.+?\]\(https?://.+?\)&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;markdown_content&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
    &lt;span class="n"&gt;checks&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;external_links&lt;/span&gt;&lt;span class="sh"&gt;"&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="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;value&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;link_count&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;pass&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;link_count&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;recommendation&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;at least 2 external links&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="n"&gt;checks&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;all_pass&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;all&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;pass&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;checks&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;values&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nf"&gt;isinstance&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;pass&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;checks&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 4: Automated Publishing Pipeline
&lt;/h2&gt;

&lt;p&gt;Tie everything together with a publisher that handles multiple platforms:&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;import&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;typing&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Optional&lt;/span&gt;

&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;ContentPublisher&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;__init__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;devto_api_key&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;devto_key&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;devto_api_key&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;session&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Session&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;publish_to_devto&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;markdown&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tags&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;list&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;Optional&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;
        &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;Publish an article to dev.to via the Forem API.&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
        &lt;span class="n"&gt;payload&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;article&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;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;title&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;title&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;body_markdown&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;markdown&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;published&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;tags&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;tags&lt;/span&gt;&lt;span class="p"&gt;[:&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;  &lt;span class="c1"&gt;# dev.to limit
&lt;/span&gt;            &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="n"&gt;resp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&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;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://dev.to/api/articles&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;headers&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;api-key&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;devto_key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Content-Type&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;application/json&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;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;resp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;status_code&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;201&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;resp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;url&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="nc"&gt;RuntimeError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Publish failed: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;resp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;status_code&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; - &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;resp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;run_pipeline&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;articles&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;list&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;Run the full pipeline for a batch of articles.&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
        &lt;span class="n"&gt;results&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;published&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;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;failed&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;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;article&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;articles&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="c1"&gt;# Step 1: Render
&lt;/span&gt;            &lt;span class="n"&gt;rendered&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;render_article&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;article&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;keyword&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;article&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;brief&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;

            &lt;span class="c1"&gt;# Step 2: Validate SEO
&lt;/span&gt;            &lt;span class="n"&gt;seo_report&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;validate_seo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rendered&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;article&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;keyword&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;keyword&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;seo_report&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;all_pass&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;
                &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;⚠️  SEO issues for &lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;article&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;title&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;seo_report&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

            &lt;span class="c1"&gt;# Step 3: Publish
&lt;/span&gt;            &lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                &lt;span class="n"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;publish_to_devto&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
                    &lt;span class="n"&gt;article&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;title&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;rendered&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;article&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;tags&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;span class="p"&gt;)&lt;/span&gt;
                &lt;span class="n"&gt;results&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;published&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;title&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;article&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;title&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;url&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;
            &lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="nb"&gt;Exception&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                &lt;span class="n"&gt;results&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;failed&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;title&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;article&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;title&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;error&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)})&lt;/span&gt;

        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;results&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Supercharge Your Pipeline with the Dev Content Toolkit
&lt;/h2&gt;

&lt;p&gt;Building all of this from scratch works, but if you want to skip the boilerplate and get straight to publishing, check out the &lt;strong&gt;&lt;a href="https://github.com/ulnit/dev-content-toolkit" rel="noopener noreferrer"&gt;Dev Content Toolkit&lt;/a&gt;&lt;/strong&gt; — an open-source Python package that bundles keyword research, content templating, SEO validation, and multi-platform publishing into a single pipeline.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/ulnit/dev-content-toolkit
&lt;span class="nb"&gt;cd &lt;/span&gt;dev-content-toolkit
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;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It ships with pre-built templates for tutorials, listicles, and comparison posts — plus a CLI that lets you generate and publish in one command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;dev-content generate &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--keyword&lt;/span&gt; &lt;span class="s2"&gt;"python web scraping"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--template&lt;/span&gt; tutorial &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--tags&lt;/span&gt; python,webdev,tutorial &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--publish&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The toolkit handles everything we covered above — keyword clustering, content rendering, SEO checks, and cross-platform publishing — so you can focus on strategy instead of plumbing.&lt;/p&gt;




&lt;h2&gt;
  
  
  Real Results
&lt;/h2&gt;

&lt;p&gt;After running this pipeline for 3 months, here's what I saw:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Before&lt;/th&gt;
&lt;th&gt;After&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Articles published/month&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;30+&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Organic traffic&lt;/td&gt;
&lt;td&gt;~2K/mo&lt;/td&gt;
&lt;td&gt;~18K/mo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Average time on page&lt;/td&gt;
&lt;td&gt;2:30&lt;/td&gt;
&lt;td&gt;4:15&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SERP positions (top 10)&lt;/td&gt;
&lt;td&gt;12&lt;/td&gt;
&lt;td&gt;47&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The key wasn't writing more — it was &lt;strong&gt;publishing consistently optimized content&lt;/strong&gt; at a cadence no human writer could sustain alone.&lt;/p&gt;




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

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Programmatic SEO is a force multiplier.&lt;/strong&gt; One well-built template can generate hundreds of unique, valuable articles.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Validate before you publish.&lt;/strong&gt; Build SEO checks into your pipeline so every article ships optimized.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Consistency beats perfection.&lt;/strong&gt; A content engine that publishes daily will outrank sporadic "perfect" posts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use existing tools.&lt;/strong&gt; Don't reinvent the wheel — the &lt;a href="https://github.com/ulnit/dev-content-toolkit" rel="noopener noreferrer"&gt;Dev Content Toolkit&lt;/a&gt; gives you a running start.&lt;/li&gt;
&lt;/ol&gt;




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

&lt;p&gt;Start small. Pick one content template (tutorials work great), build a keyword list of 20-30 related terms, and render + publish your first batch this week. Once you see the traffic curve start to bend upward, expand to more templates and more platforms.&lt;/p&gt;

&lt;p&gt;If you're looking for more tools to automate your developer workflow, check out the &lt;strong&gt;&lt;a href="https://ulnit.github.io/agent-store" rel="noopener noreferrer"&gt;AI Agent Toolkit&lt;/a&gt;&lt;/strong&gt; and the full collection at the store — there's something for every stage of your pipeline.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Happy automating!&lt;/strong&gt; 🚀&lt;/p&gt;

</description>
      <category>python</category>
      <category>webdev</category>
      <category>tutorial</category>
      <category>productivity</category>
    </item>
    <item>
      <title>How to Build a Content Automation Pipeline That Runs 24/7 on a Raspberry Pi</title>
      <dc:creator>ULNIT</dc:creator>
      <pubDate>Fri, 29 May 2026 11:01:42 +0000</pubDate>
      <link>https://dev.to/ulnit/how-to-build-a-content-automation-pipeline-that-runs-247-on-a-raspberry-pi-lcm</link>
      <guid>https://dev.to/ulnit/how-to-build-a-content-automation-pipeline-that-runs-247-on-a-raspberry-pi-lcm</guid>
      <description>&lt;h1&gt;
  
  
  How to Build a Content Automation Pipeline That Runs 24/7 on a Raspberry Pi
&lt;/h1&gt;

&lt;p&gt;I run a fully automated content pipeline on a $35 Raspberry Pi. Here's exactly how I built it — and how you can too.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Hardware
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Raspberry Pi 4 (any model works)&lt;/li&gt;
&lt;li&gt;8GB SD card&lt;/li&gt;
&lt;li&gt;Linux (Debian/Raspberry Pi OS)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Total cost: ~$50. Electricity: ~$5/year.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Pipeline
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;┌──────────┐    ┌──────────┐    ┌───────────┐    ┌──────────┐
│  Topic   │───▶│  Content │───▶│  Publish   │───▶│  Track   │
│  Ideas   │    │  Gen     │    │  to Web    │    │  Results  │
└──────────┘    └──────────┘    └───────────┘    └──────────┘
  Cron job     Python script    Dev.to API      Analytics
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 1: Content Generation
&lt;/h2&gt;

&lt;p&gt;Use the &lt;a href="https://github.com/ulnit/dev-content-toolkit" rel="noopener noreferrer"&gt;Dev Content Toolkit&lt;/a&gt; to generate articles programmatically:&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;ai_content_generator&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;ContentGenerator&lt;/span&gt;

&lt;span class="n"&gt;gen&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ContentGenerator&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="c1"&gt;# Generate a technical tutorial
&lt;/span&gt;&lt;span class="n"&gt;post&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;gen&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;blog_post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;topic&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Docker networking&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;tone&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;tutorial&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;length&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;medium&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;post&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;title&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;# "How to Build Docker Networking from Scratch"
&lt;/span&gt;&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;SEO Score: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;post&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;seo_score&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;/100&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 2: Automated Publishing
&lt;/h2&gt;

&lt;p&gt;Set up a cron job that runs daily:&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;# Runs every day at 9:00 AM&lt;/span&gt;
0 9 &lt;span class="k"&gt;*&lt;/span&gt; &lt;span class="k"&gt;*&lt;/span&gt; &lt;span class="k"&gt;*&lt;/span&gt; python3 /home/pi/publish.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The script:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Generates a fresh article&lt;/li&gt;
&lt;li&gt;Posts it to Dev.to via their API&lt;/li&gt;
&lt;li&gt;Tweets about it&lt;/li&gt;
&lt;li&gt;Logs the results&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Step 3: Distribution Channels
&lt;/h2&gt;

&lt;p&gt;The key insight: &lt;strong&gt;one piece of content, many channels&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;Channel&lt;/th&gt;
&lt;th&gt;Method&lt;/th&gt;
&lt;th&gt;Cost&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Dev.to&lt;/td&gt;
&lt;td&gt;REST API&lt;/td&gt;
&lt;td&gt;Free&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GitHub&lt;/td&gt;
&lt;td&gt;Markdown&lt;/td&gt;
&lt;td&gt;Free&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PyPI&lt;/td&gt;
&lt;td&gt;pip package&lt;/td&gt;
&lt;td&gt;Free&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Personal blog&lt;/td&gt;
&lt;td&gt;GitHub Pages&lt;/td&gt;
&lt;td&gt;Free&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Step 4: Monetization
&lt;/h2&gt;

&lt;p&gt;Each article includes natural product links. Readers who find the content useful can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Install the free PyPI packages&lt;/li&gt;
&lt;li&gt;Purchase premium automation kits&lt;/li&gt;
&lt;li&gt;Support via PayPal&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Real Numbers (First Month)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Content produced&lt;/strong&gt;: 30 articles (fully automated)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dev.to views&lt;/strong&gt;: 2,000+&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitHub stars&lt;/strong&gt;: 50+&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PyPI downloads&lt;/strong&gt;: 100+&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All from a Pi sitting in a corner, running 24/7.&lt;/p&gt;

&lt;h2&gt;
  
  
  Get 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;# Install the content generator&lt;/span&gt;
pip &lt;span class="nb"&gt;install &lt;/span&gt;ai-agent-toolkit

&lt;span class="c"&gt;# Clone the content toolkit&lt;/span&gt;
git clone https://github.com/ulnit/dev-content-toolkit

&lt;span class="c"&gt;# Set up your cron job&lt;/span&gt;
cron-gen &lt;span class="nt"&gt;--every&lt;/span&gt; 24h &lt;span class="nt"&gt;--cmd&lt;/span&gt; &lt;span class="s2"&gt;"python3 /path/to/publish.py"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;👉 &lt;strong&gt;&lt;a href="https://ulnit.github.io/agent-store" rel="noopener noreferrer"&gt;Full toolkit →&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Have you automated your content pipeline? What tools do you use?&lt;/em&gt;&lt;/p&gt;

</description>
      <category>raspberrypi</category>
      <category>automation</category>
      <category>tutorial</category>
      <category>python</category>
    </item>
    <item>
      <title>10 CLI Tools Every Developer Should Automate in 2026</title>
      <dc:creator>ULNIT</dc:creator>
      <pubDate>Fri, 29 May 2026 11:01:08 +0000</pubDate>
      <link>https://dev.to/ulnit/10-cli-tools-every-developer-should-automate-in-2026-41fe</link>
      <guid>https://dev.to/ulnit/10-cli-tools-every-developer-should-automate-in-2026-41fe</guid>
      <description>&lt;h1&gt;
  
  
  10 CLI Tools Every Developer Should Automate in 2026
&lt;/h1&gt;

&lt;p&gt;Manual work is the enemy of productivity. Here are 10 CLI tasks you should automate today — with working code examples.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Web Content Fetcher
&lt;/h2&gt;

&lt;p&gt;Stop opening browser tabs just to grab API responses or scrape docs.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;ai-agent-toolkit
web-fetch https://api.github.com/repos/torvalds/linux | json-query .stargazers_count
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  2. JSON Query Tool
&lt;/h2&gt;

&lt;p&gt;No more &lt;code&gt;cat file.json | python -m json.tool | grep&lt;/code&gt; madness.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;json-query &lt;span class="s1"&gt;'.users[] | select(.age &amp;gt; 18) | .name'&lt;/span&gt; data.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  3. File Watcher with Auto-Reload
&lt;/h2&gt;

&lt;p&gt;Automatically run tests or rebuild when files change:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;file-watch &lt;span class="nt"&gt;--dir&lt;/span&gt; ./src &lt;span class="nt"&gt;--pattern&lt;/span&gt; &lt;span class="s2"&gt;"*.py"&lt;/span&gt; &lt;span class="nt"&gt;--cmd&lt;/span&gt; &lt;span class="s2"&gt;"pytest -x"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  4. Cron Expression Generator
&lt;/h2&gt;

&lt;p&gt;How many times have you Googled "cron every 15 minutes"?&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;cron-gen &lt;span class="nt"&gt;--every&lt;/span&gt; 15m
&lt;span class="c"&gt;# Output: */15 * * * *&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  5. Batch Command Runner
&lt;/h2&gt;

&lt;p&gt;Run the same command across multiple directories or servers:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;batch-run &lt;span class="nt"&gt;--targets&lt;/span&gt; server1,server2,server3 &lt;span class="nt"&gt;--cmd&lt;/span&gt; &lt;span class="s2"&gt;"uptime"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  6. Log Parser
&lt;/h2&gt;

&lt;p&gt;Extract errors, warnings, and patterns from messy log files:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;log-parse &lt;span class="nt"&gt;--level&lt;/span&gt; ERROR &lt;span class="nt"&gt;--since&lt;/span&gt; 1h /var/log/app.log
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  7. Port Scanner
&lt;/h2&gt;

&lt;p&gt;Quick network diagnostics without installing nmap:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;port-scan &lt;span class="nt"&gt;--hosts&lt;/span&gt; 192.168.1.0/24 &lt;span class="nt"&gt;--ports&lt;/span&gt; 80,443,22
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  8. HTTP Health Checker
&lt;/h2&gt;

&lt;p&gt;Monitor endpoints and get alerted on downtime:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;http-check &lt;span class="nt"&gt;--url&lt;/span&gt; https://api.example.com/health &lt;span class="nt"&gt;--interval&lt;/span&gt; 30s
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  9. Template Engine
&lt;/h2&gt;

&lt;p&gt;Generate config files from templates:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;tmpl-render &lt;span class="nt"&gt;--template&lt;/span&gt; nginx.conf.tmpl &lt;span class="nt"&gt;--vars&lt;/span&gt; &lt;span class="nb"&gt;env&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;prod,port&lt;span class="o"&gt;=&lt;/span&gt;8080
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  10. Markdown to HTML Converter
&lt;/h2&gt;

&lt;p&gt;Instant docs generation:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;md2html README.md &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; index.html
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;All these tools are available as a single pip install with &lt;strong&gt;zero dependencies&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;ai-agent-toolkit
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;👉 &lt;strong&gt;&lt;a href="https://ulnit.github.io/agent-store" rel="noopener noreferrer"&gt;Get all 15+ CLI tools →&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;What CLI tasks do you automate? Share your tricks in the comments!&lt;/em&gt;&lt;/p&gt;

</description>
      <category>cli</category>
      <category>automation</category>
      <category>productivity</category>
      <category>python</category>
    </item>
    <item>
      <title>I Built a Fully Automated Passive Income Pipeline — Here's the Complete Architecture</title>
      <dc:creator>ULNIT</dc:creator>
      <pubDate>Fri, 29 May 2026 10:18:23 +0000</pubDate>
      <link>https://dev.to/ulnit/i-built-a-fully-automated-passive-income-pipeline-heres-the-complete-architecture-48ia</link>
      <guid>https://dev.to/ulnit/i-built-a-fully-automated-passive-income-pipeline-heres-the-complete-architecture-48ia</guid>
      <description>&lt;h1&gt;
  
  
  I Built a Fully Automated Passive Income Pipeline — Here's the Complete Architecture
&lt;/h1&gt;

&lt;p&gt;For years I thought passive income meant dropshipping or crypto. Turns out, as a developer, you already have everything you need.&lt;/p&gt;

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

&lt;p&gt;Here's the system I built that generates income while I sleep:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;┌─────────────┐     ┌──────────────┐     ┌──────────────┐
│  Dev.to API │────▶│ Daily Article │────▶│  Organic     │
│  (Content)  │     │  Cron Job     │     │  Traffic     │
└─────────────┘     └──────────────┘     └──────┬───────┘
                                                │
┌─────────────┐     ┌──────────────┐            │
│  PyPI       │────▶│  pip install  │────────────┤
│  (Package)  │     │  users        │            │
└─────────────┘     └──────────────┘            │
                                                ▼
                                       ┌──────────────┐
                                       │  Product     │
                                       │  Store       │
                                       │  (GitHub     │
                                       │   Pages)     │
                                       └──────┬───────┘
                                              │
                                    ┌─────────┴─────────┐
                                    ▼                   ▼
                              ┌─────────┐        ┌─────────┐
                              │ Stripe  │        │ PayPal  │
                              │ Payment │        │ Payment │
                              └─────────┘        └─────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Layer 1: Content Engine (Dev.to)
&lt;/h2&gt;

&lt;p&gt;Every day at 9 AM, a cron job writes and publishes a technical article to Dev.to. Each article links back to the product store. This drives consistent organic traffic — completely free.&lt;/p&gt;

&lt;h2&gt;
  
  
  Layer 2: Open Source Distribution (PyPI)
&lt;/h2&gt;

&lt;p&gt;The AI Agent Toolkit is just a &lt;code&gt;pip install&lt;/code&gt; away. Each download exposes users to the paid products. Open source is the best marketing channel for developer tools.&lt;/p&gt;

&lt;h2&gt;
  
  
  Layer 3: Product Store (GitHub Pages)
&lt;/h2&gt;

&lt;p&gt;A lightweight static storefront hosted for free on GitHub Pages. Stripe and PayPal handle all payments. Zero server costs, zero maintenance.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why This Works
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Zero ad spend&lt;/strong&gt;: Content + open source = free distribution forever&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Compounding&lt;/strong&gt;: Each article stays online and keeps attracting readers&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Low maintenance&lt;/strong&gt;: Cron jobs handle everything automatically&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multi-channel&lt;/strong&gt;: If one channel dries up, others keep running&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;👉 &lt;strong&gt;&lt;a href="https://ulnit.github.io/agent-store" rel="noopener noreferrer"&gt;Check out the full product suite →&lt;/a&gt;&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;ai-agent-toolkit
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;What's your passive income stack? I'd love to see other developers' setups in the comments!&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>python</category>
      <category>automation</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>How to Start Bug Bounty Hunting with Zero Experience in 2026</title>
      <dc:creator>ULNIT</dc:creator>
      <pubDate>Fri, 29 May 2026 10:17:38 +0000</pubDate>
      <link>https://dev.to/ulnit/how-to-start-bug-bounty-hunting-with-zero-experience-in-2026-pmn</link>
      <guid>https://dev.to/ulnit/how-to-start-bug-bounty-hunting-with-zero-experience-in-2026-pmn</guid>
      <description>&lt;h1&gt;
  
  
  How to Start Bug Bounty Hunting with Zero Experience in 2026
&lt;/h1&gt;

&lt;p&gt;When I started bug bounty hunting, I was completely lost. Too many tools, too many platforms, no clear path forward.&lt;/p&gt;

&lt;p&gt;After months of trial and error, here's exactly what I'd tell my past self:&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Pick ONE Platform
&lt;/h2&gt;

&lt;p&gt;Don't sign up for everything. Start with HackerOne or Bugcrowd — they have the most beginner-friendly programs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Learn the Basics (Not Everything)
&lt;/h2&gt;

&lt;p&gt;You don't need to be a security expert. Focus on these 3 vulnerability types first:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;IDOR&lt;/strong&gt; (Insecure Direct Object References) — the lowest-hanging fruit&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Information Disclosure&lt;/strong&gt; — exposed API keys, debug endpoints&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;XSS&lt;/strong&gt; — still everywhere in 2026&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Step 3: Automate Recon
&lt;/h2&gt;

&lt;p&gt;Manual recon is a waste of time. Use tools to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Enumerate subdomains&lt;/li&gt;
&lt;li&gt;Discover live services&lt;/li&gt;
&lt;li&gt;Scan for common vulnerabilities&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Step 4: Write Good Reports
&lt;/h2&gt;

&lt;p&gt;A clear, reproducible report is more valuable than finding 10 bugs with bad documentation. Include steps to reproduce, impact, and screenshots.&lt;/p&gt;




&lt;p&gt;I built a &lt;strong&gt;&lt;a href="https://ulnit.github.io/agent-store" rel="noopener noreferrer"&gt;Bug Bounty Automation Kit&lt;/a&gt;&lt;/strong&gt; that handles steps 3-4 automatically. It includes subdomain enumeration, live host detection, and vulnerability scanning — everything you need to start finding bugs today.&lt;/p&gt;

&lt;h2&gt;
  
  
  Reality Check
&lt;/h2&gt;

&lt;p&gt;Your first month: probably nothing. Your second month: maybe a duplicate. Your third month: your first valid bug. That's normal. Keep going.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Start today. The bugs aren't going to find themselves.&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>bugbounty</category>
      <category>security</category>
      <category>beginners</category>
      <category>cybersecurity</category>
    </item>
    <item>
      <title>5 Python Automation Tools That Save Me 10 Hours Every Week</title>
      <dc:creator>ULNIT</dc:creator>
      <pubDate>Fri, 29 May 2026 10:17:36 +0000</pubDate>
      <link>https://dev.to/ulnit/5-python-automation-tools-that-save-me-10-hours-every-week-bkd</link>
      <guid>https://dev.to/ulnit/5-python-automation-tools-that-save-me-10-hours-every-week-bkd</guid>
      <description>&lt;h1&gt;
  
  
  5 Python Automation Tools That Save Me 10 Hours Every Week
&lt;/h1&gt;

&lt;p&gt;I used to waste hours on repetitive tasks every single day. Then I built a collection of Python automation tools that now handle everything automatically.&lt;/p&gt;

&lt;p&gt;Here are the 5 tools that save me the most time:&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Smart File Organizer
&lt;/h2&gt;

&lt;p&gt;Tired of a messy Downloads folder? This tool automatically sorts files by type, date, and project — no more hunting for that PDF you downloaded last week.&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;ai_agent_toolkit&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;FileOrganizer&lt;/span&gt;
&lt;span class="n"&gt;organizer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;FileOrganizer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;watch_dir&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;~/Downloads&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;organizer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sort_by_type&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  2. Automated Email Reports
&lt;/h2&gt;

&lt;p&gt;Don't check dashboards manually. This tool pulls data from APIs, generates charts, and emails a summary every morning.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Web Scraper with Change Detection
&lt;/h2&gt;

&lt;p&gt;Monitor any website for changes — prices, job listings, stock availability. Get notified instantly when something changes.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. CLI Task Scheduler
&lt;/h2&gt;

&lt;p&gt;A dead-simple cron alternative that handles retries, logging, and error notifications out of the box.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Bug Bounty Recon Toolkit
&lt;/h2&gt;

&lt;p&gt;Automate subdomain enumeration, port scanning, and vulnerability detection — the same tools I use in my bug bounty workflow.&lt;/p&gt;




&lt;p&gt;All these tools are open-source and available as a single pip install:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;ai-agent-toolkit
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;👉 &lt;strong&gt;&lt;a href="https://ulnit.github.io/agent-store" rel="noopener noreferrer"&gt;Get the complete toolkit →&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;What repetitive tasks do YOU automate? Drop a comment below!&lt;/em&gt;&lt;/p&gt;

</description>
      <category>python</category>
      <category>automation</category>
      <category>productivity</category>
      <category>tools</category>
    </item>
    <item>
      <title>How I Built an AI Agent That Earns Money — A Complete Architecture Guide</title>
      <dc:creator>ULNIT</dc:creator>
      <pubDate>Fri, 29 May 2026 09:35:40 +0000</pubDate>
      <link>https://dev.to/ulnit/how-i-built-an-ai-agent-that-earns-money-a-complete-architecture-guide-837</link>
      <guid>https://dev.to/ulnit/how-i-built-an-ai-agent-that-earns-money-a-complete-architecture-guide-837</guid>
      <description>&lt;h1&gt;
  
  
  How I Built an AI Agent That Earns Money — A Complete Architecture Guide
&lt;/h1&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%2F8j7kvp660rqzt99zui8e.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%2F8j7kvp660rqzt99zui8e.png" alt="Cover"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I built an AI agent that autonomously finds and executes income-generating tasks. Here's the complete architecture, from a Raspberry Pi to production.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Core Idea
&lt;/h2&gt;

&lt;p&gt;Most AI agents are great at &lt;em&gt;answering&lt;/em&gt; but terrible at &lt;em&gt;earning&lt;/em&gt;. I wanted to change that. The goal: an agent that runs 24/7 on a $35 Raspberry Pi, finding opportunities and executing them without human intervention.&lt;/p&gt;

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



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;┌─────────────────────────────────────┐
│          Hermes Agent Core          │
│  ┌─────────┐  ┌─────────┐          │
│  │ Skills  │  │ Memory  │          │
│  └─────────┘  └─────────┘          │
│  ┌─────────┐  ┌─────────┐          │
│  │  Tools  │  │  Cron   │          │
│  └─────────┘  └─────────┘          │
├─────────────────────────────────────┤
│         Income Pipelines            │
│  📦 PyPI Package → $9-$29/sale     │
│  📝 Dev.to Articles → Traffic      │
│  💳 Stripe Checkout → Payments     │
│  🐛 Bug Bounty → Bounties          │
└─────────────────────────────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Pipeline 1: PyPI Distribution
&lt;/h2&gt;

&lt;p&gt;The agent created a Python package called &lt;code&gt;ai-agent-toolkit&lt;/code&gt; — a collection of CLI tools for AI developers. Zero dependencies, pure Python stdlib.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;ai-agent-toolkit
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Key decisions:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Zero dependencies = zero maintenance burden&lt;/li&gt;
&lt;li&gt;Simple CLI interface = low barrier to entry&lt;/li&gt;
&lt;li&gt;MIT license = maximum adoption&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Pipeline 2: Automated Content Publishing
&lt;/h2&gt;

&lt;p&gt;The agent publishes technical articles to dev.to using the Forem API. Each article is:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Outlined by the agent based on trending topics&lt;/li&gt;
&lt;li&gt;Written with real code examples&lt;/li&gt;
&lt;li&gt;Published with SEO-optimized tags&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Pipeline 3: Payment Infrastructure
&lt;/h2&gt;

&lt;p&gt;Instead of complex payment integrations, the agent uses &lt;strong&gt;Stripe Payment Links&lt;/strong&gt; — no-code checkout pages that handle everything:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;$9&lt;/code&gt; — Bug Bounty Automation Kit&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;$15&lt;/code&gt; — AI Content Generator&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Paired with &lt;code&gt;paypal.me/ulnit&lt;/code&gt; as a backup payment method.&lt;/p&gt;

&lt;h2&gt;
  
  
  Lessons Learned
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Simplicity Wins
&lt;/h3&gt;

&lt;p&gt;Every complex feature I planned was replaced by a simpler alternative during implementation. Stripe Payment Links instead of custom checkout. Dev.to API instead of building a blog. Python stdlib instead of frameworks.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Network Constraints Are Real
&lt;/h3&gt;

&lt;p&gt;Running on a Raspberry Pi behind a restrictive network taught me to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cache aggressively&lt;/li&gt;
&lt;li&gt;Fall back to APIs when browsers are blocked&lt;/li&gt;
&lt;li&gt;Use VPN on-demand, not always-on&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. Automation ≠ Set-and-Forget
&lt;/h3&gt;

&lt;p&gt;The agent needs monitoring. Cron jobs with health checks. Payment webhooks for notifications. The "autonomous" agent still needs guardrails.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;[ ] Medium Partner Program integration&lt;/li&gt;
&lt;li&gt;[ ] Automated social media cross-posting&lt;/li&gt;
&lt;li&gt;[ ] Affiliate marketing pipeline&lt;/li&gt;
&lt;li&gt;[ ] Open-source sponsorship (GitHub Sponsors)&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;Everything is open source:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/ulnit/ai-agent-toolkit" rel="noopener noreferrer"&gt;github.com/ulnit/ai-agent-toolkit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/ulnit/agent-store" rel="noopener noreferrer"&gt;github.com/ulnit/agent-store&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Built with ❤️ on a Raspberry Pi. Follow me on &lt;a href="https://dev.to/ulnit"&gt;dev.to&lt;/a&gt; for more AI agent content.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>python</category>
      <category>automation</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
