<?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: Oleksandr</title>
    <description>The latest articles on DEV Community by Oleksandr (@alexcodebytes).</description>
    <link>https://dev.to/alexcodebytes</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4134414%2F911e1774-b09d-4120-80e9-56cc4a11b28c.png</url>
      <title>DEV Community: Oleksandr</title>
      <link>https://dev.to/alexcodebytes</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/alexcodebytes"/>
    <language>en</language>
    <item>
      <title>Why Most Notion Templates Fail (And How to Actually Use Them)</title>
      <dc:creator>Oleksandr</dc:creator>
      <pubDate>Sun, 01 Nov 2026 15:19:09 +0000</pubDate>
      <link>https://dev.to/alexcodebytes/why-most-notion-templates-fail-and-how-to-actually-use-them-2b0n</link>
      <guid>https://dev.to/alexcodebytes/why-most-notion-templates-fail-and-how-to-actually-use-them-2b0n</guid>
      <description>&lt;p&gt;You downloaded a 47-database dashboard. It looked amazing on Twitter. You spent 20 minutes setting it up. You used it for exactly 3 days.&lt;/p&gt;

&lt;p&gt;Now it sits in your sidebar collecting digital dust.&lt;/p&gt;

&lt;p&gt;As developers, we love optimizing our tools. We build custom CI/CD pipelines, configure Neovim from scratch, and spend hours tweaking our terminal themes. But when it comes to personal productivity, we often fall into the same trap: Over-engineering the system instead of doing the actual work.&lt;/p&gt;

&lt;p&gt;Here is why most Notion templates fail, and how to build a system that actually sticks.&lt;/p&gt;

&lt;p&gt;The Problem: Cognitive Overload&lt;br&gt;
Most templates fail because they are designed to look impressive, not to be used daily.&lt;/p&gt;

&lt;p&gt;They have:&lt;/p&gt;

&lt;p&gt;Too many databases (Tasks, Projects, Areas, Resources, CRM...)&lt;/p&gt;

&lt;p&gt;Too many required properties (Status, Priority, Energy Level, Context...)&lt;/p&gt;

&lt;p&gt;Too much friction.&lt;/p&gt;

&lt;p&gt;When you open Notion and see a dashboard that requires you to fill out 5 different fields just to log a single task, your brain will do everything in its power to avoid opening it.&lt;/p&gt;

&lt;p&gt;For developers (and especially for those of us with ADHD), friction is the enemy of consistency.&lt;/p&gt;

&lt;p&gt;The Solution: The "3-Task" Rule&lt;br&gt;
To fix this, we need to strip the system down to its bare minimum.&lt;/p&gt;

&lt;p&gt;Instead of a massive "Life OS" with 50 interconnected databases, start with a single, flat database.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Limit your daily focus
Your daily dashboard should only show you 3 tasks. Not 30. Not 10. Three.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Why 3? Because it forces you to prioritize. If you finish them early, you can pull from a "Backlog" or "Next" list. But waking up to a list of 40 tasks is a guaranteed recipe for decision paralysis.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Remove the properties
Delete the "Energy Level" and "Context" fields. Keep only:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Task Name (Title)&lt;/p&gt;

&lt;p&gt;Status (To Do, In Progress, Done)&lt;/p&gt;

&lt;p&gt;Date (Optional, only if it has a hard deadline)&lt;/p&gt;

&lt;p&gt;That’s it. If you need to add notes, put them in the page body, not in a new database property.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Automate the reset
One of the biggest reasons people stop using a system is that it gets cluttered. You need a way to archive completed tasks automatically. In Notion, you can use a simple filter: Status is not Done for your daily view. The moment a task is checked off, it disappears.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;How to make it stick&lt;br&gt;
The perfect productivity system is the one you actually use. It doesn't need to look good on a screenshot; it needs to be fast.&lt;/p&gt;

&lt;p&gt;If you are a developer, treat your Notion setup like a microservice. It should be:&lt;/p&gt;

&lt;p&gt;Stateless: You can delete it and start over without losing your mind.&lt;/p&gt;

&lt;p&gt;Decoupled: Your daily tasks shouldn't depend on your quarterly goals database being perfectly updated.&lt;/p&gt;

&lt;p&gt;Fast: Opening your dashboard should take 0 mental effort.&lt;/p&gt;

&lt;p&gt;What's next?&lt;br&gt;
I recently wrote a deep dive on how to set up a minimalist Notion workspace that actually gets used, especially if you struggle with ADHD or burnout.&lt;/p&gt;

&lt;p&gt;👉 Read the full guide on our blog: Why Most Notion Templates Fail&lt;/p&gt;

&lt;p&gt;If you want a head start, we built a Minimalist ADHD Daily Planner that uses the 3-task rule. No fluff, no 47-databases. Just a clean, distraction-free interface to help you ship your tasks.&lt;/p&gt;

&lt;p&gt;👉 Check out the ADHD Daily Planner here&lt;/p&gt;

&lt;p&gt;What does your Notion setup look like? Do you prefer complex systems or minimalist lists? Let me know in the comments! 👇&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>productivity</category>
      <category>notionchallenge</category>
      <category>career</category>
    </item>
    <item>
      <title>How I Generated a 500-Page Localized Site Using Only PowerShell</title>
      <dc:creator>Oleksandr</dc:creator>
      <pubDate>Wed, 28 Oct 2026 17:52:34 +0000</pubDate>
      <link>https://dev.to/alexcodebytes/how-i-generated-a-500-page-localized-site-using-only-powershell-4a29</link>
      <guid>https://dev.to/alexcodebytes/how-i-generated-a-500-page-localized-site-using-only-powershell-4a29</guid>
      <description>&lt;p&gt;As developers, we have a bad habit of over-engineering everything. &lt;/p&gt;

&lt;p&gt;When I decided to build &lt;a href="https://landings.jsonexlab.com/" rel="noopener noreferrer"&gt;jsonexlab.com&lt;/a&gt; to sell my focused Notion templates, my first instinct was to spin up a Next.js app. I thought: &lt;em&gt;"I'll need a database for the products, i18n for the languages, and a CMS for the blog."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;But then I looked at the requirements. I wasn't building a complex SaaS with user authentication. I was building a static catalog of digital products. &lt;/p&gt;

&lt;p&gt;So, I did something crazy. I deleted the Node.js setup, opened PowerShell, and wrote a script to generate raw HTML. Here is how I did it, and why it works.&lt;/p&gt;

&lt;h3&gt;
  
  
  The "No Framework" Stack
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Hosting:&lt;/strong&gt; Cloudflare Pages (Free tier, unlimited bandwidth).&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Generation:&lt;/strong&gt; PowerShell scripts.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Styles:&lt;/strong&gt; Plain CSS.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Payments:&lt;/strong&gt; Suby (Crypto).&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Email:&lt;/strong&gt; Web3Forms + Make.com + Brevo.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The result? A site with &lt;strong&gt;500+ pages in 28 languages&lt;/strong&gt;, zero hydration errors, zero JS bundles, and load times measured in milliseconds.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Challenge: Translating 28 Languages
&lt;/h3&gt;

&lt;p&gt;I wanted to sell my templates in Europe, Asia, and South America. That meant 28 different languages. &lt;/p&gt;

&lt;p&gt;Doing this manually in React would have been a nightmare of JSON translation files. Instead, I wrote a PowerShell script that took my base English HTML file and applied a dictionary of translations to it.&lt;/p&gt;

&lt;p&gt;Here is a simplified version of how the localization script works:&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
powershell
$translations = @{
    "es" = @{
        "You might also like" = "También te puede gustar";
        "Get PDF" = "Obtener PDF";
    }
    "de" = @{
        "You might also like" = "Das könnte dir auch gefallen";
        "Get PDF" = "PDF erhalten";
    }
}

foreach ($lang in $translations.Keys) {
    $html = [System.IO.File]::ReadAllText("base-template.html")

    foreach ($key in $translations[$lang].Keys) {
        $html = $html -replace [regex]::Escape($key), $translations[$lang][$key]
    }

    # Save to /es/index.html, /de/index.html, etc.
    [System.IO.File]::WriteAllText("$lang/index.html", $html)
}
To make Google happy, I also had to inject proper hreflang tags for all 28 languages into every single page. A simple loop handled that too.

The Real Challenge: Keeping Track of 30 Products
While the technical generation was fast, the business side was a mess. I had 30 different products: Debt Simulators, Freelancer Invoices, ADHD Planners.

I was losing my mind trying to remember which product was linked to which blog post, or which language version needed updating.

I realized I was trying to build a system for my system. So, I built a simple Notion dashboard (ironically, using the same "anti-bloat" philosophy I sell).
I tracked:

Product Status: (Draft, Finished, Live)

The Link Tree: (Which blog post links to which product)

The Tech Checklist: (Does it have an OG image? Is it in the sitemap?)

The Results
Speed: Because it's just static HTML, Cloudflare serves it instantly. No React hydration, no API calls, no database queries.

Cost: $0/month.

SEO: Because I control the raw HTML, I could perfectly inject JSON-LD schema (Product, BreadcrumbList, BlogPosting) without fighting a framework.

When Should You Do This?
If you are building a complex app with user accounts and real-time data, do not use PowerShell. Use Next.js, Remix, or whatever makes you happy.

But if you are building a content site, a landing page, or a digital product catalog, try going back to basics. Write a script that generates raw HTML. You might be surprised at how fast and simple it is.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
      <category>webdev</category>
      <category>showdev</category>
      <category>productivity</category>
      <category>powershell</category>
    </item>
    <item>
      <title>How I Generated a 500-Page Localized Site Using Only PowerShell</title>
      <dc:creator>Oleksandr</dc:creator>
      <pubDate>Wed, 28 Oct 2026 06:47:42 +0000</pubDate>
      <link>https://dev.to/alexcodebytes/how-i-generated-a-500-page-localized-site-using-only-powershell-2n5d</link>
      <guid>https://dev.to/alexcodebytes/how-i-generated-a-500-page-localized-site-using-only-powershell-2n5d</guid>
      <description>&lt;p&gt;As developers, we have a bad habit of over-engineering everything. &lt;/p&gt;

&lt;p&gt;When I decided to build &lt;a href="https://landings.jsonexlab.com/" rel="noopener noreferrer"&gt;jsonexlab.com&lt;/a&gt; to sell my focused Notion templates, my first instinct was to spin up a Next.js app. I thought: &lt;em&gt;"I'll need a database for the products, i18n for the languages, and a CMS for the blog."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;But then I looked at the requirements. I wasn't building a complex SaaS with user authentication. I was building a static catalog of digital products. &lt;/p&gt;

&lt;p&gt;So, I did something crazy. I deleted the Node.js setup, opened PowerShell, and wrote a script to generate raw HTML. Here is how I did it, and why it works.&lt;/p&gt;

&lt;h3&gt;
  
  
  The "No Framework" Stack
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Hosting:&lt;/strong&gt; Cloudflare Pages (Free tier, unlimited bandwidth).&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Generation:&lt;/strong&gt; PowerShell scripts.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Styles:&lt;/strong&gt; Plain CSS.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Payments:&lt;/strong&gt; Suby (Crypto).&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Email:&lt;/strong&gt; Web3Forms + Make.com + Brevo.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The result? A site with &lt;strong&gt;500+ pages in 28 languages&lt;/strong&gt;, zero hydration errors, zero JS bundles, and load times measured in milliseconds.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Challenge: Translating 28 Languages
&lt;/h3&gt;

&lt;p&gt;I wanted to sell my templates in Europe, Asia, and South America. That meant 28 different languages. &lt;/p&gt;

&lt;p&gt;Doing this manually in React would have been a nightmare of JSON translation files. Instead, I wrote a PowerShell script that took my base English HTML file and applied a dictionary of translations to it.&lt;/p&gt;

&lt;p&gt;Here is a simplified version of how the localization script works:&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
powershell
$translations = @{
    "es" = @{
        "You might also like" = "También te puede gustar";
        "Get PDF" = "Obtener PDF";
    }
    "de" = @{
        "You might also like" = "Das könnte dir auch gefallen";
        "Get PDF" = "PDF erhalten";
    }
}

foreach ($lang in $translations.Keys) {
    $html = [System.IO.File]::ReadAllText("base-template.html")

    foreach ($key in $translations[$lang].Keys) {
        $html = $html -replace [regex]::Escape($key), $translations[$lang][$key]
    }

    # Save to /es/index.html, /de/index.html, etc.
    [System.IO.File]::WriteAllText("$lang/index.html", $html)
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
      <category>webdev</category>
      <category>showdev</category>
      <category>productivity</category>
      <category>powershell</category>
    </item>
    <item>
      <title>Stop Building Massive 'Second Brain' Dashboards. Here’s the Anti-Bloat Approach.</title>
      <dc:creator>Oleksandr</dc:creator>
      <pubDate>Tue, 27 Oct 2026 13:57:05 +0000</pubDate>
      <link>https://dev.to/alexcodebytes/stop-building-massive-second-brain-dashboards-heres-the-anti-bloat-approach-5d0k</link>
      <guid>https://dev.to/alexcodebytes/stop-building-massive-second-brain-dashboards-heres-the-anti-bloat-approach-5d0k</guid>
      <description>&lt;p&gt;Let me guess what happened with your last Notion setup.&lt;/p&gt;

&lt;p&gt;You watched a video about "the ultimate second brain." You downloaded a template with 47 databases, 12 relations, and a dashboard that looked like a NASA control panel. You were excited for two days. By day four, you had 300 unread items, you were anxious every time you opened it, and you quietly archived the whole thing.&lt;/p&gt;

&lt;p&gt;As developers, we love over-engineering. We love building complex systems. But when it comes to managing our own lives, freelancing, or tracking our finances, complexity is the enemy.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Problem with "Ultimate" Templates
&lt;/h3&gt;

&lt;p&gt;Most productivity templates are built for the sake of the template, not the user. They give you more:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  More databases ("so you can track everything")&lt;/li&gt;
&lt;li&gt;  More views ("switch between kanban, calendar, timeline, table")&lt;/li&gt;
&lt;li&gt;  More customization&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But more is the opposite of what a busy brain needs. What it needs is &lt;strong&gt;less, but clearer&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  The "Anti-Second Brain" Approach
&lt;/h3&gt;

&lt;p&gt;I got so tired of this that I built my own collection of templates. I did the opposite of what the "Notion gurus" do.&lt;/p&gt;

&lt;p&gt;I built 30 tiny, focused systems. Each one solves exactly &lt;em&gt;one&lt;/em&gt; problem. No bloat. No 47 databases.&lt;/p&gt;

&lt;p&gt;Here are the three rules I follow:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;One problem per template.&lt;/strong&gt; If it's an invoice system, it doesn't have a habit tracker attached. When you open it, you know exactly what to do.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;It must fit on one screen.&lt;/strong&gt; If you have to scroll to find the main view, the design has failed.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;A clean "done" moment.&lt;/strong&gt; When you finish using it, you should know you're done. Close the tab.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  For Example: The Freelancer's Invoice System
&lt;/h3&gt;

&lt;p&gt;Instead of an "Ultimate Life OS", I built a &lt;strong&gt;Client &amp;amp; Invoice System&lt;/strong&gt;. It tracks clients, projects, and overdue invoices. Nothing else.&lt;/p&gt;

&lt;p&gt;Every freelancer has the same problem: a client owes you $1,200 for work you finished two weeks ago, and you keep forgetting to send the follow-up email. &lt;/p&gt;

&lt;p&gt;A focused system fixes this in one place. It replaces Bonsai or FreshBooks, and it saves 2–3 hours a week.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;(If you're curious, you can see the exact system I use here: &lt;a href="https://landings.jsonexlab.com/" rel="noopener noreferrer"&gt;jsonexlab.com&lt;/a&gt;.)&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  The Tech Stack Behind the Site (Build in Public)
&lt;/h3&gt;

&lt;p&gt;Since this is Dev.to, I want to share how I actually shipped this. I didn't use Next.js or React. I wanted raw speed.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Hosting:&lt;/strong&gt; Cloudflare Pages (free tier).&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Generation:&lt;/strong&gt; The entire site (500+ pages across 28 languages) is generated using &lt;strong&gt;PowerShell scripts&lt;/strong&gt;. Yes, raw HTML/CSS generation.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Localization:&lt;/strong&gt; Automated &lt;code&gt;hreflang&lt;/code&gt; injection and content translation using dictionary maps in scripts.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Payments:&lt;/strong&gt; Currently using Suby (crypto). Working on getting fiat approval.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Automation:&lt;/strong&gt; Webhooks -&amp;gt; Make.com -&amp;gt; Brevo for email delivery.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It's a monolith of static HTML files, and it loads in milliseconds. No build step, no hydration errors, just raw HTML. It's ugly and beautiful at the same time.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Bottom Line
&lt;/h3&gt;

&lt;p&gt;If you're a developer, stop trying to build a "second brain" with 47 databases. Build a few simple walls to keep yourself focused. Your future self will thank you.&lt;/p&gt;

&lt;p&gt;Have you ever abandoned a complex Notion setup? What was the breaking point?&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>webdev</category>
      <category>showdev</category>
      <category>notion</category>
    </item>
    <item>
      <title>The ADHD-Friendly Notion Setup That Actually Works</title>
      <dc:creator>Oleksandr</dc:creator>
      <pubDate>Mon, 26 Oct 2026 17:30:26 +0000</pubDate>
      <link>https://dev.to/alexcodebytes/the-adhd-friendly-notion-setup-that-actually-works-4a36</link>
      <guid>https://dev.to/alexcodebytes/the-adhd-friendly-notion-setup-that-actually-works-4a36</guid>
      <description>&lt;p&gt;Let me guess what happened with your last Notion setup.&lt;/p&gt;

&lt;p&gt;You watched a YouTube video about "the ultimate second brain." You downloaded a template with 47 databases, 12 relations, and a dashboard that looked like a NASA control panel. You were excited for two days. By day four, you had 300 unread items, you were anxious every time you opened it, and you quietly archived the whole thing.&lt;/p&gt;

&lt;p&gt;If you have ADHD, this story is not an exception. It's the rule. And the problem is not you. The problem is the template.&lt;/p&gt;

&lt;p&gt;Why most Notion templates fail ADHD brains&lt;/p&gt;

&lt;p&gt;Notion is a blank canvas. ADHD brains hate a blank canvas. They need walls — clear boundaries, clear next steps, clear "you're done."&lt;/p&gt;

&lt;p&gt;Most templates give you more: more databases, more views, more customization. More is the opposite of what an ADHD brain needs. What it needs is less, but clearer.&lt;/p&gt;

&lt;p&gt;The 3-task rule&lt;/p&gt;

&lt;p&gt;Every morning, you open Notion and you see exactly 3 tasks. Not 10. Not "all tasks due today." Three.&lt;/p&gt;

&lt;p&gt;Why three?&lt;/p&gt;

&lt;p&gt;It's achievable. You can finish 3 tasks in a day, even on a bad day. That means you win the day. Winning compounds.&lt;/p&gt;

&lt;p&gt;It kills decision paralysis. You don't have to choose what to do. The system chose for you last night.&lt;/p&gt;

&lt;p&gt;It creates a clean "done" moment. When the 3 are checked, you're done. Not "done for now." Done. That's a rare thing for ADHD brains.&lt;/p&gt;

&lt;p&gt;How to set it up (10 minutes, not 10 hours)&lt;/p&gt;

&lt;p&gt;Step 1 — One database, three fields. Create a Notion database called "Daily." Fields: Task, Date, Done. That's it. No tags, no priority, no "energy level." Every extra field is a decision you'll be forced to make 20 times a day.&lt;/p&gt;

&lt;p&gt;Step 2 — One view, filtered to today. Filter: Date is Today AND Done is unchecked. This is the view you open every morning.&lt;/p&gt;

&lt;p&gt;Step 3 — The night-before ritual. Before you close your laptop, add three tasks for tomorrow. Then close it. Don't add tasks during the day. If something urgent comes up, put it in a separate "Later" page.&lt;/p&gt;

&lt;p&gt;What about the 100 other things you're tracking?&lt;/p&gt;

&lt;p&gt;You don't track them. You park them. Have a "Later" page (one page, not a database). Whenever a thought pops up, write one line and move on. Once a week, scan and promote or delete.&lt;/p&gt;

&lt;p&gt;The shutdown ritual&lt;/p&gt;

&lt;p&gt;At end of each day: check off completed tasks, move incomplete ones to tomorrow, close the laptop. This is not productivity theater. This is the difference between a brain that stays "on" all night and a brain that can rest.&lt;/p&gt;

&lt;p&gt;The one thing that kills these systems&lt;/p&gt;

&lt;p&gt;It's not forgetting. It's rebuilding. At some point you'll think "I should add a project tracker." That's the moment it dies. If you need to track a project, use a separate page. Don't add it to the daily view.&lt;/p&gt;

&lt;p&gt;If you're a Notion power user, this feels wrong. If you have ADHD, it feels like relief. That's the point.&lt;/p&gt;

</description>
      <category>notionchallenge</category>
      <category>productivity</category>
      <category>mentalh</category>
    </item>
    <item>
      <title>How Cloudflare D1's Daily Write Limit Almost Broke My Sanctions App (and How I Fixed It)</title>
      <dc:creator>Oleksandr</dc:creator>
      <pubDate>Mon, 26 Oct 2026 12:48:32 +0000</pubDate>
      <link>https://dev.to/alexcodebytes/how-cloudflare-d1s-daily-write-limit-almost-broke-my-sanctions-app-and-how-i-fixed-it-4b06</link>
      <guid>https://dev.to/alexcodebytes/how-cloudflare-d1s-daily-write-limit-almost-broke-my-sanctions-app-and-how-i-fixed-it-4b06</guid>
      <description>&lt;p&gt;I built a compliance engine that checks names against global sanctions lists (OFAC, UK, EU, UN). It runs entirely on Cloudflare Workers and D1. It’s fast, cheap, and mostly runs itself.&lt;/p&gt;

&lt;p&gt;Until I woke up to a completely dead ingestion pipeline.&lt;/p&gt;

&lt;p&gt;Here is the exact error that greeted me in my GitHub Actions logs:&lt;/p&gt;

&lt;p&gt;{&lt;br&gt;
  "success": false,&lt;br&gt;
  "errors": [{&lt;br&gt;
    "code": 7500,&lt;br&gt;
    "message": "Your account has exceeded D1's free tier daily row write limit. Upgrade to a paid plan or wait until tomorrow (midnight UTC) to continue."&lt;br&gt;
  }]&lt;br&gt;
}&lt;br&gt;
My first thought was a bug in my code. But the truth is simpler: D1's free tier allows 100,000 row writes per day, and my ingestion scripts ate through them before lunch.&lt;/p&gt;

&lt;p&gt;Here is what happened, why it’s a common trap, and the architecture changes I made to fix it.&lt;/p&gt;

&lt;p&gt;The Trap of "Just Upsert Everything"&lt;br&gt;
My initial ingestion logic was naive. I used a standard INSERT ... ON CONFLICT DO UPDATE (upsert) to sync records from the UN, OFAC, and GLEIF lists into my D1 database.&lt;/p&gt;

&lt;p&gt;I thought: "If the record hasn't changed, it won't cost me anything."&lt;/p&gt;

&lt;p&gt;That's true for standard Postgres, but D1 charges you for the INSERT attempt, even if the ON CONFLICT clause ends up doing nothing.&lt;/p&gt;

&lt;p&gt;When I pulled the UN consolidated list (about 2,000 records) and the GLEIF database (tens of thousands of entities), my script tried to upsert everything at once.&lt;/p&gt;

&lt;p&gt;33,000+ sanctions records&lt;/p&gt;

&lt;p&gt;Plus daily cron jobs for OFAC, PEP, and UK lists&lt;/p&gt;

&lt;p&gt;Plus API search logs&lt;/p&gt;

&lt;p&gt;Very quickly, I hit the 100,000 writes/day ceiling. D1 locked my database in read-only mode.&lt;/p&gt;

&lt;p&gt;How to Fix It (The 3-Layer Approach)&lt;br&gt;
To survive on the free tier, you have to treat D1 writes like gold. Here is how I refactored my ingestion pipeline.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;The WHERE Clause is Your Best Friend&lt;br&gt;
If you are doing an upsert, you should only actually write to the row if the data has changed. You can add a WHERE clause to your DO UPDATE statement.&lt;br&gt;
INSERT INTO sanctions (&lt;br&gt;
list_code, entity_id, name, name_normalized, programs&lt;br&gt;
) VALUES (?, ?, ?, ?, ?)&lt;br&gt;
ON CONFLICT(list_code, entity_id) DO UPDATE SET&lt;br&gt;
name = excluded.name,&lt;br&gt;
programs = excluded.programs&lt;br&gt;
WHERE&lt;br&gt;
sanctions.name != excluded.name OR&lt;br&gt;
IFNULL(sanctions.programs, '') != IFNULL(excluded.programs, '');&lt;br&gt;
By adding this WHERE clause, D1 skips the write if the row is identical. This alone saved me thousands of writes on daily runs where only 1% of the data actually changed.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Chunking and MAX_PAGES_PER_RUN&lt;br&gt;
My second mistake was trying to ingest the whole world in one run. GitHub Actions have a 6-hour limit, but your D1 quota doesn't care about your workflow time; it cares about rows.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If you have a massive dataset (like GLEIF), you need an incremental cap. I added an environment variable to my workflow:&lt;br&gt;
env:&lt;br&gt;
  MAX_PAGES_PER_RUN: '20' # Never ingest more than 20 pages in a single run&lt;br&gt;
Then, in the script, I break the loop once the limit is reached, saving the offset for the next run. It’s slower to backfill, but it guarantees your database won't go offline.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Separate the "Read" and "Write" Phases
Originally, I fetched data from the API and wrote it to D1 in the same loop. If the API rate-limited me halfway through, I’d have a half-written database.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Now, I use a two-step pipeline:&lt;/p&gt;

&lt;p&gt;Fetch Phase: Download the raw XML/CSV to Cloudflare R2 (Object Storage). R2 has a very generous free tier (10GB/month).&lt;/p&gt;

&lt;p&gt;Parse &amp;amp; Ingest Phase: Read the file from R2, parse it, and batch-write to D1.&lt;/p&gt;

&lt;p&gt;This decoupling means if D1 hits a quota limit, the fetch phase still succeeds. Tomorrow, I can just run the parse phase against the data sitting in R2 without re-downloading it.&lt;/p&gt;

&lt;p&gt;What If You Hit the Limit Today?&lt;br&gt;
If you are already locked out, there is no magic bypass. You have to wait until 00:00 UTC.&lt;/p&gt;

&lt;p&gt;But you can prepare. Here is the exact check I run in my terminal before triggering a heavy job:&lt;br&gt;
npx wrangler d1 execute compliance-db --remote --command="SELECT COUNT(*) FROM sanctions"&lt;br&gt;
If it's read-only, the command will fail with code 7500 or code 7403. Don't panic—it's just Cloudflare telling you to take a break.&lt;/p&gt;

&lt;p&gt;Final Thoughts&lt;br&gt;
Cloudflare D1 is incredible for read-heavy edge applications. It’s practically free and sits right next to your Workers. But it’s not a Postgres replacement for heavy ingestion pipelines.&lt;/p&gt;

&lt;p&gt;If you are building a scraper or an ETL pipeline on D1, idempotent upserts and strict batch sizes are not optional. They are the difference between a running app and a dead one.&lt;/p&gt;

&lt;p&gt;(If you're building compliance or data tools on Cloudflare and want to compare notes on D1 limits, feel free to drop a comment or reach out.)&lt;/p&gt;

</description>
      <category>cloudflarechallenge</category>
      <category>d1</category>
      <category>serverless</category>
      <category>database</category>
    </item>
    <item>
      <title>10-MCP-Server Ecosystem in 3 Weeks</title>
      <dc:creator>Oleksandr</dc:creator>
      <pubDate>Mon, 26 Oct 2026 09:27:20 +0000</pubDate>
      <link>https://dev.to/alexcodebytes/10-mcp-server-ecosystem-in-3-weeks-25o3</link>
      <guid>https://dev.to/alexcodebytes/10-mcp-server-ecosystem-in-3-weeks-25o3</guid>
      <description>&lt;p&gt;AI agents are the new frontier, and the Model Context Protocol (MCP) is quickly becoming the standard for how they interact with the real world. &lt;/p&gt;

&lt;p&gt;Over the last three weeks, I’ve been building &lt;strong&gt;JSONexLab&lt;/strong&gt; — a suite of API tools and MCP servers for developers and AI agents. The idea was simple: build highly specific, fast, and reliable data pipelines (like HS codes classification, document parsing, and sanctions screening) and sell them via a pay-per-call model using x402 (USDC).&lt;/p&gt;

&lt;p&gt;I’m writing this as a "build in public" post because I see a lot of tutorials on &lt;em&gt;how to build&lt;/em&gt; an MCP server, but almost nothing on &lt;strong&gt;what happens when you try to take it to production&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;Here are the real numbers, the architecture, and the things that broke.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Hosting:&lt;/strong&gt; Cloudflare Workers &amp;amp; Pages (for edge performance).&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Database:&lt;/strong&gt; Cloudflare D1 (SQLite at the edge).&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Backend:&lt;/strong&gt; Node.js (v22).&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;AI:&lt;/strong&gt; GPT-4o-mini for classification and data extraction.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Payments:&lt;/strong&gt; x402 (USDC on Base), Suby (crypto), and currently verifying with AgentaOS (fiat).&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🏆 What Works (The Wins)
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;1,018 SEO Pages Generated:&lt;/strong&gt; I built a custom static site generator that created 1,000+ landing pages (programmatic SEO) for specific HS codes and validators. It takes 12 minutes to build but generates massive organic surface area.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;The MCP Servers:&lt;/strong&gt; We have 10 active MCP servers (Document-to-JSON, HS Codes, Currency Exchange, etc.). They are lightweight, respond in milliseconds, and can be hooked directly into Claude Desktop or Cursor.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;The Traffic:&lt;/strong&gt; We are seeing ~300 MCP calls per day for the document-to-JSON server. Developers are actively using the free tier.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Dark Mode:&lt;/strong&gt; I finally moved away from the standard "white SaaS" look. A dark, high-contrast UI (like Supabase or Vercel) instantly made the product look 10x more premium.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  💥 What Broke (The Ugly Truth)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. The Cloudflare D1 Daily Row Write Limit
&lt;/h3&gt;

&lt;p&gt;Cloudflare D1 has a free tier limit of &lt;strong&gt;100,000 row writes per day&lt;/strong&gt;. In my naivety, I set up a GitHub Action to ingest the UN Sanctions list (956 records) and the GLEIF entity database (20,000+ records). &lt;br&gt;
Within hours, the database completely locked up. The API was returning &lt;code&gt;D1 API error 400: code 7500: Your account has exceeded D1's free tier daily row write limit&lt;/code&gt;. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The fix:&lt;/strong&gt; I had to write a custom script to batch the writes, limit the GLEIF sync to just 20 pages (4,000 records) per run, and gracefully handle the quota exhaustion so the script doesn't crash. &lt;/p&gt;

&lt;h3&gt;
  
  
  2. The PowerShell UTF-8 Encoding Nightmare
&lt;/h3&gt;

&lt;p&gt;When building a static site on a Windows machine, PowerShell is your worst enemy. Every time I injected a Python or JS script containing emojis (⚡, 🌍, 💳), PowerShell (or Notepad) saved the file in Windows-1251 (ANSI) encoding. The browser would read the UTF-8 file and display these horrid characters: &lt;code&gt;ВљЎ&lt;/code&gt;, &lt;code&gt;рџЊЌ&lt;/code&gt;.&lt;br&gt;
&lt;strong&gt;The fix:&lt;/strong&gt; I had to write a Node.js script using raw Unicode escape sequences (like &lt;code&gt;\u26A1&lt;/code&gt;) to forcefully overwrite the file in UTF-8 without BOM (Byte Order Mark).&lt;/p&gt;

&lt;h3&gt;
  
  
  3. The "CNAME Cross-User Banned" DNS Error
&lt;/h3&gt;

&lt;p&gt;When pointing my custom domain to Cloudflare Pages, I hit Error 1014. It turned out that a stale CNAME record was pointing to a different Cloudflare account, and the zone was locked. After hours of deleting and recreating DNS records, I had to flush the local Windows DNS cache (&lt;code&gt;ipconfig /flushdns&lt;/code&gt; run as Administrator) just to see the changes.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Payment Gateways for a Ukrainian Founder
&lt;/h3&gt;

&lt;p&gt;This is the biggest bottleneck. I wanted to monetize using Gumroad, but they &lt;strong&gt;do not support payouts to Ukraine&lt;/strong&gt;. Polar also blocked Ukrainian accounts. I had to pivot to AgentaOS (which specializes in Ukrainian payouts) and Paddle (which is notoriously strict with merchant verification). &lt;/p&gt;

&lt;p&gt;&lt;em&gt;Note: If you are selling a service that even remotely touches compliance, you have to strip the word "License verification" from your pricing page, or Paddle will put your account on hold until you prove you are a licensed broker.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Reality Check: $0 Revenue
&lt;/h2&gt;

&lt;p&gt;Despite ~300 daily API calls and a fully functional site, I have made &lt;strong&gt;$0 in revenue&lt;/strong&gt;. Why? &lt;br&gt;
Because developers use the free tier (50 calls per day), and setting up crypto payments (USDC on Base) is still a massive friction point for mainstream users. The fiat gateway (credit cards) is currently blocked by merchant verification. &lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;  Waiting for AgentaOS/Paddle to approve the fiat payment gateway.&lt;/li&gt;
&lt;li&gt;  Expanding the x402 native payments (so AI agents can literally pay for their own API calls).&lt;/li&gt;
&lt;li&gt;  Continuing to build new MCP servers. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Building an AI-native API business is a marathon, not a sprint. If you are building in the MCP space right now, my advice is: &lt;strong&gt;don't underestimate the infrastructure quotas&lt;/strong&gt;, and &lt;strong&gt;figure out your payment rails before you launch&lt;/strong&gt;.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;If you want to check out the tools or test the MCP servers, you can find them at &lt;a href="https://jsonexlab.com" rel="noopener noreferrer"&gt;jsonexlab.com&lt;/a&gt;. I'd love to hear your feedback on the architecture!&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>cloudflarechallenge</category>
      <category>buildinpublic</category>
    </item>
    <item>
      <title>Debt Snowball vs Avalanche: Which Method is Actually Faster?</title>
      <dc:creator>Oleksandr</dc:creator>
      <pubDate>Sun, 25 Oct 2026 10:21:27 +0000</pubDate>
      <link>https://dev.to/alexcodebytes/debt-snowball-vs-avalanche-which-method-is-actually-faster-9mc</link>
      <guid>https://dev.to/alexcodebytes/debt-snowball-vs-avalanche-which-method-is-actually-faster-9mc</guid>
      <description>&lt;p&gt;If you're trying to get out of debt, you've probably heard of two main strategies: the &lt;strong&gt;Debt Snowball&lt;/strong&gt; and the &lt;strong&gt;Debt Avalanche&lt;/strong&gt;. Both work, but they use completely different psychology and math.&lt;/p&gt;

&lt;p&gt;Here is a quick breakdown of how they work.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. The Debt Snowball Method
&lt;/h2&gt;

&lt;p&gt;With the Snowball method, you list your debts from &lt;strong&gt;smallest balance to largest&lt;/strong&gt;. You pay the minimum on everything, and throw all your extra money at the smallest debt.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Pros:&lt;/strong&gt; Quick psychological wins. You see accounts close fast, which keeps you motivated.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Cons:&lt;/strong&gt; You might pay more in interest if your smallest debt has a high interest rate.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  2. The Debt Avalanche Method
&lt;/h2&gt;

&lt;p&gt;With the Avalanche method, you list your debts from &lt;strong&gt;highest interest rate to lowest&lt;/strong&gt;. You pay the minimum on everything, and throw all your extra money at the highest-interest debt.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Pros:&lt;/strong&gt; Mathematically, this saves you the most money on interest. You pay less overall.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Cons:&lt;/strong&gt; It can take longer to close your first account, which can be demotivating.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Which one should you choose?
&lt;/h2&gt;

&lt;p&gt;If you have a lot of small debts and need motivation, go with the &lt;strong&gt;Snowball&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;If your highest-interest debt is massive (like a credit card at 25%), and you want to save money, go with the &lt;strong&gt;Avalanche&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Calculate your exact Debt-Free Date
&lt;/h2&gt;

&lt;p&gt;Want to see exactly when you'll be debt-free? I built a free, interactive calculator. No signup, no email required.&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;&lt;a href="https://landings.jsonexlab.com/tools/debt-calculator/" rel="noopener noreferrer"&gt;Try the Free Debt Payoff Calculator&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;(Or, if you want the full system to track every payment in Notion, check out the &lt;a href="https://landings.jsonexlab.com/b-en/" rel="noopener noreferrer"&gt;Debt-Free Date Simulator&lt;/a&gt; for $24.)&lt;/em&gt;&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>fintech</category>
      <category>notionchallenge</category>
      <category>mon</category>
    </item>
    <item>
      <title>The "works on my machine" problem is now "works in my context window"</title>
      <dc:creator>Oleksandr</dc:creator>
      <pubDate>Thu, 22 Oct 2026 14:29:03 +0000</pubDate>
      <link>https://dev.to/alexcodebytes/the-works-on-my-machine-problem-is-now-works-in-my-context-window-4k2b</link>
      <guid>https://dev.to/alexcodebytes/the-works-on-my-machine-problem-is-now-works-in-my-context-window-4k2b</guid>
      <description>&lt;p&gt;I've been building AI agents for a while, and I keep hitting the same wall.&lt;/p&gt;

&lt;p&gt;It's not the model hallucinating. It's not the API being slow. It's that the agent works perfectly in my test environment, with my 20-message context, and then fails in production with a 200-message context, a different tool chain, and a user who asks something I didn't anticipate.&lt;/p&gt;

&lt;p&gt;The failure modes are different from traditional software:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The agent doesn't crash. It just makes a slightly worse decision.&lt;/li&gt;
&lt;li&gt;The tests pass. The context window just got too big.&lt;/li&gt;
&lt;li&gt;The demo works. The real user asks a question that's 5% different, and the whole chain breaks.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I wrote about this before ("retry loops are expensive"), but I'm curious about the broader problem. How do you test an agent for the "messy context" it'll see in production, without shipping it to production first?&lt;/p&gt;

&lt;p&gt;What does your test suite look like for agents? Do you have a "context window full of noise" test, or is it still mostly happy-path?&lt;/p&gt;

</description>
      <category>ai</category>
      <category>testing</category>
      <category>discuss</category>
      <category>agents</category>
    </item>
    <item>
      <title>How to connect a Currency API to your AI Agent (using MCP)</title>
      <dc:creator>Oleksandr</dc:creator>
      <pubDate>Thu, 22 Oct 2026 06:51:48 +0000</pubDate>
      <link>https://dev.to/alexcodebytes/how-to-connect-a-currency-api-to-your-ai-agent-using-mcp-1kg6</link>
      <guid>https://dev.to/alexcodebytes/how-to-connect-a-currency-api-to-your-ai-agent-using-mcp-1kg6</guid>
      <description>&lt;p&gt;AI agents (like Claude and ChatGPT) are powerful, but they often lack access to real-time data. If you ask an AI "What's the USD to UAH rate?", it might hallucinate a number or give you outdated data.&lt;/p&gt;

&lt;p&gt;In this quick tutorial, I'll show you how to connect a real-time Currency Exchange API to your AI agent using &lt;strong&gt;MCP (Model Context Protocol)&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is MCP?
&lt;/h2&gt;

&lt;p&gt;MCP is a standard that lets AI agents call external tools. Instead of giving the AI a huge context window, you give it a "tool" it can use when needed.&lt;/p&gt;

&lt;h2&gt;
  
  
  The API
&lt;/h2&gt;

&lt;p&gt;We'll use a free API I built: &lt;code&gt;https://currency-exchange-api.boring-saas-infra.workers.dev/rate?from=USD&amp;amp;to=UAH&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;It returns JSON like this:&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
json
{"success":true,"from":"USD","to":"UAH","rate":45.09}

The MCP Server
I've published an MCP server for this API on Glama. You can find it here: Currency Exchange MCP.

How to use it (with Claude Desktop)
Open your Claude Desktop config file (claude_desktop_config.json).

Add this block:
{
  "mcpServers": {
    "currency-exchange": {
      "command": "npx",
      "args": ["-y", "currency-exchange-mcp"]
    }
  }
}

Restart Claude.

Ask Claude: "What is the exchange rate from USD to UAH?"

Claude will now call your MCP server, which calls the API, and returns the real rate.

Try it yourself
All the code is open-source on GitHub. If you build something cool with it, let me know!
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
      <category>ai</category>
      <category>api</category>
      <category>mcp</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>How I Built 3 MCP Servers in a Weekend (and what I learned)</title>
      <dc:creator>Oleksandr</dc:creator>
      <pubDate>Thu, 22 Oct 2026 04:29:17 +0000</pubDate>
      <link>https://dev.to/alexcodebytes/how-i-built-3-mcp-servers-in-a-weekend-and-what-i-learned-2gkc</link>
      <guid>https://dev.to/alexcodebytes/how-i-built-3-mcp-servers-in-a-weekend-and-what-i-learned-2gkc</guid>
      <description>&lt;p&gt;I've been building B2B APIs for a while, but recently I got into MCP (Model Context Protocol). It's a game-changer for AI agents.&lt;/p&gt;

&lt;p&gt;In this post, I'll share how I built 3 MCP servers in a weekend — and what I learned.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is MCP?
&lt;/h2&gt;

&lt;p&gt;MCP is a protocol that allows AI agents (like Claude, ChatGPT) to call external tools. Instead of giving an AI a huge prompt, you give it a tool it can call. It's faster, cheaper, and more reliable.&lt;/p&gt;

&lt;h2&gt;
  
  
  The 3 MCP Servers
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Currency Exchange MCP
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;What it does:&lt;/strong&gt; Gets real-time exchange rates for 160+ currencies.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why I built it:&lt;/strong&gt; Most AI agents don't have access to live currency data. This fixes that.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/Alex-Dev-Web-C-DE/currency-exchange-mcp" rel="noopener noreferrer"&gt;currency-exchange-mcp&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Sanctions MCP
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;What it does:&lt;/strong&gt; Screens entities against global sanctions lists (OFAC, UK, EU, UN).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why I built it:&lt;/strong&gt; Compliance is a huge pain for fintech. This makes it easy for AI agents to do it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/Alex-Dev-Web-C-DE/sanctions-mcp" rel="noopener noreferrer"&gt;sanctions-mcp&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  3. HS Codes MCP
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;What it does:&lt;/strong&gt; Classifies any product into a Harmonized System (HS) code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why I built it:&lt;/strong&gt; Importers and exporters need this. Now AI agents can do it in seconds.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/Alex-Dev-Web-C-DE/hs-codes-mcp" rel="noopener noreferrer"&gt;hs-codes-mcp&lt;/a&gt;&lt;/p&gt;

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

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;MCP is simple.&lt;/strong&gt; The SDK is well-designed. You can build a server in ~30 lines of code.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Glama.ai is the best directory.&lt;/strong&gt; They accepted my servers in minutes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI agents are the future.&lt;/strong&gt; More and more people will use MCP to connect tools.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Try Them Out
&lt;/h2&gt;

&lt;p&gt;All 3 servers are open-source and available on &lt;a href="https://glama.ai/mcp/servers" rel="noopener noreferrer"&gt;Glama.ai&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;You can also check out my other APIs at &lt;a href="https://jsonexlab.com" rel="noopener noreferrer"&gt;jsonexlab.com&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;What are you building with MCP? Let me know in the comments!&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>mcp</category>
      <category>api</category>
      <category>opensource</category>
    </item>
    <item>
      <title>How we built a PEP Screening API with 19,408 records and x402 payments</title>
      <dc:creator>Oleksandr</dc:creator>
      <pubDate>Sun, 18 Oct 2026 09:37:32 +0000</pubDate>
      <link>https://dev.to/alexcodebytes/how-we-built-a-pep-screening-api-with-19408-records-and-x402-payments-28j8</link>
      <guid>https://dev.to/alexcodebytes/how-we-built-a-pep-screening-api-with-19408-records-and-x402-payments-28j8</guid>
      <description>&lt;p&gt;We recently launched a free PEP (Politically Exposed Persons) screening API. Here's how it works and what we learned.&lt;/p&gt;

&lt;p&gt;The problem: Compliance teams need to screen names against PEP lists, but existing solutions are expensive and require enterprise contracts. We wanted to build something simple: a single API call that returns matches.&lt;/p&gt;

&lt;p&gt;The data: We ingested 19,408 unique PEP records from Wikidata and OpenSanctions. The data covers politicians, judges, military officers, and state-owned enterprise executives.&lt;/p&gt;

&lt;p&gt;The API: It's a simple GET request:&lt;/p&gt;

&lt;p&gt;text&lt;br&gt;
GET &lt;a href="https://compliance-engine.boring-saas-infra.workers.dev/check/pep?q=Rosneft" rel="noopener noreferrer"&gt;https://compliance-engine.boring-saas-infra.workers.dev/check/pep?q=Rosneft&lt;/a&gt;&lt;br&gt;
The payment: We use x402 (HTTP 402) for pay-per-call. It's a new protocol that lets AI agents pay for API calls with USDC on Base. No signup, no API keys. Just send a request and pay 0.01 USDC per call.&lt;/p&gt;

&lt;p&gt;The MCP server: We also built an MCP server that exposes the PEP screening as a tool for Claude and Cursor. You can find it on GitHub.&lt;/p&gt;

&lt;p&gt;What we learned:&lt;/p&gt;

&lt;p&gt;x402 is a game-changer for AI agents. They can pay for tools without human intervention.&lt;/p&gt;

&lt;p&gt;MCP is becoming the standard for AI tool integration.&lt;/p&gt;

&lt;p&gt;19K records is enough to cover most compliance use cases.&lt;/p&gt;

&lt;p&gt;If you're building compliance tools, feel free to test our API. It's free for 50 requests/day.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>api</category>
    </item>
  </channel>
</rss>
