<?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: Hery</title>
    <description>The latest articles on DEV Community by Hery (@herimaxsi).</description>
    <link>https://dev.to/herimaxsi</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%2F3283935%2Fec5f1ab7-70a5-4640-8024-16d789fccc37.jpeg</url>
      <title>DEV Community: Hery</title>
      <link>https://dev.to/herimaxsi</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/herimaxsi"/>
    <language>en</language>
    <item>
      <title>Why Competing on Google Feels Like Fighting a Losing Battle 🥀</title>
      <dc:creator>Hery</dc:creator>
      <pubDate>Fri, 11 Jul 2025 17:11:46 +0000</pubDate>
      <link>https://dev.to/herimaxsi/why-competing-on-google-feels-like-fighting-a-losing-battle-jb4</link>
      <guid>https://dev.to/herimaxsi/why-competing-on-google-feels-like-fighting-a-losing-battle-jb4</guid>
      <description>&lt;p&gt;I’m not losing to better content, better products, or better services.&lt;br&gt;
I’m losing to bigger wallets.&lt;/p&gt;

&lt;p&gt;Their brand is everywhere.&lt;br&gt;
Their domain authority crushes everything.&lt;br&gt;
Their SEO budget equals my entire year’s revenue.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;It’s not just frustrating — it’s demoralizing.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;How are we supposed to win when the rules keep changing, and the game is rigged against the small players?&lt;/p&gt;

&lt;p&gt;If you're going through the same thing, just know this: you're not alone.&lt;br&gt;
We're not bad at SEO. We're just not backed by money.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Have you experienced the same thing?&lt;br&gt;
Drop a comment — I’d love to hear how you’re navigating this mess.&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>startup</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Hello dev.to! My First Article – Who I Am and What I Build</title>
      <dc:creator>Hery</dc:creator>
      <pubDate>Sun, 22 Jun 2025 18:02:03 +0000</pubDate>
      <link>https://dev.to/herimaxsi/hello-devto-my-first-article-who-i-am-and-what-i-build-3lee</link>
      <guid>https://dev.to/herimaxsi/hello-devto-my-first-article-who-i-am-and-what-i-build-3lee</guid>
      <description>&lt;p&gt;Hello dev.to! My First Article – Who I Am and What I Build&lt;/p&gt;

&lt;p&gt;Hi everyone! 👋&lt;/p&gt;

&lt;p&gt;This is my very first article on dev.to, and I’m excited to finally introduce myself to this amazing community of developers, makers, and tech enthusiasts.&lt;/p&gt;

&lt;p&gt;👨‍💻 Who Am I?&lt;/p&gt;

&lt;p&gt;My name is Heri, and I’m a passionate developer, entrepreneur, and lifelong learner. I work mostly with:&lt;/p&gt;

&lt;p&gt;JavaScript / Node.js&lt;/p&gt;

&lt;p&gt;PHP (CodeIgniter)&lt;/p&gt;

&lt;p&gt;SQL Server&lt;/p&gt;

&lt;p&gt;React (for frontend projects)&lt;/p&gt;

&lt;p&gt;Aside from coding, I also love exploring automation, building real-time systems with WebSockets, and integrating APIs for digital products like top-ups, billing systems, and more.&lt;/p&gt;

&lt;p&gt;I run a project called MAXsi.ID, where I provide digital services like mobile top-ups, bill payments, voucher sales, and even smart farming tools.&lt;/p&gt;

&lt;p&gt;🚀 Why I’m Here&lt;/p&gt;

&lt;p&gt;I’ve been reading articles on dev.to for a while, and I’ve learned so much from this community. Now, I want to give back — by:&lt;/p&gt;

&lt;p&gt;Sharing my coding experiences and bugs I’ve fixed&lt;/p&gt;

&lt;p&gt;Writing about building real-world systems in JavaScript &amp;amp; PHP&lt;/p&gt;

&lt;p&gt;Exploring automation workflows for business use cases&lt;/p&gt;

&lt;p&gt;Discussing farming tech and how I merge tech with agriculture&lt;/p&gt;

&lt;p&gt;🧠 Topics I Plan to Write About&lt;/p&gt;

&lt;p&gt;In future posts, I want to cover:&lt;/p&gt;

&lt;p&gt;How I automated payment processing using WebSockets + MSSQL&lt;/p&gt;

&lt;p&gt;SEO-friendly content generation for static sites&lt;/p&gt;

&lt;p&gt;Smart farming using ESP32 + MQTT + Node.js&lt;/p&gt;

&lt;p&gt;How I built a live product dashboard with React and Tailwind&lt;/p&gt;

&lt;p&gt;Developer tips for working with APIs and scheduled cron tasks&lt;/p&gt;

&lt;p&gt;💬 Let’s Connect!&lt;/p&gt;

&lt;p&gt;I’m always open to collaborate or learn from others. If you’re working on:&lt;/p&gt;

&lt;p&gt;DevOps for digital businesses&lt;/p&gt;

&lt;p&gt;Automating backend workflows&lt;/p&gt;

&lt;p&gt;Farm tech or IoT + agriculture&lt;/p&gt;

&lt;p&gt;Or just want to talk code...&lt;/p&gt;

&lt;p&gt;...feel free to comment, follow me, or say hey! 🙌&lt;/p&gt;




&lt;p&gt;Thanks for reading my first article. I’m really looking forward to sharing more and being part of this community.&lt;/p&gt;

&lt;p&gt;See you in the next post! 🚀&lt;/p&gt;




</description>
    </item>
    <item>
      <title>What I Learned Building a Real-Time Pulsa &amp; Top-Up Backend with Node.js</title>
      <dc:creator>Hery</dc:creator>
      <pubDate>Sun, 22 Jun 2025 05:56:04 +0000</pubDate>
      <link>https://dev.to/herimaxsi/what-i-learned-building-a-real-time-pulsa-top-up-backend-with-nodejs-oj2</link>
      <guid>https://dev.to/herimaxsi/what-i-learned-building-a-real-time-pulsa-top-up-backend-with-nodejs-oj2</guid>
      <description>&lt;h2&gt;
  
  
  What I Learned Building a Real-Time Pulsa &amp;amp; Top-Up Backend with Node.js
&lt;/h2&gt;

&lt;p&gt;This isn't a tutorial — just a story of how I ended up building a backend system to handle real-time prepaid top-ups (pulsa, internet data, utility tokens, etc.) using plain Node.js and WebSocket.&lt;/p&gt;

&lt;p&gt;The system is live, used daily by users, and processes transactions through bank transfer detection + external API triggers. Here's how it evolved, and what I learned from the process.&lt;/p&gt;




&lt;h3&gt;
  
  
  🧹 Context
&lt;/h3&gt;

&lt;p&gt;In my region, prepaid services like mobile data, electricity tokens (PLN), and even BPJS (national health insurance) payments are still very much in demand — and mostly processed manually.&lt;/p&gt;

&lt;p&gt;I wanted to build something that can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Accept top-up requests from users&lt;/li&gt;
&lt;li&gt;Detect payment via bank mutation (MSSQL-based)&lt;/li&gt;
&lt;li&gt;Send that payment to a remote gateway&lt;/li&gt;
&lt;li&gt;Do all this in real-time with feedback to the frontend&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  💻 The Stack
&lt;/h3&gt;

&lt;p&gt;Nothing fancy. I started with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Node.js&lt;/strong&gt; — to handle backend logic&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;WS (WebSocket)&lt;/strong&gt; — for bi-directional real-time updates&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MSSQL&lt;/strong&gt; — to query latest transfers/mutations&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Filesystem&lt;/strong&gt; — queueing requests via JSON files&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Axios&lt;/strong&gt; — to send top-up commands to the gateway&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The queue system is very basic: JSON files are dropped into a &lt;code&gt;req/&lt;/code&gt; folder, then scanned every minute for matching payments.&lt;/p&gt;




&lt;h3&gt;
  
  
  🔄 Real-Time Looping
&lt;/h3&gt;

&lt;p&gt;Each file contains a request like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"MAXsi.ID TOPUP"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"kode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"IND10"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"tujuan"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"0812700313"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"harga"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;10313&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"nama"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Rizky"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"bank"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"BRI"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"deviceId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"client-xyz"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; 
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once a match is found in the bank mutation table (e.g. amount + name in &lt;code&gt;keterangan&lt;/code&gt;), the system triggers a request to an external API (in my case, OtomaX or a similar system).&lt;/p&gt;

&lt;p&gt;The client is updated in real-time through the WebSocket connection.&lt;/p&gt;




&lt;h3&gt;
  
  
  🧠 Things That Surprised Me
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;🧵 &lt;strong&gt;WebSocket is underrated&lt;/strong&gt;. For transactional systems, it's way better than polling.&lt;/li&gt;
&lt;li&gt;⚖️ &lt;strong&gt;Parsing human-entered notes is unreliable.&lt;/strong&gt; You'd be surprised how many ways someone can type "Rizky".&lt;/li&gt;
&lt;li&gt;↺ &lt;strong&gt;Retry logic matters&lt;/strong&gt;. Sometimes network flukes cause a miss, and the system needs to be idempotent.&lt;/li&gt;
&lt;li&gt;📀 &lt;strong&gt;File-based queuing works&lt;/strong&gt;, if you're disciplined. For low-traffic systems, it's dead simple and avoids DB overhead.&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  🧪 Bank Mutation Matching Logic
&lt;/h3&gt;

&lt;p&gt;This is the trickiest part. I check:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;amount &amp;gt;= harga&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;keterangan LIKE %nama%&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;and &lt;code&gt;timestamp&lt;/code&gt; is within ±45 mins&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Even with that, I added safeguards like “processed files” tracker to avoid duplicate transactions.&lt;/p&gt;




&lt;h3&gt;
  
  
  ✍️ Closing Thoughts
&lt;/h3&gt;

&lt;p&gt;This system isn't perfect. But it's been running daily, reliably handling:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pulsa top-ups&lt;/li&gt;
&lt;li&gt;Token listrik (prepaid electricity)&lt;/li&gt;
&lt;li&gt;Bill payments like BPJS and PBB&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I learned a lot from this — especially about simplifying automation. Sometimes, you don't need Kubernetes or Kafka. Just a folder, a WebSocket, and some &lt;code&gt;console.log&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;If you're building anything in this space — fintech, automation, hybrid local-digital systems — I'd love to hear how you tackle these things.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>node</category>
      <category>websocket</category>
      <category>automation</category>
    </item>
  </channel>
</rss>
