<?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: Khairul Muhtadin</title>
    <description>The latest articles on DEV Community by Khairul Muhtadin (@khmuhtadin).</description>
    <link>https://dev.to/khmuhtadin</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%2F3796665%2F6f5c9229-982f-48e5-8082-05353adb9bee.png</url>
      <title>DEV Community: Khairul Muhtadin</title>
      <link>https://dev.to/khmuhtadin</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/khmuhtadin"/>
    <language>en</language>
    <item>
      <title>Databases for durable state (sticky note vs filing cabinet)</title>
      <dc:creator>Khairul Muhtadin</dc:creator>
      <pubDate>Tue, 18 Aug 2026 11:00:02 +0000</pubDate>
      <link>https://dev.to/khmuhtadin/databases-for-durable-state-sticky-note-vs-filing-cabinet-2h2m</link>
      <guid>https://dev.to/khmuhtadin/databases-for-durable-state-sticky-note-vs-filing-cabinet-2h2m</guid>
      <description>&lt;p&gt;Workflows forget. That is fine for drafts.&lt;/p&gt;

&lt;p&gt;It is fatal for orders, tickets, and retries. If state must survive the next run, sticky notes are not enough. You need a filing cabinet.&lt;/p&gt;

&lt;p&gt;Swipe for when to store durable state, a create-once flow, and three beginner rules so retries stop inventing duplicates.&lt;/p&gt;

&lt;p&gt;What is the one fact your flow keeps forgetting?&lt;/p&gt;

&lt;p&gt;Episode 17 of Ship with n8n: 20 builder skills.&lt;/p&gt;

</description>
      <category>automation</category>
      <category>ai</category>
      <category>productivity</category>
      <category>tools</category>
    </item>
    <item>
      <title>AI that stays under control (smart intern, not CEO)</title>
      <dc:creator>Khairul Muhtadin</dc:creator>
      <pubDate>Sun, 16 Aug 2026 11:00:00 +0000</pubDate>
      <link>https://dev.to/khmuhtadin/ai-that-stays-under-control-smart-intern-not-ceo-2nk8</link>
      <guid>https://dev.to/khmuhtadin/ai-that-stays-under-control-smart-intern-not-ceo-2nk8</guid>
      <description>&lt;p&gt;AI in n8n is not a magic coworker.&lt;/p&gt;

&lt;p&gt;It is a smart intern. Without a job description, tools limits, and stop rules, it will improvise in production.&lt;/p&gt;

&lt;p&gt;Swipe for the intern analogy, three rails before the model, and a support-triage flow where refunds still need a gate.&lt;/p&gt;

&lt;p&gt;Where does your agent still have unlimited tools?&lt;/p&gt;

&lt;p&gt;Episode 16 of Ship with n8n: 20 builder skills.&lt;/p&gt;

</description>
      <category>automation</category>
      <category>ai</category>
      <category>productivity</category>
      <category>tools</category>
    </item>
    <item>
      <title>Wait, schedule, and time (alarm vs kitchen timer)</title>
      <dc:creator>Khairul Muhtadin</dc:creator>
      <pubDate>Fri, 14 Aug 2026 11:00:00 +0000</pubDate>
      <link>https://dev.to/khmuhtadin/wait-schedule-and-time-alarm-vs-kitchen-timer-16oi</link>
      <guid>https://dev.to/khmuhtadin/wait-schedule-and-time-alarm-vs-kitchen-timer-16oi</guid>
      <description>&lt;p&gt;Time in n8n is not “hope it runs later”.&lt;/p&gt;

&lt;p&gt;An alarm starts the kitchen. A timer pauses mid-recipe. Mixing those two is how people get double fires and silent delays.&lt;/p&gt;

&lt;p&gt;Swipe for a beginner map of Schedule vs Wait, a polite API loop, and three rules so time stays boring.&lt;/p&gt;

&lt;p&gt;Do you need a clock, or just a pause?&lt;/p&gt;

&lt;p&gt;Episode 15 of Ship with n8n: 20 builder skills.&lt;/p&gt;

</description>
      <category>automation</category>
      <category>ai</category>
      <category>productivity</category>
      <category>tools</category>
    </item>
    <item>
      <title>Secrets that stay secret (your API key is a house key)</title>
      <dc:creator>Khairul Muhtadin</dc:creator>
      <pubDate>Wed, 12 Aug 2026 11:00:01 +0000</pubDate>
      <link>https://dev.to/khmuhtadin/secrets-that-stay-secret-your-api-key-is-a-house-key-2jj8</link>
      <guid>https://dev.to/khmuhtadin/secrets-that-stay-secret-your-api-key-is-a-house-key-2jj8</guid>
      <description>&lt;p&gt;Your API key is not “just config”.&lt;/p&gt;

&lt;p&gt;It is a house key. Leave it on the door and anyone walking by can open production.&lt;/p&gt;

&lt;p&gt;Swipe for a beginner map of n8n secrets: what counts as a secret, why hardcoding breaks you, and the simple habit that keeps keys in a vault instead of on the canvas.&lt;/p&gt;

&lt;p&gt;Where do your live keys live today: credentials, or still inside a node?&lt;/p&gt;

&lt;p&gt;Episode 14 of Ship with n8n: 20 builder skills.&lt;/p&gt;

</description>
      <category>automation</category>
      <category>ai</category>
      <category>productivity</category>
      <category>tools</category>
    </item>
    <item>
      <title>Loops that finish (empty checks, no double-loop)</title>
      <dc:creator>Khairul Muhtadin</dc:creator>
      <pubDate>Mon, 10 Aug 2026 11:00:00 +0000</pubDate>
      <link>https://dev.to/khmuhtadin/loops-that-finish-empty-checks-no-double-loop-14j</link>
      <guid>https://dev.to/khmuhtadin/loops-that-finish-empty-checks-no-double-loop-14j</guid>
      <description>&lt;p&gt;Loops feel powerful until one never ends.&lt;/p&gt;

&lt;p&gt;Missing exits, stacked pagination, side effects with no cap.&lt;/p&gt;

&lt;p&gt;Swipe for a batch that actually finishes — and the double-loop trap.&lt;/p&gt;

&lt;p&gt;Which loop in production would you not want running unsupervised tonight?&lt;/p&gt;

&lt;p&gt;Episode 13 of Ship with n8n: 20 builder skills.&lt;/p&gt;

</description>
      <category>automation</category>
      <category>ai</category>
      <category>productivity</category>
      <category>tools</category>
    </item>
    <item>
      <title>Branching without chaos (normalize first, then decide)</title>
      <dc:creator>Khairul Muhtadin</dc:creator>
      <pubDate>Sat, 08 Aug 2026 11:00:01 +0000</pubDate>
      <link>https://dev.to/khmuhtadin/branching-without-chaos-normalize-first-then-decide-1pek</link>
      <guid>https://dev.to/khmuhtadin/branching-without-chaos-normalize-first-then-decide-1pek</guid>
      <description>&lt;p&gt;Branching is where readable workflows go to die.&lt;/p&gt;

&lt;p&gt;Nested IFs, no fallback, different shapes per arm, then a hopeful Merge.&lt;/p&gt;

&lt;p&gt;Swipe for how I keep routes readable — normalize first, decide once, merge with a contract.&lt;/p&gt;

&lt;p&gt;How many nested IFs are in your messiest production flow?&lt;/p&gt;

&lt;p&gt;Episode 12 of Ship with n8n: 20 builder skills.&lt;/p&gt;

</description>
      <category>automation</category>
      <category>ai</category>
      <category>productivity</category>
      <category>tools</category>
    </item>
    <item>
      <title>Failure paths on purpose (happy path is half the design)</title>
      <dc:creator>Khairul Muhtadin</dc:creator>
      <pubDate>Thu, 06 Aug 2026 11:00:00 +0000</pubDate>
      <link>https://dev.to/khmuhtadin/failure-paths-on-purpose-happy-path-is-half-the-design-1ol5</link>
      <guid>https://dev.to/khmuhtadin/failure-paths-on-purpose-happy-path-is-half-the-design-1ol5</guid>
      <description>&lt;p&gt;Happy path is not a full design.&lt;/p&gt;

&lt;p&gt;If money or customer-facing steps can fail silently, you have hope — not production.&lt;/p&gt;

&lt;p&gt;Swipe for how I wire failure on purpose, without the full node lecture in the caption.&lt;/p&gt;

&lt;p&gt;Which of your critical workflows still fails quietly?&lt;/p&gt;

&lt;p&gt;Episode 11 of Ship with n8n: 20 builder skills.&lt;/p&gt;

</description>
      <category>automation</category>
      <category>ai</category>
      <category>productivity</category>
      <category>tools</category>
    </item>
    <item>
      <title>APIs in production (rate limits, retries, Arc A milestone)</title>
      <dc:creator>Khairul Muhtadin</dc:creator>
      <pubDate>Tue, 04 Aug 2026 11:00:00 +0000</pubDate>
      <link>https://dev.to/khmuhtadin/apis-in-production-rate-limits-retries-arc-a-milestone-3a8l</link>
      <guid>https://dev.to/khmuhtadin/apis-in-production-rate-limits-retries-arc-a-milestone-3a8l</guid>
      <description>&lt;p&gt;Connecting an API in the editor is easy.&lt;/p&gt;

&lt;p&gt;Surviving rate limits, expired tokens, and retries is the real skill.&lt;/p&gt;

&lt;p&gt;Swipe for batch+wait patterns, idempotent upserts, and an Arc A milestone check.&lt;/p&gt;

&lt;p&gt;Would your flakiest integration survive a token refresh right now?&lt;/p&gt;

&lt;p&gt;Episode 10 of Ship with n8n: 20 builder skills.&lt;/p&gt;

</description>
      <category>automation</category>
      <category>ai</category>
      <category>productivity</category>
      <category>tools</category>
    </item>
    <item>
      <title>Build n8n Workflows with Indonesian Public Data Using the API Indonesia Community Node</title>
      <dc:creator>Khairul Muhtadin</dc:creator>
      <pubDate>Fri, 24 Jul 2026 11:00:00 +0000</pubDate>
      <link>https://dev.to/khmuhtadin/build-n8n-workflows-with-indonesian-public-data-using-the-api-indonesia-community-node-e63</link>
      <guid>https://dev.to/khmuhtadin/build-n8n-workflows-with-indonesian-public-data-using-the-api-indonesia-community-node-e63</guid>
      <description>&lt;h1&gt;
  
  
  Build n8n Workflows with Indonesian Public Data Using the API Indonesia Community Node
&lt;/h1&gt;

&lt;p&gt;Using an API in n8n is easy. Rebuilding the same HTTP Request setup for every workflow is the repetitive part: URLs, headers, API keys, parameters, and response mapping.&lt;br&gt;
The API Indonesia community node packages that work into a native n8n node. Instead of starting from a generic HTTP Request node, you select a resource and operation, configure its fields, and continue building your workflow.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the node supports
&lt;/h2&gt;

&lt;p&gt;The node exposes Indonesian public-data resources such as administrative regions, prayer times, earthquakes, weather, exchange rates, public holidays, postal codes, schools, universities, and hospitals.&lt;br&gt;
It also includes Quran, Bible, KBBI, vehicle plates, minimum wages, halal certification, BPOM products, Hijri calendar data, astronomy, OJK investment products, early warnings, Bank Indonesia exchange rates, validators, and utility endpoints.&lt;/p&gt;

&lt;h2&gt;
  
  
  Install the community node
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Open n8n.&lt;/li&gt;
&lt;li&gt;Go to Settings, then Community Nodes.&lt;/li&gt;
&lt;li&gt;Select Install.&lt;/li&gt;
&lt;li&gt;Enter n8n-nodes-api-indonesia.
After installation, search for &lt;strong&gt;API Indonesia&lt;/strong&gt; when adding a node to a workflow.
## Create credentials once
Open the API Indonesia dashboard and create or copy an API key. Then, in n8n, create a credential of type &lt;strong&gt;API Indonesia API&lt;/strong&gt; and paste the key. Production keys start with aip_live_.
The default base URL is &lt;a href="https://use.apiindonesia.id" rel="noopener noreferrer"&gt;https://use.apiindonesia.id&lt;/a&gt;. You only need to change it when working against a development or staging environment.
## Example: retrieve the latest earthquakes
A minimal workflow can be:
&lt;strong&gt;Manual Trigger → API Indonesia → next action&lt;/strong&gt;
In the API Indonesia node, choose the &lt;strong&gt;Gempa&lt;/strong&gt; resource and the operation for the latest earthquakes. The node returns the latest records, ready to send to a chat alert, database, dashboard, or a filtering step.
That is the important difference from a demo-only integration: the node output is normal n8n data, so it can continue through the same workflow patterns you already use.
## Where this is useful
Use it when a workflow needs Indonesian public data without manually recreating a request every time. Examples include daily prayer-time notifications, earthquake alerts, regional onboarding forms, weather-aware operations, halal product discovery, and enrichment flows for education or healthcare data.
Start small. Pick one resource, run it from a Manual Trigger, inspect the output, then connect it to the next useful action.
## Resources
Community node package: &lt;a href="https://www.npmjs.com/package/n8n-nodes-api-indonesia" rel="noopener noreferrer"&gt;https://www.npmjs.com/package/n8n-nodes-api-indonesia&lt;/a&gt;
API documentation: &lt;a href="https://docs.apiindonesia.id/" rel="noopener noreferrer"&gt;https://docs.apiindonesia.id/&lt;/a&gt;
API key dashboard: &lt;a href="https://dashboard.apiindonesia.id/" rel="noopener noreferrer"&gt;https://dashboard.apiindonesia.id/&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>automation</category>
      <category>api</category>
      <category>tutorial</category>
      <category>showdev</category>
    </item>
    <item>
      <title>API Indonesia is now available on RapidAPI</title>
      <dc:creator>Khairul Muhtadin</dc:creator>
      <pubDate>Mon, 20 Jul 2026 11:00:00 +0000</pubDate>
      <link>https://dev.to/khmuhtadin/api-indonesia-is-now-available-on-rapidapi-5a9d</link>
      <guid>https://dev.to/khmuhtadin/api-indonesia-is-now-available-on-rapidapi-5a9d</guid>
      <description>&lt;p&gt;API Indonesia is now available on RapidAPI.&lt;br&gt;
If you prefer discovering and testing APIs through a marketplace workflow, you can explore it there. The listing covers Indonesian public data endpoints such as regions, postal codes, public holidays, prayer times, earthquakes, exchange rates, and format validation utilities.&lt;br&gt;
If you prefer the full self-serve path, the main site and docs remain the primary entry points:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://apiindonesia.id/" rel="noopener noreferrer"&gt;https://apiindonesia.id/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://docs.apiindonesia.id/" rel="noopener noreferrer"&gt;https://docs.apiindonesia.id/&lt;/a&gt;
RapidAPI listing:
&lt;a href="https://rapidapi.com/contactmuhtadin/api/api-indonesia" rel="noopener noreferrer"&gt;https://rapidapi.com/contactmuhtadin/api/api-indonesia&lt;/a&gt;
This is a distribution update. Existing production base URL and API keys on the main platform stay the same.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>api</category>
      <category>indonesia</category>
      <category>tools</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Per-product landing pages for API Indonesia</title>
      <dc:creator>Khairul Muhtadin</dc:creator>
      <pubDate>Fri, 17 Jul 2026 03:45:37 +0000</pubDate>
      <link>https://dev.to/khmuhtadin/per-product-landing-pages-for-api-indonesia-53ko</link>
      <guid>https://dev.to/khmuhtadin/per-product-landing-pages-for-api-indonesia-53ko</guid>
      <description>&lt;p&gt;API Indonesia now has a product catalog and per-API landing pages.&lt;/p&gt;

&lt;p&gt;Instead of forcing every visitor straight into a long docs page, each dataset has its own page under /produk. There are Indonesian and English versions.&lt;/p&gt;

&lt;p&gt;Coverage snapshot:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;23+ API products&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;280K+ data records&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Regions, weather, Bank Indonesia rates, validation, halal, BPOM, Hijri calendar, schools, earthquakes, and more&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What this is for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;discover which public datasets exist&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;understand use cases before reading the full reference&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;jump into the right docs section faster&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Catalog:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apiindonesia.id/produk/" rel="noopener noreferrer"&gt;https://apiindonesia.id/produk/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apiindonesia.id/produk/wilayah" rel="noopener noreferrer"&gt;https://apiindonesia.id/produk/wilayah&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is a discovery and onboarding update. It does not change the production API base URL or existing API keys.&lt;/p&gt;

</description>
      <category>api</category>
      <category>indonesia</category>
      <category>documentation</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Try API Indonesia endpoints from the docs</title>
      <dc:creator>Khairul Muhtadin</dc:creator>
      <pubDate>Thu, 16 Jul 2026 11:00:01 +0000</pubDate>
      <link>https://dev.to/khmuhtadin/try-api-indonesia-endpoints-from-the-docs-15bn</link>
      <guid>https://dev.to/khmuhtadin/try-api-indonesia-endpoints-from-the-docs-15bn</guid>
      <description>&lt;p&gt;API Indonesia docs now include an interactive Try It Out console.&lt;br&gt;
You can test endpoints directly in the browser with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;API key&lt;/li&gt;
&lt;li&gt;JWT&lt;/li&gt;
&lt;li&gt;query params&lt;/li&gt;
&lt;li&gt;path params&lt;/li&gt;
&lt;li&gt;JSON body
This is meant to reduce setup friction. You do not need to open Postman just to see what an endpoint returns.
Docs:
&lt;a href="https://docs.apiindonesia.id/" rel="noopener noreferrer"&gt;https://docs.apiindonesia.id/&lt;/a&gt;
This is a developer experience update. It does not change the production base URL or existing API keys.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>api</category>
      <category>documentation</category>
      <category>indonesia</category>
      <category>tools</category>
    </item>
  </channel>
</rss>
