<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Lucky Wirasakti — Writing</title>
    <link>https://luckywirasakti.web.id/blog</link>
    <description>Notes on full stack engineering, reliability, and the systems behind production software.</description>
    <language>en</language>
    <lastBuildDate>Mon, 13 Jul 2026 00:00:00 GMT</lastBuildDate>
    <atom:link href="https://luckywirasakti.web.id/feed.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Jurnal: An AI-Powered Git Commit Assistant Written in Go</title>
      <link>https://luckywirasakti.web.id/blog/jurnal-ai-git-commit-assistant</link>
      <guid isPermaLink="true">https://luckywirasakti.web.id/blog/jurnal-ai-git-commit-assistant</guid>
      <description>Tired of staring at a blank commit message box? Jurnal reads your staged diff, plans the commit for you, and even suggests a branch name — all from the terminal, shipped as a single Go binary.</description>
      <pubDate>Mon, 13 Jul 2026 00:00:00 GMT</pubDate>
      <category>Go</category>
      <category>CLI</category>
      <category>AI</category>
      <category>Git</category>
      <category>Developer Tools</category>
    </item>
    <item>
      <title>Self-Hosting a Secure ngrok Alternative: FRP + Caddy with Short-Lived SSL over WebSockets</title>
      <link>https://luckywirasakti.web.id/blog/self-hosted-ngrok-alternative-frp-caddy</link>
      <guid isPermaLink="true">https://luckywirasakti.web.id/blog/self-hosted-ngrok-alternative-frp-caddy</guid>
      <description>Learn how to deploy a dynamic, multi-port tunneling service using FRP and Caddy on a low-resource VPS. Tunnel traffic securely over WSS (port 443) and automate short-lived 6-day Let&apos;s Encrypt certificates.</description>
      <pubDate>Wed, 01 Jul 2026 00:00:00 GMT</pubDate>
      <category>DevOps</category>
      <category>Caddy</category>
      <category>FRP</category>
      <category>Self-Hosting</category>
      <category>Security</category>
    </item>
    <item>
      <title>PixelPaws: A Nostalgic Tamagotchi Experience in Your Browser</title>
      <link>https://luckywirasakti.web.id/blog/pixelpaws-browser-tamagotchi</link>
      <guid isPermaLink="true">https://luckywirasakti.web.id/blog/pixelpaws-browser-tamagotchi</guid>
      <description>Missing the good old Tamagotchi days? Meet PixelPaws, a 16-bit retro virtual pet game you can play directly in your browser—no app installation, sign-ups, or accounts required.</description>
      <pubDate>Mon, 29 Jun 2026 00:00:00 GMT</pubDate>
      <category>project</category>
      <category>nextjs</category>
      <category>gamedev</category>
      <category>retro</category>
    </item>
    <item>
      <title>Building ZenFlow: React, Web Audio API, and Chrome Extension Architecture</title>
      <link>https://luckywirasakti.web.id/blog/building-zenflow-architecture-react</link>
      <guid isPermaLink="true">https://luckywirasakti.web.id/blog/building-zenflow-architecture-react</guid>
      <description>A deep dive into the architecture of ZenFlow, decoupling audio lifecycles from React components using a Web Audio singleton.</description>
      <pubDate>Sun, 28 Jun 2026 00:00:00 GMT</pubDate>
      <category>Architecture</category>
      <category>React</category>
      <category>WebAudio</category>
      <category>Frontend</category>
    </item>
    <item>
      <title>Meet ZenFlow: A Minimalist Pomodoro &amp; Soundscape Extension</title>
      <link>https://luckywirasakti.web.id/blog/meet-zenflow-pomodoro-extension</link>
      <guid isPermaLink="true">https://luckywirasakti.web.id/blog/meet-zenflow-pomodoro-extension</guid>
      <description>There is no shortage of Pomodoro timers, but most are bloated. ZenFlow replaces your New Tab with a serene environment for deep work.</description>
      <pubDate>Sat, 27 Jun 2026 00:00:00 GMT</pubDate>
      <category>Productivity</category>
      <category>OpenSource</category>
      <category>SideProject</category>
    </item>
    <item>
      <title>Scaling a Multi-Brand Commerce Platform: One Backend, Many Storefronts</title>
      <link>https://luckywirasakti.web.id/blog/scaling-multi-brand-commerce-platform</link>
      <guid isPermaLink="true">https://luckywirasakti.web.id/blog/scaling-multi-brand-commerce-platform</guid>
      <description>Notes on building a multi-tenant e-commerce architecture to power multiple isolated brand storefronts from a single centralized API.</description>
      <pubDate>Fri, 26 Jun 2026 00:00:00 GMT</pubDate>
      <category>Architecture</category>
      <category>Monorepo</category>
      <category>E-Commerce</category>
      <category>Backend</category>
    </item>
    <item>
      <title>Building an Autonomous AI Assistant: Selective, Knowledge-Grounded, and Human-Like</title>
      <link>https://luckywirasakti.web.id/blog/building-autonomous-ai-assistant</link>
      <guid isPermaLink="true">https://luckywirasakti.web.id/blog/building-autonomous-ai-assistant</guid>
      <description>A deep dive into the architecture of a custom RAG-based AI assistant using Convex, DeepSeek, and Gemini Embeddings.</description>
      <pubDate>Sat, 20 Jun 2026 00:00:00 GMT</pubDate>
      <category>AI</category>
      <category>RAG</category>
      <category>Convex</category>
      <category>Architecture</category>
    </item>
    <item>
      <title>Telegram QR Login: Passwordless Auth in 40 Lines of Code</title>
      <link>https://luckywirasakti.web.id/blog/telegram-qr-auth-with-telebun</link>
      <guid isPermaLink="true">https://luckywirasakti.web.id/blog/telegram-qr-auth-with-telebun</guid>
      <description>Skip OAuth providers, email verification, and password hashing. Telegram&apos;s bot platform gives you everything you need for QR-based login — here&apos;s how to wire it up.</description>
      <pubDate>Thu, 18 Jun 2026 00:00:00 GMT</pubDate>
      <category>Telegram</category>
      <category>Authentication</category>
      <category>Node.js</category>
      <category>Security</category>
    </item>
    <item>
      <title>Ngamanin VPS Biar Nggak Gampang Dibobol</title>
      <link>https://luckywirasakti.web.id/blog/hardening-vps-ssh-ufw-fail2ban</link>
      <guid isPermaLink="true">https://luckywirasakti.web.id/blog/hardening-vps-ssh-ufw-fail2ban</guid>
      <description>Habis nge-deploy banyak service ke VPS, saatnya ngunci pintunya. Catatan praktis bikin user non-root, SSH key-only, firewall pakai ufw, dan fail2ban biar bot scanner nyerah duluan.</description>
      <pubDate>Tue, 02 Jun 2026 00:00:00 GMT</pubDate>
      <category>Security</category>
      <category>DevOps</category>
      <category>Linux</category>
      <category>Self-Hosting</category>
    </item>
    <item>
      <title>Deploy App Sendiri di VPS Pakai Dokploy</title>
      <link>https://luckywirasakti.web.id/blog/deploy-app-pakai-dokploy-vps</link>
      <guid isPermaLink="true">https://luckywirasakti.web.id/blog/deploy-app-pakai-dokploy-vps</guid>
      <description>Bikin platform deploy ala Vercel di VPS sendiri pakai Dokploy. Push ke Git, app langsung jalan dengan HTTPS otomatis, tanpa bayar per seat dan tanpa vendor lock-in.</description>
      <pubDate>Mon, 01 Jun 2026 00:00:00 GMT</pubDate>
      <category>Dokploy</category>
      <category>DevOps</category>
      <category>Docker</category>
      <category>Self-Hosting</category>
    </item>
    <item>
      <title>Bikin Asisten AI Pribadi di Telegram Pakai Hermes Agent</title>
      <link>https://luckywirasakti.web.id/blog/hermes-agent-telegram-bot</link>
      <guid isPermaLink="true">https://luckywirasakti.web.id/blog/hermes-agent-telegram-bot</guid>
      <description>Pasang Hermes Agent dari Nous Research di server, sambungin ke Telegram, dan jadiin asisten AI yang bisa diajak ngobrol dari HP kapan aja — sambil dia kerja di VPS.</description>
      <pubDate>Sun, 31 May 2026 00:00:00 GMT</pubDate>
      <category>AI</category>
      <category>Telegram</category>
      <category>Hermes</category>
      <category>Self-Hosting</category>
    </item>
    <item>
      <title>Pasang Caddy + 9Router di Server Pakai Docker Compose</title>
      <link>https://luckywirasakti.web.id/blog/deploy-caddy-9router-docker-compose</link>
      <guid isPermaLink="true">https://luckywirasakti.web.id/blog/deploy-caddy-9router-docker-compose</guid>
      <description>Catatan santai cara nge-deploy 9Router di belakang Caddy via SSH pakai Docker Compose, lengkap dengan HTTPS otomatis dan tanpa repot setting basic auth.</description>
      <pubDate>Sat, 30 May 2026 00:00:00 GMT</pubDate>
      <category>Docker</category>
      <category>Caddy</category>
      <category>DevOps</category>
      <category>Self-Hosting</category>
    </item>
    <item>
      <title>Taming Campaign Traffic with Redis Locks</title>
      <link>https://luckywirasakti.web.id/blog/redis-locking-for-campaign-traffic</link>
      <guid isPermaLink="true">https://luckywirasakti.web.id/blog/redis-locking-for-campaign-traffic</guid>
      <description>How a rule-based WhatsApp chatbot survived nationwide voucher drops without double-spending — a practical look at distributed locking and rate limiting.</description>
      <pubDate>Sat, 18 Apr 2026 00:00:00 GMT</pubDate>
      <category>Redis</category>
      <category>Architecture</category>
      <category>Backend</category>
    </item>
    <item>
      <title>Fanning Out Webhooks Without Tears</title>
      <link>https://luckywirasakti.web.id/blog/webhook-fan-out-without-tears</link>
      <guid isPermaLink="true">https://luckywirasakti.web.id/blog/webhook-fan-out-without-tears</guid>
      <description>Routing WhatsApp events to several subscriber apps sounds simple until one slow consumer takes everyone down. Notes on fault-tolerant fan-out.</description>
      <pubDate>Mon, 09 Feb 2026 00:00:00 GMT</pubDate>
      <category>Architecture</category>
      <category>Reliability</category>
    </item>
    <item>
      <title>Swapping Google Maps for OpenStreetMap</title>
      <link>https://luckywirasakti.web.id/blog/migrating-google-maps-to-openstreetmap</link>
      <guid isPermaLink="true">https://luckywirasakti.web.id/blog/migrating-google-maps-to-openstreetmap</guid>
      <description>A corporate platform needed maps without the per-request bill. What the migration actually involved, and where the sharp edges were.</description>
      <pubDate>Sat, 17 Jan 2026 00:00:00 GMT</pubDate>
      <category>Frontend</category>
      <category>Maps</category>
    </item>
    <item>
      <title>Hello World: Welcome to My Space</title>
      <link>https://luckywirasakti.web.id/blog/hello-world</link>
      <guid isPermaLink="true">https://luckywirasakti.web.id/blog/hello-world</guid>
      <description>A quick introduction and a warm welcome to my personal corner of the internet.</description>
      <pubDate>Thu, 01 Jan 2026 00:00:00 GMT</pubDate>
      <category>Personal</category>
    </item>
  </channel>
</rss>