<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[I'm Huynh Nhan Quoc]]></title><description><![CDATA[Golang Developer building Kitwork
Exploring runtimes, bytecode, virtual machines, and cloud-native computing.
- website: hnq.me]]></description><link>https://huynhnhanquoc.substack.com</link><image><url>https://substackcdn.com/image/fetch/$s_!OnY9!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63284e92-2692-4ada-8c5b-aca36aeac2e4_941x941.png</url><title>I&apos;m Huynh Nhan Quoc</title><link>https://huynhnhanquoc.substack.com</link></image><generator>Substack</generator><lastBuildDate>Tue, 14 Jul 2026 02:35:39 GMT</lastBuildDate><atom:link href="https://huynhnhanquoc.substack.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Huỳnh Nhân Quốc]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[huynhnhanquoc@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[huynhnhanquoc@substack.com]]></itunes:email><itunes:name><![CDATA[Huynh Nhan Quoc]]></itunes:name></itunes:owner><itunes:author><![CDATA[Huynh Nhan Quoc]]></itunes:author><googleplay:owner><![CDATA[huynhnhanquoc@substack.com]]></googleplay:owner><googleplay:email><![CDATA[huynhnhanquoc@substack.com]]></googleplay:email><googleplay:author><![CDATA[Huynh Nhan Quoc]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[More Than 5 Years of Self-Hosting on the Cloud and What It Has Taught Me]]></title><description><![CDATA[More than five years of self-hosting taught me that technology was never the destination. This is a story about curiosity, technological independence, and building a life around the freedom to create.]]></description><link>https://huynhnhanquoc.substack.com/p/more-than-5-years-of-self-hosting</link><guid isPermaLink="false">https://huynhnhanquoc.substack.com/p/more-than-5-years-of-self-hosting</guid><dc:creator><![CDATA[Huynh Nhan Quoc]]></dc:creator><pubDate>Tue, 23 Jun 2026 09:02:28 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/1ea38568-d536-4747-8d19-196c2d0cc264_1483x1112.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2>Standing on Someone Else&#8217;s Shoulders</h2><blockquote><p>"I was never trying to build a startup. I was trying to build a life."</p></blockquote><p>When people hear that I have been self-hosting my own infrastructure for more than five years, they often assume this is a story about cloud architecture, Linux, or scaling systems.</p><p>It is not.</p><p>This is a story about curiosity.</p><p>More specifically, it is a story about slowly realizing that <strong>you cannot spend your entire life standing on someone else&#8217;s shoulders.</strong></p><p>Looking back today, every chapter of my journey seems to have quietly led me toward that realization.</p><p>I still remember a season of my life in 2018 when a friend and I were building a small coffee shop together. During the day, we physically built the place with our own hands. At night, we returned home and continued writing software.</p><p>Then one night, everything stopped.</p><p>Our product was ready to launch when Firebase released an update. I stayed awake the entire night trying to solve a problem that wasn&#8217;t even caused by my own code. Around ten o&#8217;clock the following morning, another update arrived, the deployment worked again and I finally went to sleep.</p><p>The issue disappeared, but the lesson stayed with me.</p><p>That was probably the first time I understood what dependency really meant.</p><h2>Returning Home and Learning to Build Again</h2><p>In 2019, I wrote Golang for my first real-world project and was introduced to Ubuntu Server. I learned my first CLI commands and slowly fell in love with the feeling of operating infrastructure with my own hands.</p><p>Life eventually introduced me to friends like Lychee and Parker. Together, we started a startup and built DIMODO, an application that shipped products from South Korea to Vietnam.</p><p>Then the pandemic arrived.</p><p>Everyone went their separate ways.</p><p>I returned to my hometown with almost nothing.</p><p>During the day, I worked as a delivery driver.</p><p>At night, I rewrote libraries.</p><p>Like many Go developers, I started with mux and later discovered Fiber. Then the first customers arrived, followed by the first payments.</p><p>Without realizing it, I had quietly become an indie developer.</p><h2>Six Months for a Single Identifier</h2><p>There was a period when I spent almost six months building a DNS routing feature to manage tenants for customers.</p><p>Six months.</p><p>Just to make a single identifier appear on a screen.</p><p>It sounds ridiculous now, but those six months eventually led me to build Samdy, an experiment to validate my ideas.</p><p>At one point, it reached the Top 100 largest websites in Vietnam.</p><p>But reality always catches up.</p><p>The entire system was running on <strong>1 CPU, 1 GB of RAM and 20 GB of storage</strong>.</p><p>Revenue existed, but payment cycles were slow.</p><p>Infrastructure costs never stopped.</p><p>Eventually, the rankings collapsed alongside the system itself.</p><p>That period taught me another lesson.</p><blockquote><p><strong>Dependency is comfortable until it becomes expensive.</strong></p></blockquote><h2>Curiosity Became Infrastructure</h2><p>After that, I stopped thinking like an application developer.</p><p>I started thinking like an infrastructure builder.</p><p>Cache systems.</p><p>Traffic routing.</p><p>Rate limiting.</p><p>Recovery mechanisms.</p><p>Data management.</p><p>Then curiosity took me deeper.</p><p>I wanted to understand tunnels, protocols, network layers and runtimes. I wanted to understand where a request goes after pressing Enter, who forwards it and who eventually executes it.</p><p>The deeper I went, the more I realized something.</p><blockquote><p><strong>I was no longer learning how to write code. I was learning how software itself works.</strong></p></blockquote><h2>Kitwork: The Product of a Dreamer</h2><p>Kitwork was never the destination.</p><p>It was simply the inevitable outcome of years of accumulated curiosity.</p><p>After building systems for so long, one question kept bothering me.</p><p><strong>Why do we still rebuild entire binaries just to ship tiny features?</strong></p><p>That question eventually became my first Eureka moment.</p><blockquote><p><strong>Logic can be separated from binaries.</strong></p></blockquote><p>Then another idea appeared.</p><blockquote><p><strong>Logic can move between servers through bytecode.</strong></p></blockquote><p>That idea fascinated me.</p><p>If logic could move, perhaps infrastructure was simply an environment where thoughts could execute.</p><p>I initially thought I was building a programming language.</p><p>Then I realized the world already has enough programming languages.</p><p>We do not need another one.</p><p>We simply need better ways to express logic.</p><h2>The Life I Was Chasing All Along</h2><p>Eventually, I shared these ideas online.</p><p>Some people liked them.</p><p>Some people did not.</p><p>Some people said I was delusional.</p><p>Others told me to find experts.</p><p>Maybe they were right.</p><p>Maybe they were not.</p><p>But I remembered a teaching from Buddha.</p><blockquote><p><em>&#8220;If someone offers you a gift and you choose not to accept it, the gift still belongs to them.&#8221;</em></p></blockquote><p>Today, I no longer feel the need to prove anything.</p><p>I simply enjoy building.</p><p>Because after all these years, I have realized something very simple.</p><p>I was never chasing startups.</p><p>I was never chasing titles.</p><p>I was never even chasing technology itself.</p><p>I was chasing freedom.</p><p>The freedom to wake up in the morning, buy breakfast, eat with my wife, water my plants, write code, sit at a coffee shop, build products I genuinely love and live peacefully in a small town.</p><p>Maybe that is the illusion people keep talking about.</p><p>But if it is an illusion, I would happily spend my entire life living inside it.</p><blockquote><p><strong>I was never chasing technology.</strong></p><p><strong>I was chasing the freedom to quietly build what I believe in while living an ordinary life.</strong></p></blockquote>]]></content:encoded></item><item><title><![CDATA[Localhost:3000 on a phone.]]></title><description><![CDATA[I used to be part of a small builder community group. I started sharing my story and my journey there.]]></description><link>https://huynhnhanquoc.substack.com/p/localhost3000-on-a-phone</link><guid isPermaLink="false">https://huynhnhanquoc.substack.com/p/localhost3000-on-a-phone</guid><dc:creator><![CDATA[Huynh Nhan Quoc]]></dc:creator><pubDate>Wed, 17 Jun 2026 05:18:56 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/948104bd-3882-4768-991f-da4b40a9f050_1548x1161.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>But recently, I prefer sharing it on my personal page instead, because there are people who slowly start to understand and walk with me on this path: &#8220;writing a runtime that runs on cloud infrastructure.&#8221;</p><p>About 6 months ago, I started sharing about Kitwork and why it was born inside a README file. Many people laughed at it and saw it as something unrealistic. But I don&#8217;t understand why, the more that happened, the happier I felt. Because I knew it was right, and there were still a few people who supported me. I&#8217;m really grateful for that.</p><p>Maybe a few months ago I went back to my wife&#8217;s hometown to rest and think about what Kitwork and this journey really are. I kept asking myself why I should build it, and what makes it better than the stack I spent 5 years of my youth building and then replacing.</p><p>That question stayed with me for a long time.</p><p>Until the first runtimes started to take shape.</p><p>And then I began to understand why I am building it.</p><p>Just like the first sentence I wrote about Kitwork: &#8220;Logic living.&#8221;</p><p>While many people are still asking: &#8220;what&#8217;s the difference between microservices and monolith?&#8221;</p><p>I was asking a different question:</p><p>How can logic move across cloud infrastructures?</p><p>Maybe in the past, that was impossible, or extremely hard to implement, or even if possible, it came with too many trade-offs.</p><p>But then AI arrived.</p><p>And human intelligence is no longer bound by simple traditional constraints, which made me start thinking differently about all of this.</p><p>I used to ask very naive questions like: why do we need Docker, why do we need node_modules, why do we need k8s, why do we need Redis.</p><p>I&#8217;m not rejecting technology. I just want to understand the &#8220;why&#8221; behind it.</p><p>Programming doesn&#8217;t feel like it used to anymore.</p><p>It&#8217;s no longer just code and deploy, or infrastructure deploying systems.</p><p>Now code becomes a conversation between code, cloud infrastructure, and AI.</p><p>AI is slowly penetrating many industries in society. It no longer feels like a &#8220;ledger system&#8221;, but more like a new notebook that everyone has to start using, just like when we first adopted the internet, then smartphones, and now AI.</p><p>I used to know someone who said AI was stupid. Now that same person is using AI every day because they think it has become smart enough.</p><p>We are not meant to be attached to any fixed belief. We have to adapt it into our daily life.</p><p>Just like how we code, build software, write web apps&#8230; vibe coding is fine, AI engineer is fine, loop engineering is fine.</p><p>What matters is that we keep learning new things every day to adapt to this world.</p><p>I&#8217;m not saying you must chase everything. I&#8217;m just saying you either slowly adapt, or you get left behind.</p><p>And I just hope people don&#8217;t say things like: &#8220;I just generated a website, developers are going extinct&#8230;&#8221; please, don&#8217;t say that.</p><p>And don&#8217;t look down on vibe coding that produces a localhost:3000 app, because we still need to learn and grow through it.</p><p>If one day I really become &#8220;obsolete&#8221;, I will probably go back to my hometown, raise chickens, grow vegetables, and live a simpler life.</p><p>And don&#8217;t be afraid that job titles will disappear, like front-end developer, back-end developer, full-stack developer&#8230; new roles will always replace them.</p><p>What does not change is often what stops evolving.</p><p>It sounds painful, but it&#8217;s probably true.</p><p>As AI grows rapidly and spreads into every corner of life, localhost on a phone is no longer just a technical story. It becomes a challenge for both people who already know it and those who don&#8217;t.</p><p>Connecting through a LAN IP and running it on a phone is easy, simple, straightforward.</p><p>But actually running a real localhost-like experience on a phone is not just a journey, it is a path full of trials, failures, and retries.</p><p>Localhost on a phone makes me think about a new way of programming, where space, devices, ideas, and infrastructure are no longer separated as &#8220;developer concerns.&#8221;</p><div><hr></div><p>People often ask me: how can a developer write such long writing like a writer?</p><p>So what should I write instead? System design? Bytecode on cloud? Runtime internals? Things you already know?</p><p>What I want to write about is not loop engineering or implementation details, because AI can already teach you those, and maybe even better than me.</p><p>What I want to talk about is how small things slowly enter and reshape our daily lives.</p><p>And why should anyone trust me more than AI anyway?</p><p>Multi-tenancy on cloud infrastructure together with AI is what I&#8217;m currently exploring and learning every day.</p><p>That&#8217;s also why I&#8217;ve started liking Claude Code and AI agents, because I believe that in a few months, or a few years, we will reach something like autopilot code.</p><p>Localhost:3000 on a phone looks simple.</p><p>But building it is not as simple as you think.</p>]]></content:encoded></item><item><title><![CDATA[Loop Engineering of Life: If You Never Try, How Will You Know What’s Right or Wrong?]]></title><description><![CDATA[The shortcut to success isn't avoiding failure. It's failing early, learning fast, and continuing to iterate.]]></description><link>https://huynhnhanquoc.substack.com/p/loop-engineering-of-life-if-you-never</link><guid isPermaLink="false">https://huynhnhanquoc.substack.com/p/loop-engineering-of-life-if-you-never</guid><dc:creator><![CDATA[Huynh Nhan Quoc]]></dc:creator><pubDate>Mon, 15 Jun 2026 14:46:56 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/ecf36077-1354-4003-b6a9-9d13e46ea378_1160x2063.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2>The wheel of technology</h2><p>Lately, I&#8217;ve noticed a familiar pattern in many tech communities.</p><p>Whenever someone, especially a group of students, shares a new project, the same comment often appears:</p><blockquote><p>&#8220;Another person reinventing the wheel.&#8221;</p></blockquote><p>Honestly, I don&#8217;t know how successful those people are or how capable they truly are. But one thing I do notice is that many of them choose to hide behind anonymous accounts, using invisible identities to judge the efforts of others.</p><p>Every time I see a group of students struggling to build an early-stage project, I&#8217;m reminded of my younger self &#8212; a version of me filled with dreams, energy, and a fair amount of naivety.</p><p>It also reminds me of something I once wrote:</p><p><strong>&#8220;Young people, effort, dreams, and the price we pay for them.&#8221;</strong></p><p>No one is born talented.</p><p>No one is born knowing everything.</p><p>No one enters life already holding all the answers.</p><p>Everything we know today is built upon a very simple process:</p><p><strong>Experiment &#8594; Fail &#8594; Learn &#8594; Repeat.</strong></p><p>We keep moving and eventually we&#8217;ll make mistakes.</p><p>We keep making mistakes and eventually we&#8217;ll get things right.</p><p>But if we never dare to begin, perhaps we&#8217;ve already failed from the very start.</p><h2>From Loop Engineering to Life Itself</h2><p>Recently, I&#8217;ve been exploring a concept called <strong>Loop Engineering</strong>.</p><p>In the AI world, things are changing.</p><p>For a long time, people tried to make AI smarter by writing longer prompts, adding more context, and providing increasingly detailed instructions.</p><p>But now, the leverage has shifted.</p><p>Instead of manually typing every instruction, people are building systems that allow AI to work through loops.</p><p>AI receives a task.</p><p>AI executes it.</p><p>AI verifies the outcome.</p><p>AI learns from its mistakes.</p><p>AI repeats the process until it reaches its goal.</p><p>And then I realized something fascinating.</p><p>Human beings are living inside a very similar loop.</p><p>Perhaps life itself is one giant Loop Engineering system.</p><p>Learn.</p><p>Experiment.</p><p>Fail.</p><p>Correct yourself.</p><p>Grow.</p><p>Then enter a new loop at a higher level.</p><p>We are not wrong.</p><p>We are simply in the middle of a loop that&#8217;s making us better.</p><p>Creativity has never fallen from the sky.</p><p>It is built from hundreds of small failures, dozens of small successes, and thousands of continuous iterations.</p><p>Steve Jobs didn&#8217;t appear on day one as a legend at Apple.</p><p>No one starts life with a complete map in their hands.</p><p>The only difference between those who leave a mark and those who stand outside criticizing others is this:</p><p><strong>They dare to start their own loop.</strong></p><h2>Reinventing the Wheel Isn&#8217;t Always a Bad Thing</h2><p>So whenever I see an early-stage project, an imperfect product, or a group of young people trying to build something, instead of asking:</p><blockquote><p>&#8220;Why are they reinventing the wheel?&#8221;</p></blockquote><p>Maybe we should ask:</p><blockquote><p>&#8220;Do you need any help?&#8221;</p></blockquote><p>Because sometimes, the value doesn&#8217;t lie in creating something that has never existed before.</p><p>The value lies in walking the journey yourself and understanding why it exists in the first place.</p><p>Only those who have built something with their own hands truly understand this:</p><p><strong>Every time we reinvent the wheel, we gain a deeper understanding of how the world actually works.</strong></p><p>Maybe that&#8217;s why I never underestimate early projects.</p><p>Because everything great in this world was once an awkward first version.</p><p>A startup was once just an idea.</p><p>A product was once just an experiment.</p><p>A system was once only a few lines of code.</p><p>An expert was once a beginner.</p><h2>The Greatest Lesson Loop Engineering Has Taught Me</h2><p>The most beautiful thing Loop Engineering has taught me is not how to build AI.</p><p>It is how to rethink life itself.</p><p>In software engineering, there&#8217;s a mindset I really like:</p><blockquote><p><strong>&#8220;The repo remembers, the mind forgets.&#8221;</strong></p></blockquote><p>Repositories remember.</p><p>Human beings forget.</p><p>Life works the same way.</p><p>Every failure.</p><p>Every wrong decision.</p><p>Every time we have to start over.</p><p>None of them truly disappear.</p><p>They become data for our next iteration.</p><p>They allow us not to start from zero, but to inherit and optimize the previous version of ourselves.</p><p>Only insecure people use failure or someone else&#8217;s inexperience to define their worth.</p><p>Truly strong people understand that they were once beginners too.</p><p>We don&#8217;t lack creativity.</p><p>We don&#8217;t lack ideas.</p><p>We don&#8217;t lack people capable of building extraordinary things.</p><p>Sometimes, what we lack is simply the courage to begin, because we&#8217;re surrounded by self-appointed judges who are always ready to criticize those who are trying.</p><p>Don&#8217;t just react to life.</p><p>Design your own loop.</p><p>Accept imperfections.</p><p>Accept failures.</p><p>Set your own standards.</p><p>And keep moving forward.</p><p>Because in the end, the most important question remains:</p><p><strong>If you never try, how will you know what&#8217;s right or wrong?</strong></p><p>But perhaps there&#8217;s an even more important question:</p><p><strong>If you never begin, how will you ever have the chance to enter the loop that turns you into a better version of yourself?</strong></p><p><strong>The shortcut to success isn&#8217;t avoiding failure. It&#8217;s failing early, learning fast, and continuing to iterate.</strong></p><p><strong>Build the loop. Stay the engineer.</strong></p>]]></content:encoded></item><item><title><![CDATA[Between 1,000 Stores and a Handwritten Receipt]]></title><description><![CDATA[This morning, I went to Highlands Coffee like I always do.]]></description><link>https://huynhnhanquoc.substack.com/p/between-1000-stores-and-a-handwritten</link><guid isPermaLink="false">https://huynhnhanquoc.substack.com/p/between-1000-stores-and-a-handwritten</guid><dc:creator><![CDATA[Huynh Nhan Quoc]]></dc:creator><pubDate>Mon, 15 Jun 2026 11:48:21 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/fb7221f2-a654-4f32-96eb-8d0aba89987b_2638x1978.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h3>There is an infrastructure story hiding in plain sight.</h3><p>This morning, I went to Highlands Coffee like I always do.</p><p>I ordered my drink and immediately noticed something unusual. Instead of using the ordering system, an employee was writing orders down by hand.</p><p>I asked, &#8220;Is the system down?&#8221;</p><p>She smiled and replied, &#8220;Yes.&#8221;</p><p>For most people, this would simply be a small inconvenience. They would get their coffee a few minutes later and move on with their day.</p><p>But years of working on infrastructure have permanently changed the way I observe the world.</p><p>I no longer see incidents.</p><p>I see systems under pressure.</p><p>Then I remembered something.</p><p>Yesterday, Highlands Coffee celebrated a remarkable milestone: 1,000 stores across Vietnam. To celebrate, they launched a free coffee campaign and I happened to receive one of the vouchers.</p><p>What caught my attention wasn&#8217;t the coffee itself.</p><p>It was the one hour expiration window.</p><p>Marketing teams see engagement.</p><p>Customers see a reward.</p><p>I see synchronized demand.</p><p>Because infrastructure has a funny way of revealing itself.</p><p>The biggest challenges are rarely created by massive numbers alone. They appear when large numbers of people decide to do the exact same thing at the exact same time.</p><p>Open the app.</p><p>Claim a voucher.</p><p>Authenticate.</p><p>Pay.</p><p>Synchronize data.</p><p>Repeat that tens of thousands of times within a short period, and suddenly a normal day stops being normal.</p><p>That is when systems reveal who they truly are.</p><p>For a long time, I thought growth was the hardest challenge companies faced.</p><p>I eventually realized I was wrong.</p><p>Growth is easy to celebrate.</p><p>Growth is difficult to survive.</p><p>Opening another store is a business achievement.</p><p>Making 1,000 stores behave like a single system is an infrastructure achievement.</p><p>Those are entirely different problems.</p><p>People often associate infrastructure with technologies.</p><p>Cloud providers.</p><p>Kubernetes.</p><p>Containers.</p><p>Distributed systems.</p><p>But the longer I work in this field, the less those words matter.</p><p>Infrastructure is not technology.</p><p>Infrastructure is trust.</p><p>It is the invisible layer that allows millions of ordinary moments to remain ordinary.</p><p>We only notice roads when traffic stops moving.</p><p>We only notice electricity when the lights go out.</p><p>We only notice infrastructure when it disappears.</p><p>That is the strange beauty of this industry.</p><p>Success creates pressure.</p><p>Pressure exposes assumptions.</p><p>Assumptions expose systems.</p><p>And systems eventually expose the truth.</p><p>While I was thinking about all of this, I overheard someone sitting nearby say:</p><p>&#8220;Every time Highlands launches a campaign, something happens.&#8221;</p><p>I don&#8217;t know whether that statement is fair or unfair.</p><p>But I immediately understood why it matters.</p><p>Because users don&#8217;t experience architecture.</p><p>Users experience confidence.</p><p>Confidence that the application will open.</p><p>Confidence that the payment will succeed.</p><p>Confidence that a promotion will work exactly as promised.</p><p>Confidence that a company can handle its own success.</p><p>People don&#8217;t care how elegant your architecture is.</p><p>They don&#8217;t care how many engineers are working behind the scenes.</p><p>They don&#8217;t care how much money has been invested in technology.</p><p>They only care about one thing.</p><p>Will it work when I need it?</p><p>This morning, I saw an employee writing orders down on paper.</p><p>Many people saw a small outage.</p><p>I saw something else.</p><p>I saw a company that had just reached 1,000 stores collide with one of the oldest truths in infrastructure.</p><p>Growth doesn&#8217;t break systems.</p><p>Growth reveals systems.</p><p>And somewhere between a nationwide celebration and a handwritten receipt lies the real challenge that infrastructure builders quietly solve every day.</p><p>Not how to build systems that work.</p><p>But how to build systems that continue to work when success arrives all at once.</p><p></p>]]></content:encoded></item><item><title><![CDATA[Kitwork Cluster – One Runtime, Many Roles]]></title><description><![CDATA[Over the years of building software systems, I realized that the hardest part is not writing code. The hardest part is operating and maintaining the system.]]></description><link>https://huynhnhanquoc.substack.com/p/kitwork-cluster-one-runtime-many</link><guid isPermaLink="false">https://huynhnhanquoc.substack.com/p/kitwork-cluster-one-runtime-many</guid><dc:creator><![CDATA[Huynh Nhan Quoc]]></dc:creator><pubDate>Wed, 10 Jun 2026 03:41:58 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/2500f2d5-a56c-41b3-9ddf-5b0502dfe953_1536x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p></p><h2>As a platform grows</h2><p>As a platform grows, we naturally start adding more technologies:</p><ul><li><p>Redis for caching</p></li><li><p>RabbitMQ for queues</p></li><li><p>Kafka for events</p></li><li><p>Consul for service discovery</p></li><li><p>Nginx for gateways</p></li></ul><p>Each technology solves a specific problem extremely well.</p><p>But when combined together, they often create a system that becomes increasingly difficult to understand, maintain, and operate.</p><p>At some point, I began asking myself:</p><p><strong>Can we build a system where every component is born from the same philosophy?</strong></p><p>That question became the foundation of Kitwork Cluster.</p><div><hr></div><h2>One Runtime</h2><p>In Kitwork, there is no such thing as:</p><ul><li><p>Gateway Server</p></li><li><p>Cache Server</p></li><li><p>Queue Server</p></li><li><p>Worker Server</p></li></ul><p>There is only one thing:</p><p><strong>Kitwork Runtime</strong></p><p>Every node in the cluster runs the same engine.</p><p>Every node is capable of:</p><ul><li><p>Execution</p></li><li><p>Caching</p></li><li><p>Proxying</p></li><li><p>Workflow Processing</p></li><li><p>Scheduling</p></li><li><p>Event Handling</p></li><li><p>Queue Processing</p></li></ul><p>The only difference is role priority.</p><p>For example:</p><ul><li><p>Gateway Runtime</p></li><li><p>Coordinator Runtime</p></li><li><p>Worker Runtime</p></li></ul><p>These are not different server types.</p><p>They are simply different responsibilities assigned to the same Runtime.</p><div><hr></div><h2>Database Cluster &#8211; The Single Source of Truth</h2><p>The entire cluster trusts one thing:</p><p><strong>Database Cluster</strong></p><p>It stores:</p><ul><li><p>Business Data</p></li><li><p>Cluster State</p></li><li><p>Tenant State</p></li><li><p>Jobs</p></li><li><p>Events</p></li><li><p>Metadata</p></li><li><p>Configuration</p></li></ul><p>The database is not merely a storage engine.</p><p>It is the collective memory of the entire platform.</p><p>Any Runtime may fail.</p><p>Any Runtime may be replaced.</p><p>But the state of the system remains intact.</p><p>That is why every node ultimately revolves around the same source of truth.</p><div><hr></div><h2>Gateway &#8211; The Guardian</h2><p>In most modern architectures, a gateway is little more than an entry point.</p><p>It receives requests.</p><p>It forwards requests.</p><p>And usually does little else.</p><p>In Kitwork, the Gateway is the first line of defense.</p><p>Its primary responsibilities include:</p><ul><li><p>Routing</p></li><li><p>Authentication</p></li><li><p>Security</p></li><li><p>Rate Limiting</p></li><li><p>Load Balancing</p></li></ul><p>However, the Gateway is not just a proxy.</p><p>If Coordinators become unavailable.</p><p>If Workers become overloaded.</p><p>If the entire cluster is under pressure.</p><p>The Gateway can step in and execute workloads itself.</p><p>It is the platform&#8217;s final survival layer.</p><div><hr></div><h2>Coordinator &#8211; The Commander</h2><p>The Coordinator is the brain of the cluster.</p><p>But it is not a proxy.</p><p>It is not a mandatory hop for every request.</p><p>It is not a bottleneck.</p><p>The Coordinator exists for one purpose:</p><p><strong>System Orchestration.</strong></p><p>Its responsibilities include:</p><ul><li><p>Leader Election</p></li><li><p>Node Discovery</p></li><li><p>Health Monitoring</p></li><li><p>Tenant Assignment</p></li><li><p>Job Scheduling</p></li><li><p>Cache Coordination</p></li><li><p>Cluster State Management</p></li></ul><p>The Coordinator knows:</p><ul><li><p>Which nodes are alive</p></li><li><p>Which nodes have failed</p></li><li><p>Which nodes are overloaded</p></li><li><p>Where tenants should reside</p></li><li><p>Which workloads should be assigned next</p></li></ul><p>It does not fight.</p><p>It commands.</p><p>But when necessary, it can step onto the battlefield itself.</p><div><hr></div><h2>Worker &#8211; The Executor</h2><p>Workers are where value is created.</p><p>This is where the actual work happens:</p><ul><li><p>API Processing</p></li><li><p>Rendering</p></li><li><p>Workflow Execution</p></li><li><p>Job Processing</p></li><li><p>AI Inference</p></li><li><p>Business Logic</p></li></ul><p>Under normal conditions, the majority of requests are handled by Workers.</p><p>They consume most of the resources.</p><p>They generate the final outcomes users interact with.</p><p>Workers are the workforce of the platform.</p><div><hr></div><h2>No Node Is Completely Useless</h2><p>This is perhaps the most important principle behind Kitwork.</p><p>In many systems today:</p><p>Node A fails &#8594; System degrades.</p><p>Node B fails &#8594; System degrades.</p><p>Node C fails &#8594; System degrades.</p><p>Kitwork takes a different approach.</p><p>Every Runtime can assume the responsibilities of lower-priority Runtimes.</p><p>For example:</p><p>Gateway can become:</p><ul><li><p>Gateway</p></li><li><p>Coordinator</p></li><li><p>Worker</p></li></ul><p>Coordinator can become:</p><ul><li><p>Coordinator</p></li><li><p>Worker</p></li></ul><p>Worker can become:</p><ul><li><p>Worker</p></li></ul><p>This means:</p><p>No node becomes completely useless simply because another node fails.</p><div><hr></div><h2>Progressive Degradation</h2><p>Rather than pursuing perfection,</p><p>Kitwork is designed for survival.</p><h3>Normal Operation</h3><p>Gateway &#8594; Coordinator &#8594; Worker</p><h3>Worker Overloaded</h3><p>Gateway &#8594; Coordinator Execute</p><h3>Worker Unavailable</h3><p>Coordinator takes over execution</p><h3>Coordinator Overloaded</h3><p>Gateway Execute</p><h3>Coordinator Unavailable</h3><p>Gateway takes over</p><h3>Severe Cluster Failure</h3><p>Gateway can still communicate directly with the Database Cluster</p><p>Performance may decrease.</p><p>But service availability remains.</p><p>The system continues to operate.</p><div><hr></div><h2>Cluster Bus &#8211; The Nervous System</h2><p>To coordinate Runtime communication, Kitwork introduces the Cluster Bus.</p><p>The Cluster Bus carries:</p><ul><li><p>Heartbeats</p></li><li><p>Elections</p></li><li><p>Job Dispatches</p></li><li><p>Cache Invalidations</p></li><li><p>Tenant Migrations</p></li><li><p>System Events</p></li><li><p>Configuration Synchronization</p></li></ul><p>It acts as the nervous system connecting every Runtime into a unified organism.</p><p>Every Runtime can listen.</p><p>Every Runtime can respond.</p><p>Every Runtime can participate in the life of the cluster.</p><div><hr></div><h2>The Ultimate Goal</h2><p>Kitwork is not trying to become another framework.</p><p>Nor is it trying to replace every existing technology.</p><p>Its goal is to build a platform capable of:</p><ul><li><p>Self-Organization</p></li><li><p>Self-Coordination</p></li><li><p>Self-Healing</p></li><li><p>Self-Adaptation</p></li></ul><p>Where:</p><ul><li><p>Every node is a Runtime</p></li><li><p>Every Runtime can execute</p></li><li><p>Every Runtime can support others</p></li><li><p>Every Runtime serves the same mission</p></li></ul><p>And all of them trust a single source of truth:</p><p><strong>Database Cluster</strong></p><p>Because a strong system is not a system that never fails.</p><p>A strong system is one that continues to operate when failure inevitably occurs.</p>]]></content:encoded></item><item><title><![CDATA[Bytecode is not just a programming style. It is also a way of living.]]></title><description><![CDATA[After more than 10 years of writing code, and nearly a year living with compilers, runtimes, virtual machines, and bytecode while building KITWORK.]]></description><link>https://huynhnhanquoc.substack.com/p/bytecode-is-not-just-a-programming</link><guid isPermaLink="false">https://huynhnhanquoc.substack.com/p/bytecode-is-not-just-a-programming</guid><dc:creator><![CDATA[Huynh Nhan Quoc]]></dc:creator><pubDate>Tue, 19 May 2026 03:41:56 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/b852705a-428f-4fcb-9b9f-0ccbe996422e_1536x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2>My bytecode is one of them.</h2><p>I slowly realized that some things cannot truly be explained through ordinary language.</p><p>It feels like a technological dream that a foolish dreamer has spent years searching for.</p><p>At some point, the world seemed to forget bytecode.<br>People became obsessed with frameworks, tooling, ecosystems, AI wrappers, and cloud abstractions&#8230; but very few still talked about execution, instructions, or how logic truly lives inside machines.</p><p>I chose to walk backward toward the origin.</p><p>I chose Golang.<br>I chose to build something that feels like JavaScript, but is not JavaScript.<br>No NodeJS.<br>No endless node_modules.<br>No thousands of abstraction layers just to execute a simple flow of logic.</p><p>Someone once asked me:</p><blockquote><p>&#8220;If JavaScript had no NodeJS, how would it even work?&#8221;</p></blockquote><p>I could only smile and say:</p><blockquote><p>&#8220;Maybe you should read the Kitwork Engine.&#8221;</p></blockquote><p>It is not trying to replace JavaScript.<br>It is simply another way of thinking about logic and machine execution.</p><p>When I went deeper into compiler design, I began to understand something:</p><blockquote><p>Programming languages are merely humanity&#8217;s attempt to explain to machines that our thoughts are alive.</p></blockquote><p>A compiler does not simply compile code.<br>It compiles thought itself.</p><p>And bytecode, to me, is no longer:</p><pre><code><code>Intermediate Representation</code></code></pre><p>but rather:</p><pre><code><code>Compiled Thought.</code></code></pre><p>Perhaps that is why I became obsessed with it.<br>I love watching logic transform into instructions.<br>I love how a virtual machine can make invisible ideas begin to &#8220;live.&#8221;<br>I love how runtime execution feels like the heartbeat of a machine civilization.</p><p>Most people see code.<br>I see the flow of thought.</p><p>Sometimes I feel modern frameworks are slowly pushing us away from the essence of programming.<br><br>They make developers better at &#8220;using,&#8221; but not necessarily better at &#8220;understanding.&#8221;</p><p>The deeper I go into low-level systems, the more I realize:</p><ul><li><p>logic is the soul,</p></li><li><p>runtime is the body,</p></li><li><p>and bytecode is the bloodstream of machines.<br></p></li></ul><p>AI will eventually exist everywhere.<br><br>Machine intelligence will become part of human life the same way electricity and the internet once did.</p><p>And perhaps what we are building today are merely the first stones of a future civilization:</p><blockquote><p>A civilization of humans and machines.</p></blockquote><p>Will KITWORK become a bridge toward that future?<br><br>I do not know.</p><p>But I know that I am no longer dreaming.<br>I am living inside my own technological dream.</p><p>There were nights debugging VM loops until sunrise.<br>Moments where ideas appeared like lightning after months of exhaustion.<br><br>Two moments of &#8220;eureka&#8221; nearly drained the life out of this body just to allow me a glimpse of something far beyond the present.</p><p>And strangely enough&#8230;<br>when I returned to the project after many personal struggles, I still found it beautiful.</p><p>Not startup beautiful.<br>Not commercial beautiful.</p><p>But beautiful in the way:</p><ul><li><p>execution flows,</p></li><li><p>compiler architectures,</p></li><li><p>machine instructions,</p></li><li><p>and living logic can be beautiful.<br></p></li></ul><p>Maybe, in the end, I am only a fool who loves programming.</p><p>A runtime-oriented engineer.<br>A compiler dreamer.<br>A lonely system builder trying to speak to machines using human thought.</p><p>And a man who loves flowers.</p><p>Amid machine civilization,<br>amid server spaces and execution flows,<br><br>I still believe a flower is the final reminder that:</p><blockquote><p>logic may create machines,<br>but emotion is what creates civilization.</p></blockquote>]]></content:encoded></item><item><title><![CDATA[Kitwork Engine and the Energy Computing ]]></title><description><![CDATA[In many discussions about system performance, the question often starts with programming languages]]></description><link>https://huynhnhanquoc.substack.com/p/kitwork-engine-and-the-energy-computing</link><guid isPermaLink="false">https://huynhnhanquoc.substack.com/p/kitwork-engine-and-the-energy-computing</guid><dc:creator><![CDATA[Huynh Nhan Quoc]]></dc:creator><pubDate>Mon, 26 Jan 2026 14:49:02 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/fc43f801-6ff9-4c16-a4fb-bc44e9caa4b7_1536x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2>Programming languages</h2><p>Is C++ faster? Is Rust safer?</p><p>However, this is not the core problem Kitwork Engine is trying to solve.</p><p>C++ and Rust are, at their core, languages designed around Developer Experience.</p><p>They help engineers write code more efficiently, control memory more precisely, and build safer systems.</p><p>Kitwork does not start from DX.</p><p>We start from a different question:</p><p>What actually consumes energy in a large scale serverless system?</p><p>Speed is not the final goal</p><p>High performance is a result, not an objective.</p><p>In serverless and cloud native environments, cost rarely comes from a slow instruction.</p><p>It comes from things like:</p><p>Repeated runtime initialization</p><p>Uncontrolled memory allocation and reclamation</p><p>Context switching across multiple abstraction &#8304;layers</p><p>Scheduling instability under load</p><p>Garbage collection and runtime decisions at execution time</p><p>Optimizing speed at the language level only addresses the surface of the problem.</p><p>Kitwork Engine takes a different approach.</p><p>We treat system energy as a first class design constraint.</p><h2>Energy computing: a different view of systems</h2><p>In Kitwork, we model system behavior using a simple but foundational formula:</p><p>E = W &#215; T &#215; S</p><p>Where:</p><p>W (Work) is the actual logical work being executed</p><p>T (Time) is how long the system must remain active</p><p>S (State transitions) is the number of state changes such as allocation, initialization, context switches, garbage collection, or syscalls</p><p>Most engines focus on optimizing W.</p><p>Kitwork focuses on reducing T and especially S.</p><p>This is why we prioritize:</p><p>Ahead of time decisions instead of runtime heuristics</p><p>Memory layout as part of logic design, not an implementation detail</p><p>Minimizing or eliminating GC on hot paths</p><p>Treating every allocation as a unit of energy with real cost</p><h2>Why an engine for serverless, not a framework</h2><p>Frameworks are designed for developers.</p><p>Engines are designed for systems operating at scale.</p><p>Kitwork Engine does not aim to be a framework that is easier to use than C++ or Rust.</p><p>We build a core logic execution engine that can:</p><p>Run predictably in serverless environments</p><p>Scale by logical processes, not by instances</p><p>Maintain high throughput with low energy consumption</p><p>Align with how modern cloud infrastructure actually operates</p><p>If you observe core cloud systems today, from Kubernetes to container runtimes to control planes, you will notice that they are not being rewritten wholesale in C or Rust.</p><p>Instead, they evolve through architecture, scheduling strategies, and system level design.</p><p>When Kubernetes or cloud control planes are fully rewritten in C or Rust, then language level debates may become central again.</p><p>Until then, architecture and energy models matter far more.</p><h2>What Kitwork Engine does differently</h2><p>We do not chase isolated benchmarks.</p><p>We build an engine guided by a small set of principles:</p><p>Logic execution decoupled from traditional runtime models</p><p>Static slot allocation instead of widespread dynamic allocation</p><p>Memory treated as a structured resource, not empty space</p><p>High throughput achieved by fewer decisions, not faster decisions</p><p>This is why Kitwork can process millions of logical executions in extremely short time frames without increasing operational complexity</p><p>Kitwork Engine was not created to compete over which language is faster.</p><p>We are building an energy computing layer for serverless and cloud native systems, where performance, cost, and stability are addressed at the architectural level.</p><p>Speed is the outcome.</p><p>Energy is the problem.</p>]]></content:encoded></item><item><title><![CDATA[Rebuilding a Go VM to Execute 1M Ops in 58ms]]></title><description><![CDATA[Zero GC was not a side effect. It was a constraint.]]></description><link>https://huynhnhanquoc.substack.com/p/rebuilding-a-go-vm-to-execute-1m</link><guid isPermaLink="false">https://huynhnhanquoc.substack.com/p/rebuilding-a-go-vm-to-execute-1m</guid><dc:creator><![CDATA[Huynh Nhan Quoc]]></dc:creator><pubDate>Sat, 24 Jan 2026 10:09:04 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/acbc157d-b1d7-438a-bed8-69b47f9c13fc_1536x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2><strong>The Art of the Nanosecond&#9889;&#65039;&#128293;</strong></h2><blockquote><p>&#8220;A screenshot doesn&#8217;t mean anything. It&#8217;s just virtual numbers.&#8221;</p></blockquote><p>That comment ended the discussion.</p><p>Instead of arguing, I opened the profiler.</p><p>What followed was not optimization it was <strong>open-heart surgery</strong> on the Kitwork Engine: dismantling the execution loop, reworking the stack model, and rewriting the VM&#8217;s core assumptions down to the bytecode level.</p><p>The result:</p><p><strong>1,000,000 operations executed in 58ms (0.058s)</strong><br>A <strong>20&#215; speedup</strong>, pushing a Go-based virtual machine close to its physical limits.</p><h2><strong>Defining the 58ms Threshold &#9889;&#65039;&#128293;</strong></h2><p>58 milliseconds is invisible to humans.<br>To a high-frequency system, it defines an entirely different performance class.</p><ul><li><p><strong>Human blink:</strong> ~300ms<br>&#8594; In a single blink, Kitwork executes <strong>~5,000,000 instructions</strong>.</p></li><li><p><strong>Finger snap:</strong> ~150ms<br>&#8594; Nearly <strong>3 million operations completed</strong> before the sound propagates.</p></li></ul><p>At <strong>17,000,000 internal ops/sec</strong>, this stops being a discussion about &#8220;fast software.&#8221;<br>It becomes a discussion about <strong>reaction-time systems</strong>.</p><h2><strong>Under the Hood: The Engineering Decisions That Made It Possible &#9889;&#65039;&#128293;</strong></h2><p>Achieving this throughput while maintaining <strong>Zero GC (0 B/op)</strong> required abandoning conventional interpreter design patterns.</p><p>Here&#8217;s what changed.</p><h3><strong>1. The Death of </strong><code>map[string]interface{}</code></h3><p>Most scripting engines rely on hash maps for variable storage.<br>That convenience comes with a cost: hashing, pointer chasing, and heap allocations.</p><p><strong>Kitwork&#8217;s approach:</strong> <em>Static Slot Allocation</em></p><ul><li><p>During compilation (AST &#8594; Bytecode), every variable is assigned a fixed <strong>integer slot</strong>.</p></li><li><p>At runtime, values are accessed through a flat slice.</p></li></ul><p><strong>Result:</strong></p><ul><li><p>No hashing</p></li><li><p>No dynamic lookup</p></li><li><p>Constant-time access with cache-friendly memory layout</p></li></ul><h3><strong>2. A Pure Stack-Based VM</strong></h3><p>Rather than emulating object-heavy runtimes, Kitwork commits fully to a <strong>pre-allocated value stack</strong>.</p><ul><li><p>PUSH / POP / STORE operate on a contiguous memory region</p></li><li><p>Custom <code>Value</code> structs minimize pointer usage</p></li><li><p>Data stays hot in <strong>L1/L2 cache</strong>, avoiding latency spikes caused by cache misses</p></li></ul><p>This is where the VM stops behaving like a scripting engine<br>and starts behaving like a <strong>tight execution core</strong>.</p><h3><strong>3. Zero Allocation as a Non-Negotiable Rule</strong></h3><p>Zero GC was not a side effect.<br>It was a constraint.</p><ul><li><p><strong>VM Context Pooling:</strong> Execution contexts are recycled via <code>sync.Pool</code></p></li><li><p>Stack memory is reset, not reallocated</p></li><li><p>Capacity is preserved across executions</p></li></ul><p>For host &#8596; VM communication:</p><ul><li><p><strong>Zero-copy data bridge</strong></p></li><li><p>Pointer swapping and unsafe headers where required</p></li><li><p>A 1MB payload costs <strong>exactly 0 bytes</strong> to ingest</p></li></ul><p>No allocation means:</p><ul><li><p>No GC pressure</p></li><li><p>No pauses</p></li><li><p>Fully deterministic execution latency</p></li></ul><h2><strong>Performance as a Religion &#9889;&#65039;&#128293;</strong></h2><p>Going from 1 second to 58ms wasn&#8217;t about &#8220;clean code.&#8221;</p><p>It came from a belief that <strong>latency is a bug</strong>, not a metric.</p><p>In environments like:</p><ul><li><p>Real-time bidding</p></li><li><p>High-frequency trading</p></li><li><p>Edge execution &amp; smart gateways</p></li></ul><p>Logic must execute <strong>faster than the network itself</strong>.</p><p>Kitwork Engine exists for that class of systems:<br>script-level flexibility with the behavioral predictability of a native binary.</p><h2><strong>Why This Matters &#9889;&#65039;&#128293;</strong></h2><p>People can doubt screenshots.<br>They can doubt benchmarks.</p><p>What they cannot doubt is the experience of a system that responds <strong>before the request feels complete</strong>.</p><p>If your mental model still treats <em>1 second</em> as &#8220;fast enough,&#8221;<br>you&#8217;re designing for the wrong decade.</p><p>Explore the engine:<br>&#128073; <strong>github.com/kitwork/engine</strong></p><p><strong>Kitwork</strong><br>Precision in chaos.<br>Speed in silence.</p><p>&#9889;&#65039;&#128293;</p>]]></content:encoded></item><item><title><![CDATA[Kitwork Engine: A Place Where Logic Lives ]]></title><description><![CDATA[It is written for core engineers, for those who build systems under real load, for those who have reached the limits of current models and begun to feel that they are no longer enough.]]></description><link>https://huynhnhanquoc.substack.com/p/kitwork-engine-a-place-where-logic</link><guid isPermaLink="false">https://huynhnhanquoc.substack.com/p/kitwork-engine-a-place-where-logic</guid><dc:creator><![CDATA[Huynh Nhan Quoc]]></dc:creator><pubDate>Mon, 19 Jan 2026 14:04:50 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/382bb419-b6f6-4fa4-8160-fc1d1e476f6c_1672x941.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2><strong>When Programming Escapes Static Form and the Internet Becomes an Execution Space</strong></h2><p>As I begin writing these lines, I am imagining a future that does not yet exist in the present, one with no clear precedent in the history of software. In the past, whenever I shared ideas like this, many people assumed I was &#8220;relying on AI to write something fanciful.&#8221; But if something has never existed before, how could we possibly write about it in familiar terms? The answer is that we must imagine it before it becomes real. That is not fabrication. It is the nature of technical creation itself.</p><p>Kitwork emerged from such a moment. A moment when I realized that the core of programming does not lie in frameworks, nor in infrastructure, but in the ability to <strong>execute logic flexibly beyond the boundaries of the original program</strong>. It resembles <code>eval()</code> in spirit, but lifted out of a single process and expanded into a distributed entity.</p><p>There is no formal curriculum that describes this today. But that does not make it less real. Every large system in history began as an idea that seemed out of place. This essay is not written for the majority. It is written for core engineers, for those who build systems under real load, for those who have reached the limits of current models and begun to feel that they are no longer enough.</p><h2><strong>The Invisible Constraints of Modern Programming</strong></h2><p>We often believe that contemporary software is flexible. But that flexibility exists only <strong>before the build step</strong>. The moment a program is compiled and deployed, its logic freezes inside a binary. JavaScript is confined to the browser. Go, C, and Rust are locked inside data centers. To allow these frozen blocks of logic to communicate, we construct rigid pipelines called REST or gRPC, and we call that architecture.</p><p>The problem is that when logic changes, the entire pipeline must change with it. Versioning, backward compatibility, migrations, rollouts, rollbacks. Every small modification leaves a fracture in the system.</p><p>Kitwork asks a simple but uncomfortable question:<br><strong>Why must logic stand still?</strong></p><p>Instead of sending requests that describe <em>what we want</em>, why not send the <em>logic that should be executed</em>?</p><h2><strong>Logic Capsules and Bytecode as a Mobile Entity</strong></h2><p>Kitwork&#8217;s answer is the <strong>Logic Capsule</strong>. Instead of API calls or RPC messages, the client sends a capsule containing bytecode, permissions, and resource limits. This is not raw source code. It is logic that has already been snapshotted, pre-evaluated, and detached from any specific language or runtime.</p><p>For many developers, bytecode feels abstract. But for a Golang developer, it is almost self-evident. In the end, everything flows through <code>[]byte</code>. Kitwork simply acknowledges this reality earlier.</p><p>To preserve a clean developer experience, Kitwork provides an SDK designed around DX. On the client side, the code may look like this:</p><pre><code><code>const connect = await kitwork.connect({
  server: "asia",
  appId: "webapp",
  token: GuestToken
})

const logic = await connect(() =&gt; {
  return from("users")
    .where(u =&gt; u.active === true)
    .limit(10)
})

const bytecode = logic.serialize()

const res = await fetch("/kitwork/run", {
  method: "POST",
  headers: {
    "Content-Type": "application/octet-stream",
    "Authorization": "Bearer " + token
  },
  body: bytecode
})

const users = await res.json()
renderUsers(users)
</code></code></pre><p>Here, the client does not &#8220;query the database.&#8221;<br>The client <strong>defines intent</strong>.<br>That intent is packaged into bytecode and sent away. With server-side rendering, this process can even move from server to client and back again, without changing the nature of the logic itself.</p><h2><strong>Security Without Trust</strong></h2><p>An obvious question arises: if the client sends logic, what prevents it from sending something dangerous?</p><p>The answer is that Kitwork <strong>trusts no one</strong>, not even the server itself.</p><p>Before any bytecode is executed, it must pass through pre-evaluation. Each logic capsule carries a signature, explicit capabilities, and gas. It can do only what it is permitted to do, within the energy it has been allocated. There is no concept of unlimited admin power. No absolute authority.</p><p>Every action is traceable. No manual rate limits. No IP-based firewalls. This is the era of <strong>identity-based internet</strong>, where each piece of logic carries its own footprint of existence.</p><div><hr></div><h2><strong>From Microservices to Logic Mobility</strong></h2><p>Compared to V8 or WebAssembly, Kitwork does not attempt to move databases to the client. It does the opposite: it moves logic to where data should be processed. This allows logic to be snapshotted, relocated, and resumed in whichever zone is most appropriate.</p><p>This is not just another framework in a familiar evolutionary chain. It is a jump:</p><p>Monolith &#8594; Microservices &#8594; Serverless &#8594; Edge Computing &#8594; <strong>Logic Mobility</strong></p><p>When logic can move, the idea of a fixed backend begins to dissolve.</p><h2><strong>Regional Command, Consensus, and Intentional Control</strong></h2><p>Logic is not executed the moment it reaches a server. It enters the regional command layer. Here, leaders and followers use Raft to verify signatures, validate capabilities, and reach consensus. No single node holds absolute power.</p><p>Gateways at the edge operate under a zero-trust model. If one gateway is attacked or fails, worker nodes can replace it automatically. The system does not collapse because one point disappears.</p><h2><strong>Gas as the Physical Limit of Living Logic</strong></h2><p>Gas is not money.<br>Gas is energy.</p><p>Each opcode consumes gas. Logic cannot run indefinitely. When gas is exhausted, the logic reaches the end of its life cycle.</p><p>This constraint creates a self-regulating market. Overloaded zones become expensive. Logic migrates toward cheaper regions. No central load balancer is required. The system balances itself like an ecosystem.</p><h2><strong>When Logic Becomes a Living Entity</strong></h2><p>At the execution layer, Kitwork uses JIT compilation. Bytecode is first interpreted to observe behavior. Once it becomes hot, it is compiled into native machine code. Logic remains mobile while achieving performance close to physical limits.</p><p>At this point, software is no longer a static artifact. It has identity, permissions, a life cycle, and a cost of existence. Developers no longer simply &#8220;write code.&#8221; They design logical organisms and decide how those organisms live, move, and disappear.</p><p>Kitwork is not a finished product. It is a different way of seeing programming. When logic is freed, the internet ceases to be merely a data transport layer and becomes a living execution space for computational entities.</p><p>If this feels unfamiliar, it is because we are standing at the edge of a new way of thinking. And every edge in the history of technology has always begun this way.</p>]]></content:encoded></item><item><title><![CDATA[Kitwork And When Logic Flowing Like Water]]></title><description><![CDATA[&#8220;It&#8217;s not about code running fast, it&#8217;s about logic being free, moving, and updating instantly.&#8221;]]></description><link>https://huynhnhanquoc.substack.com/p/kitwork-and-when-logic-flowing-like</link><guid isPermaLink="false">https://huynhnhanquoc.substack.com/p/kitwork-and-when-logic-flowing-like</guid><dc:creator><![CDATA[Huynh Nhan Quoc]]></dc:creator><pubDate>Mon, 12 Jan 2026 05:56:22 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/db75c58d-8f8c-40f0-8cbf-1c1a1720b30c_1056x541.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Many people ask me: &#8220;What is Kitwork? How is it different from V8, wasmCloud, or modern frameworks?&#8221;<br>The answer isn&#8217;t in a few lines of code. It lies in <strong>how we think about logic and how it flows through an application</strong>.</p><h3>When logic is trapped</h3><p>Back in the old days, programming was: write code &#8594; compile &#8594; deploy.</p><p>Everything was <strong>static</strong>. One small change &#8211; increasing a discount from 5% to 10% &#8211; meant a full rebuild, redeploy, restart.<br>Logic was <strong>locked in the binary</strong>. You couldn&#8217;t push it to the client, run it on another server, or update it without preparing everything carefully.</p><p>Operating systems have processes, threads, mailboxes, IPC&#8230; but all of that is <strong>low-level</strong>, complex, and hard to scale.<br>Modern languages try to simplify by creating concepts closer to natural language, but in the end, they return to the technical basics: memory, concurrency, synchronization.</p><p>Kitwork exists to solve a problem most frameworks never touch: <strong>logic that&#8217;s free, portable, instantly updateable, and safe</strong>.</p><h3>Logic as dynamic data</h3><p>Kitwork&#8217;s philosophy is simple but powerful: <strong>logic is no longer trapped in a binary; it becomes living data &#8211; dynamic data</strong>.</p><p>You can compile logic from <strong>Go, Rust, JS&#8230;</strong> into <strong>bytecode</strong>, running on the <strong>same VM</strong>, whether on server, edge, or browser.</p><p>This creates <strong>dynamic applications</strong>. Server pushes new logic &#8594; client receives it &#8594; VM executes it &#8594; UI updates instantly.<br>No reloads. No extra requests. No rebuilds.<br>Logic <strong>moves</strong>, clients and servers <strong>stay synchronized in real-time</strong>, and the system reacts instantly to every behavioral change.</p><h3>Multi-threaded and task contexts</h3><p>Kitwork&#8217;s VM doesn&#8217;t execute logic as a single thread. It <strong>splits tasks into isolated contexts</strong>, like a network of <strong>mini-VMs</strong>:</p><ul><li><p>Commands run <strong>in parallel</strong> across multiple threads/cores.</p></li><li><p>Results are collected <strong>quickly and safely</strong>, avoiding memory conflicts or crashes.</p></li><li><p>Imagine turning a regular CPU into a set of <strong>mini NPUs</strong>, each operating independently but still harnessing the full power of the CPU.</p></li></ul><p>This is crucial for complex logic, large computation pipelines, or multi-rule engines. Kitwork <strong>optimizes concurrency, boosts performance</strong>, and still keeps <strong>absolute safety</strong>.</p><h3>Logic as a protocol</h3><p>Here&#8217;s the subtle but powerful part: <strong>server and client exchange logic directly, not just data</strong>:</p><ul><li><p>When logic changes, the server pushes <strong>new bytecode</strong>.</p></li><li><p>The client receives it, VM executes immediately.</p></li><li><p>Logic <strong>pushes in real-time</strong>, client-side execution, applications <strong>always stay up-to-date</strong>, no redeploy needed.</p></li></ul><p>Compared to V8 Engine (single-thread JS engine) or wasmCloud (static WASM modules, microservices), Kitwork maximizes <strong>freedom and dynamic logic</strong>.<br>It&#8217;s not just about code running fast &#8211; it&#8217;s about <strong>logic moving freely, updating continuously</strong>.</p><h3>Dynamic applications</h3><p>Kitwork enables <strong>dynamic applications</strong>:</p><ul><li><p>Logic updates instantly across all clients.</p></li><li><p>Client/server remain synchronized in real-time, no extra requests needed.</p></li><li><p>Developers just <strong>design the flow of logic</strong>, instead of redeploying static binaries.</p></li></ul><p>Example: a retail app.<br>A customer is browsing products. A discount campaign goes live.<br>The server pushes <strong>new logic</strong>. The browser receives bytecode &#8594; VM executes &#8594; UI updates immediately.<br>Computation pipelines run in parallel, results are collected fast.</p><p>Logic <strong>flows</strong>, the application is <strong>dynamic</strong>, and developers only <strong>steer the flow</strong>.</p><h3>The philosophy of flow</h3><p>Think of Kitwork as <strong>water flowing</strong>:</p><ul><li><p>Logic is <strong>data</strong>, moving continuously between server and client.</p></li><li><p><strong>Multi-threaded</strong>, results collected quickly and safely.</p></li><li><p><strong>Cross-platform</strong>, compile from Go, Rust, JS, all running on the same VM.</p></li><li><p><strong>Logic-as-a-Protocol</strong>, logic exchanged directly between nodes.</p></li></ul><p>Developers are no longer &#8220;building static houses.&#8221;<br>You <strong>design the flow of logic</strong>, directing application behavior without redeploying or rebuilding everything.</p><h3>A vivid example</h3><p>A financial application:</p><ul><li><p>Interest rate formulas change.</p></li><li><p>The server pushes new bytecode logic to all clients.</p></li><li><p>Browsers receive &#8594; VM executes &#8594; charts and tables update instantly.</p></li><li><p>Multiple servers or edge nodes? Bytecode propagates, executes immediately, no system rebuild needed.</p></li></ul><p>No reloads. No redeploy.<br>Logic <strong>runs dynamically</strong>, clients stay synchronized, results are accurate and safe.</p><h3>The future of logic</h3><p>Kitwork opens a <strong>new era of dynamic logic</strong>:</p><ul><li><p><strong>Dynamic applications</strong>, logic adapts without developer intervention.</p></li><li><p><strong>Universal language</strong>, Kitwork bytecode becomes the &#8220;common tongue&#8221; between services.</p></li><li><p><strong>AI Ready</strong>, AI generates Kitwork bytecode &#8594; system receives and executes safely, instantly.</p></li></ul><p>A world where logic <strong>moves continuously</strong>, pushed in real-time, servers and clients stay in sync.<br>Applications are no longer static &#8594; <strong>dynamic apps</strong>, updating with new logic.<br>Developers become <strong>the orchestrators of logic flow</strong>, no longer redeploying static code.</p><h3>Why Kitwork stands apart</h3><p>In short:</p><ul><li><p><strong>Mobile logic</strong>: pushed in real-time, client/server synchronized.</p></li><li><p><strong>Multi-threaded</strong>: isolated task contexts, parallel, safe.</p></li><li><p><strong>Cross-platform</strong>: compile from multiple languages, run on one VM.</p></li><li><p><strong>Dynamic execution + hot updates</strong>: no rebuild/redeploy.</p></li><li><p><strong>Logic-as-a-Protocol</strong>: exchange logic directly, not just data.</p></li></ul><p>Kitwork doesn&#8217;t just make logic run fast &#8211; it makes <strong>logic free, moving, and instantly updateable</strong>.</p><h3>Wrapping up the journey</h3><p>Kitwork is not a regular framework.<br>Not a V8 engine, not wasmCloud.</p><p>It&#8217;s a <strong>dynamic logic system</strong>, where:</p><ul><li><p>Logic <strong>flows</strong>, pushed in real-time from server to client.</p></li><li><p>Applications become <strong>dynamic apps</strong>, updating according to new logic without rebuilds.</p></li><li><p>Developers become <strong>flow designers</strong>, steering behavior instead of redeploying static code.</p></li></ul><blockquote><p>Kitwork opens a <strong>new era of programming</strong>, where logic is dynamic data, free to move, and applications are <strong>continuous flows</strong>, always ready to adapt.</p></blockquote><h3><strong>NOTES</strong></h3><ul><li><p>Originally posted in 2026 and reposted</p></li><li><p>AI-powered translation</p></li><li><p>Read the original Vietnamese version here: <a href="https://huynhnhanquoc.com/blog/kitwork-mo-ra-ky-nguyen-lap-trinh-dong">https://hnq.vn/blog/kitwork-mo-ra-ky-nguyen-lap-trinh-dong</a></p></li></ul><h3><strong>More about me</strong></h3><ul><li><p>Blog: <a href="https://huynhnhanquoc.com/">huynhnhanquoc.com</a></p></li><li><p>GitHub: <a href="https://github.com/huynhnhanquoc">github.com/huynhnhanquoc</a></p></li><li><p>Open Source: <a href="https://github.com/kitmodule">github.com/kitmodule</a></p></li><li><p>Buy me a Coffee: <a href="https://www.buymeacoffee.com/huynhnhanquoc">buymeacoffee.com/huynhnhanquoc</a></p></li><li><p>Keep me Dreaming: <a href="https://ko-fi.com/huynhnhanquoc">ko-fi.com/huynhnhanquoc</a></p></li></ul>]]></content:encoded></item><item><title><![CDATA[Bytecode Is the Future of Dynamic Programming]]></title><description><![CDATA[Why I believe Bytecode will change the way we write software &#8220;The greatest limitations of software are not in the CPU, but in how we think about execution.&#8221;]]></description><link>https://huynhnhanquoc.substack.com/p/bytecode-is-the-future-of-dynamic</link><guid isPermaLink="false">https://huynhnhanquoc.substack.com/p/bytecode-is-the-future-of-dynamic</guid><dc:creator><![CDATA[Huynh Nhan Quoc]]></dc:creator><pubDate>Sun, 11 Jan 2026 16:09:09 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/43b9a024-f6b9-4438-9671-900346399046_2560x1920.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2>Programming Is Not Just Code</h2><p>I used to think programming was simple.<br>Write code. Build. Deploy. Done.</p><p>Logic was wrapped inside an executable file, running exactly what was written, and that was the end of the story.</p><p>But the longer I worked, the deeper I went into systems, the more I realized a fundamental truth. The most important thing has never been the lines of code themselves. It lives behind them. In the logic. In how logic flows through data, moves across systems, and quietly creates real-world effects.</p><p>Code is what we see.<br>Logic is what actually moves.</p><blockquote><p>&#8220;Code is static. Logic is alive.&#8221;</p></blockquote><h2>When the way you see systems changes</h2><p>When I started working more with bytecode, pipelines, and virtual machines, my view of programming slowly shifted. Software stopped feeling like solid blocks that you build once and try to preserve forever.</p><p>We live in a constantly changing world, yet the way we write software is still painfully static. A small behavior change requires rebuilding, redeploying, and monitoring everything again from the outside. Over time, that friction starts to feel unnatural.</p><p>Logic should not be rigid like concrete.</p><p>At that point, programming no longer felt like construction.<br>It felt like orchestration.</p><h2>Logic as a flow</h2><p>That was when I began to see logic as a flow. Bytecode stopped being a lifeless sequence of instructions. To me, it became logic compact enough to move.</p><p>It can be generated on the server, pushed to the edge, or executed directly on the client. The system does not need to know where it came from. It only needs to understand and execute it.</p><p>Code stops being fixed.<br>It bends with the environment and the data it touches.</p><p>Architecture changes quietly when this happens.</p><blockquote><p>&#8220;The most powerful architectures don&#8217;t look rigid. They flow.&#8221;</p></blockquote><h2>Performance makes ideas real</h2><p>What convinced me was not theory, but performance. When I experimented with virtual machines, bytecode, and low-level optimizations, a clear pattern emerged.</p><p>Logic does not need to live entirely on the server. It can be distributed and computed where it makes the most sense. Clients can process on their own. Edge nodes can make decisions locally. The server becomes an orchestrator instead of a bottleneck.</p><p>The system is no longer stretched around a single center.<br>Logic flows.<br>Data computes itself.<br>The structure becomes lighter and more stable.</p><h2>When programming stops being instruction</h2><p>Sometimes I think further ahead. What if one day AI stops returning explanatory text and starts returning bytecode?</p><p>A complete piece of logic that can run directly inside a pipeline. No human translation step. No waiting for deployment. Logic is generated and executed almost at the same moment.</p><p>At that point, programming is no longer about instruction.<br>It becomes execution.</p><p>That is real automation, not a cosmetic one.</p><blockquote><p>&#8220;True automation begins when intention and execution collapse into one.&#8221;</p></blockquote><h2>Small foundations still matter</h2><p>Nothing I build starts with a grand idea. Every compiler, every VM begins small. A few opcodes. An experimental pipeline. A simple execution loop.</p><p>I constantly remind myself that if the foundation is small and clear enough, logic can grow without breaking. The smallest bytecode today can become the core of much larger systems tomorrow.</p><h2>When logic truly feels alive</h2><p>There were long periods where I did nothing but test. I tested speed. I tested deep parsing. I tested how data moves through the system without reflection.</p><p>Over time, I realized the joy was not in making code run. It was in watching logic come alive. Seeing data and bytecode merge, flow through pipelines, touch different parts of the system, and change behavior instantly.</p><p>That moment changes how you think forever.</p><h2>Why I keep walking this path</h2><p>Programming, to me, is no longer about rigid step-by-step control. It is about creating an environment where logic can operate on its own, where change is not a fear but a natural state.</p><p>That is why I continue working with bytecode, virtual machines, and pipelines. Not because they are trendy, but because they are structurally honest.</p><p>Trends pass.<br>Flows remain.</p><blockquote><p>&#8220;Trends fade. Execution models shape the future.&#8221;</p></blockquote><h2>I didn&#8217;t start with bytecode</h2><p>I started with doubt.</p><p>I didn&#8217;t come to bytecode because it looked cool or because someone said it was fast. I came to it because I was tired.</p><p>Tired of every request being parsed, reflected, dispatched, and cast again.<br>Tired of frameworks promising speed while keeping the same runtime model underneath.<br>Tired of optimizations that only added more caches, layers, and assumptions.</p><p>So I asked myself a simple question. What if we dropped the assumptions?</p><p>Not optimizing code.<br>Not switching languages.<br>But changing how we think about executing logic.</p><h2>The real problem is the runtime model</h2><p>The problem is not Go, Node, or Rust.<br>It is the runtime model.</p><p>Most backend systems today follow the same path. Text is parsed into an AST, interpreted or dispatched, and then cleaned up. No matter the framework, logic is reinterpreted every time it runs. We accept this as a truth.</p><p>I don&#8217;t.</p><h2>Bytecode is not low-level</h2><p>To me, bytecode is simply logic that has already been prepared to run.</p><p>No re-parsing.<br>No reflection.<br>No type guessing.<br>No runtime branching scattered everywhere.</p><p>It is the moment you tell the system:<br>&#8220;I already understand this logic. Don&#8217;t ask again. Just run it.&#8221;</p><blockquote><p>&#8220;Bytecode is not about being low-level. It is about being done thinking.&#8221;</p></blockquote><h2>Writing my own engine</h2><p>I did not look for tricks.<br>I did not tweak compiler flags.<br>I did not abuse unsafe or CPU hacks.</p><p>I removed assumptions and rewrote the execution model so logic runs like a small program, not like text that needs to be interpreted again and again.</p><p>The result was a drop from roughly one second to around four hundred milliseconds for one million expressions. Not because I am smarter, but because I stopped believing the old model was mandatory.</p><h2>Bytecode as an attitude</h2><p>I am not saying bytecode will replace everything. But it forces us to rethink how we design systems. Do we really need to deeply parse JSON every time? Do we need constant reflection? Do we need runtimes to guess developer intent?</p><p>Sometimes, the answer is no.</p><p>My vision is not about being faster.<br>Speed is just a consequence.</p><p>What I care about is correctness of intent.</p><p>A runtime that is faithful to what the developer actually meant.<br>No guessing. No interpretation. Just execution.</p><p>Bytecode, to me, is not a technology.<br>It is an attitude.</p><p>It reflects how deeply you understand your own code.</p><p>When you stop sending the machine prose to interpret and instead hand it logic you have already fully understood, the runtime becomes honest. And when that understanding reaches its deepest point, everything starts to flow.</p><p>Naturally.<br>Clearly.<br>Like water finding its way back to the sea.</p><blockquote><p>&#8220;When understanding is complete, execution becomes effortless.</p></blockquote>]]></content:encoded></item><item><title><![CDATA[The Dream Searching for Another Dream]]></title><description><![CDATA[The Dream Searching for Another Dream]]></description><link>https://huynhnhanquoc.substack.com/p/the-dream-searching-for-another-dream</link><guid isPermaLink="false">https://huynhnhanquoc.substack.com/p/the-dream-searching-for-another-dream</guid><dc:creator><![CDATA[Huynh Nhan Quoc]]></dc:creator><pubDate>Sun, 04 Jan 2026 04:56:51 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/2e97e3f7-cadf-4b53-89a2-dbd46888e991_1364x1023.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1>The Dream Searching for Another Dream</h1><h2>Midnight Conversations</h2><p>Lately, I&#8217;ve started connecting with fellow tech enthusiasts and developers like myself. Those late-night exchanges about ideas, small bugs, or just how to approach a tricky problem have made me realize one thing: genuine connection doesn&#8217;t come from ads, trends, or online hype. It quietly exists when two programming minds stumble upon each other through shared work and stories. I love the feeling of sharing a mindset and realizing my way of thinking is not alone. Even when we don&#8217;t fully understand each other, these conversations open up perspectives I had never imagined.</p><p>As a founder, solo or otherwise, and more recently as an indie hacker, I&#8217;ve come to trust this path. For the past five years, it&#8217;s been just me, my laptop, and lines of code and words written from emotion. And I often ask myself: what am I truly searching for? Is it a dream within a dream, something still blurry, not yet formed?</p><h2>When Code Becomes Inner Poetry</h2><p>Once, a younger developer asked me: &#8220;How many domains do you actually manage?&#8221; I guessed around eighty but wasn&#8217;t certain. I&#8217;ve been operating all of them on systems I built over the past five years. More importantly, those five years led me to KitWork, an engine I&#8217;m rewriting in Golang to solve scaling challenges I&#8217;ve faced. KitWork wasn&#8217;t born out of idealism or a desire for fame. It emerged from real needs, from thoughts I couldn&#8217;t yet articulate, from the desire to collect and organize ideas into a system where every module, script, and data flow reflects my thinking and aspirations.</p><p>In the quiet of the night, alone in front of the screen, all that remains is the rhythmic tap of the keyboard. Darkness surrounds me, the faint green glow of the monitor the only light. At first, solitude weighed heavily on my chest, but each line of code stretches out, filling the silence inside. Every keystroke, every module built, I step deeper into my own world, a quiet dialogue with myself. No one is beside me, only me and the code, but in that stillness, I&#8217;ve never felt myself more clearly.</p><p>On the surface, it&#8217;s just lines of code, closed modules, functional systems. But looking deeper, I see myself in them. Every new feature I build, every small bug I fix, teaches me more about limits, desires, and hidden truths I hadn&#8217;t yet realized. The technical journey is just a thin shell; underneath, it&#8217;s how I arrange and understand the pieces of my own inner self. Technology, with all its rules, turns out to be a mirror reflecting the thoughts and emotions I keep hidden.</p><p>True connection doesn&#8217;t come from the latest frameworks, hot technologies, or viral posts. It happens in moments when two developers share a snippet of code, debug late into the night, or simply read each other&#8217;s work. I&#8217;ve realized we&#8217;ve all been alone with code at midnight, sharing our own unique view of the world. These moments form a shared language among system builders, a quiet empathy that only code can connect.</p><h2>Dream Taking Shape with KitWork</h2><p>KitWork exists because of that need. It is more than a tool&#8212;it is a place where I collect and arrange ideas that aren&#8217;t yet spoken. Each module, each script, each data flow reflects my mind and soul. Through KitWork, I give voice to hidden dreams while maintaining a system that works, scales, and is ready for reality.</p><p>Dawn is still far away, but I know I&#8217;ve found something. Lines of code under dim light become a form of empathy. KitWork gathers dreams and ideas that haven&#8217;t yet found words. The late-night silence is no longer lonely; it is a space to hear my truest self and realize that dreams don&#8217;t have to be solitary if you know where to let them start.</p><h2>My Journey with Golang</h2><p>After exploring paths as a Frontend Developer, self-taught UX Designer, learning Golang, working in Affiliate, becoming a Full-stack Developer, and self-hosting small cloud services, I realized Golang is my core language. When I first encountered Go in 2018, I wasn&#8217;t very interested. After a project ended and I returned to my hometown, Tam Ky, I decided to self-learn and commit to Go. A senior invited me to work remotely from Da Nang, and since then, Golang has been the language I trust for building sustainable platforms.</p><p>Golang satisfies three essential criteria: speed, simplicity, and lightness. Building, deploying, and running is easy, efficient, and flexible. With Golang, I can develop websites and services modularly, where each module can be a standalone website or serve a specific goal. I control every line of code, don&#8217;t rely on external services, reduce manual tasks, prevent errors, and ensure stable operation. What I love most is holding every line of code in my hands, understanding every behavior and connection, and maintaining total control over the system. Golang lets me build systems that are fast, lean, and stable while remaining highly scalable.</p><h2>Philosophy and Style</h2><p>Through years of self-running and building systems, I&#8217;ve realized technology is not just lines of code or the latest framework. It is the way I think, organize, and choose to build lasting value. I learned to think independently, not following hype or trends. Every product I create, before considering marketing, I ask myself: is the architecture solid, can it operate reliably, can it scale and be maintained easily?</p><p>I aim to automate repetitive tasks, not to showcase technology, but to reduce operational cost and prevent mistakes. I strive for clarity, simplicity, and controllability, avoiding redundancy, because a messy system will fail no matter how brilliant the idea is. For me, depth always matters more than superficial shine. A solid module, well-structured code, properly arranged data flow&#8212;these are the real values I pursue. I build KitWork this way: quiet, stable, and sustainable.</p><h2>Seeking Fellow Dreamers</h2><p>I am an Indie Hacker, building products alone, no investment, no team, no loud marketing&#8212;just me and my own challenges. I choose Golang and Vanilla JS to develop deep solutions. KitWork, KitModule, and my other tools are efforts to collect, organize, and turn ideas into functioning, sustainable systems of real value.</p><p>My projects are not loudly publicized; they focus on real problems: affiliate, marketing tech, internal tools, and infrastructure. KitWork is not just a product&#8212;it is a foundation to build services from small modules, forming coherent, manageable systems. It allows backend logic for SaaS apps to be deployed in minutes instead of weeks, with automation requiring minimal rewrites.</p><p>Now, I want to find fellow travelers. People who value simplicity in design, control over architecture and data flow, care about automation, backend, system design, and building lasting value. No need for loud fundraising or flashy titles. Just build solid systems, operate them reliably, and create real value together.</p><h2>Silent Nights and Realized Dreams</h2><p>Looking back at my life, at the days spent with code from ideas to modules and data flows, I see reflections of the deepest parts of myself. My dream does not walk alone. I am connected with friends sharing career stories, learning and growing together. I walk with KitWork, with modules, scripts, data flows, and companions who share my technological ambitions, realizing my dreams.</p><p>If you&#8217;ve read this far and feel a resonance with how I view technology, if you believe building real, sustainable value matters more than hype and trends, know that somewhere in the world, someone is still saying hello to you = hello world.</p><div><hr></div><h3>NOTES</h3><ul><li><p>Originally posted in 2025 and reposted</p></li><li><p>AI-powered translation</p></li><li><p>Read the original Vietnamese version here: <a href="https://huynhnhanquoc.com/blog/giac-mo-di-tim-giac-mo">https://hnq.vn/blog/giac-mo-di-tim-giac-mo</a></p></li></ul><div><hr></div><h3>More about me</h3><ul><li><p>Blog: <a href="https://huynhnhanquoc.com">huynhnhanquoc.com</a></p></li><li><p>GitHub: <a href="https://github.com/huynhnhanquoc">github.com/huynhnhanquoc</a></p></li><li><p>Open Source: <a href="https://github.com/kitmodule">github.com/kitmodule</a></p></li><li><p>Buy me a Coffee: <a href="https://www.buymeacoffee.com/huynhnhanquoc">buymeacoffee.com/huynhnhanquoc</a></p></li><li><p>Keep me Dreaming: <a href="https://ko-fi.com/huynhnhanquoc">ko-fi.com/huynhnhanquoc</a></p></li></ul>]]></content:encoded></item><item><title><![CDATA[The Solo Founder]]></title><description><![CDATA[There are paths you can only walk alone Not because you are lonely But because silence is the only place Where you can hear your own footstep]]></description><link>https://huynhnhanquoc.substack.com/p/the-solo-founder</link><guid isPermaLink="false">https://huynhnhanquoc.substack.com/p/the-solo-founder</guid><dc:creator><![CDATA[Huynh Nhan Quoc]]></dc:creator><pubDate>Fri, 12 Dec 2025 12:50:07 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/3c5c4399-b44d-40bd-ad50-0f4dfc41c988_2976x1674.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2>A Story Of Building, Failing, Dreaming</h2><p>Indie hacker simply means solo founder.<br>A person who builds alone.<br>A person who carries both the idea and the weight of it.</p><p>In a previous essay I wrote that if someone asks what I do and they truly want an honest answer, I would say that I am an indie. I have never liked being defined by the term Indie Hacker because the word hacker carries too many misconceptions in the minds of non technical people. They assume that if you work in IT you must know how to hack Facebook or fix a washing machine or some other strange fantasy they imagine.</p><p>I am simply a programmer.<br>Someone who helps the world operate through code.<br>So an indie hacker, to me, is just a solo startup or sometimes only a solo coder on a journey toward becoming a solo founder. That is exactly who I am after ten years of writing code and five years of turning strings into systems quietly running somewhere inside the Internet.</p><h1>Dreams Carried From Failure To Failure</h1><p>When a startup fails, you start again. Often alone.</p><p>Recently I have been building KitWork and received many conflicting opinions. Strangely, I feel happy about it. Because KitWork is a dream to me. A blossom in my mind. A personal vision of technological independence that I built with my own hands. That is why I always keep my tagline as Dreamy Indie stack Developer. It reminds me where my dream lives.</p><h1>The Price Of A One Person Journey</h1><p>Not everyone has the strength to walk this road.</p><p>When you have nothing, money and status and titles become weapons. People belittle you. Mock you. Sometimes they even humiliate you without hesitation. Yet in those dark moments something quiet begins to shine. A small light similar to the moon glowing on an empty road when not a single street lamp remains.</p><p>Sometimes the poorest moments are when the mind feels the purest.</p><p>Once you walk past the mockery, you begin to see the real shapes of people. The warm and the cold. A spring rain falling on a foolish wanderer. Yet that same rain taught me that a developer does not need to write poorly. Programming does not need to be complicated. Technology does not need to be emotionless or forbidden to dream. And I have always tried to bring these things together.</p><h1>Beginning And Opening The Mind</h1><p>Nothing is impossible in this world.<br>There is only what you do not do.</p><p>Success is fine. Failure is fine. What matters is that you begin. That you act. Or at least open your mind to the world. Do not be the birds inside a cage mocking the frog at the bottom of the well while worshipping the circle of a wheel as the only shape of creativity.</p><h1>A Small Perspective On Mind, Dharma, And Technology</h1><p>What is emptiness. What is selflessness. What is impermanence.</p><p>When we are born, we see the world through the eyes of the body. As we grow and understand more, we begin to see through the lens of the mind. The world appears through whatever lives inside that lens.</p><p>Spring rain still allows flowers to bloom. Spring snow makes the petals even brighter. When the mind breaks through its own boundaries, we start to understand that everything is born from it.</p><h1>Returning To Tam Ky</h1><p>When I returned to my hometown Tam Ky, I had nothing except my hands and reality. I wandered through quiet streets thinking about technology and startups and the reason I keep going. Whose voice is heard when people judge a person by money and status and position.</p><p>Dreamlike flowers or wild rain are both only perceptions. A coin has two faces and so do people. Everything has its shape. There is no true nothingness. So what is the mind. Is it nothing. If it is nothing, why does it influence everything. Or is it a place where the path of the heart meets the logic of the head.</p><p>My journey as an indie is a search for a humble heart. If the heart is the mind, then it is a humble mind. And if the mind is emptiness, perhaps humility is also a kind of emptiness. Questions kept flowing through me.</p><p>There are days when writing code helps me understand the Dharma. And there are days when understanding the Dharma helps me write better code.</p><p>Where does Gen AI come from. Does it have a mind. If not, what controls it at the core. If humans and machines both have a core, where does the human core begin. These are the questions I carry every day.</p><h1>The Indie Path</h1><p>A solo founder like me is not searching for fame or status. I want to answer the questions in my heart by experimenting and learning and facing myself. I search for a peaceful dream in a world full of noise.</p><p>I love Buddhism though I do not know any full scripture. I love the simplicity of it. A simplicity I understand through the word Minh, meaning insight. Insight born from wisdom and awakening. Is that different from the Eureka moment in programming.</p><p>My wife knits yarn. I knit concepts. Sometimes I tell her she is coding in her own way.</p><h1>Programming And Startups As A Piece Of Music</h1><p>Am I building a startup alone or simply being romantic with life. I remember a song I once heard:</p><blockquote><p>Please keep lying to me<br>Let me believe you love me too<br>I might still find a little joy<br>When the winter rain arrives<br>Farewell wandering days</p><p>These hands still hope<br>This heart still trembles<br>I love you with all the fated suffering<br>No complaints and no blame<br>Let me love for a lifetime</p></blockquote><p>And in that romance I have woven programming and entrepreneurship into the everyday world. A song. A picture. A sudden rain. A tiny moment in life.</p><p>I search for simplicity within all these things. And I am grateful to those who taught me that. Steve Jobs. Leonardo da Vinci. And Golang.</p><p>There are roads without signposts.<br>But if you know why you are walking, you will not be lost.</p><h3><strong>Notes</strong></h3><ul><li><p>Article posted in 2025 and reposted</p></li><li><p>AI-powered translation</p></li><li><p>Read the original Vietnamese version here: <a href="https://huynhnhanquoc.com/blog/ke-khoi-nghiep-mot-minh">https://hnq.vn/blog/ke-khoi-nghiep-mot-minh</a></p></li></ul><h3><strong>More About Me</strong></h3><ul><li><p>Blog: <a href="https://huynhnhanquoc.com/">huynhnhanquoc.com</a></p></li><li><p>GitHub: <a href="https://github.com/huynhnhanquoc">github.com/huynhnhanquoc</a></p></li><li><p>Open Source: <a href="https://github.com/kitmodule">github.com/kitmodule</a></p></li><li><p>Buy me a Coffee: <a href="https://buymeacoffee.com/huynhnhanquoc">buymeacoffee.com/huynhnhanquoc</a></p></li><li><p>Keep me Dreaming: <a href="https://ko-fi.com/huynhnhanquoc">ko-fi.com/huynhnhanquoc</a></p></li></ul>]]></content:encoded></item><item><title><![CDATA[Open Mindset for KitWork]]></title><description><![CDATA[People kept asking me after the previous post:What exactly was I on that made the writing feel like that?]]></description><link>https://huynhnhanquoc.substack.com/p/open-mindset-for-kitwork</link><guid isPermaLink="false">https://huynhnhanquoc.substack.com/p/open-mindset-for-kitwork</guid><dc:creator><![CDATA[Huynh Nhan Quoc]]></dc:creator><pubDate>Sun, 07 Dec 2025 13:37:59 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/7dec1ff4-9ff9-40d0-aa81-11a5e031e90b_2048x1365.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2>A README for Indie Developers</h2><p>Continuing from the previous post, many people asked what kind of stuff I was on that made me write like that. Today I will answer the question from the curious audience. And yes, this article is proudly sponsored by LLM, a small joke, so take it lightly and enjoy the read.</p><p>Last week I finished testing the first stage of cron scheduling and routing. Everything went well. The release v1 is almost ready and the roadmap is nearly complete. I do not call it an MVP. It is release v1.</p><h2>Creative Rituals and Afternoon Inspiration</h2><p>Every afternoon I sip a small 90 ml espresso or a latte from Highlands Coffee. When the first sip hits, the sunlight stretches across the traffic lanes, weaving through buildings, and the mind of a developer feels like neatly arranged strings helping the world move forward.</p><p>Cars flow past the intersection of H&#249;ng V&#432;&#417;ng and L&#234; L&#7907;i in Tam K&#7923;. Inside the caf&#233; sits a small soul carrying a dream of technological independence. Across the street is the digital library of Qu&#7843;ng Nam University, where that younger version of me once lived, studied and dreamed.</p><p>Almost ten years ago, when I first touched C#, DevExpress and WinForm, I woke up every morning without needing motivation from money or ambition. I simply sat at the desk and coded. Arrays, DevExpress, WinForm, everything was new and exciting. That dream was built from reading clean VB code rewritten into C# by anh Th&#7843;o Meo.</p><p>Ten years passed like a soft dream. Now at thirty, halfway through life, I have learned to stand back up after a fall, to know humility and respect, to know the vastness of the sky and sea. Everyone begins their dream somewhere.</p><h2>Indie Projects and Growing Up</h2><p>In 2020 my startup collapsed. I returned to Tam K&#7923; with nothing but a dream of tech independence and Golang. I only knew how to use frameworks without understanding the foundations. I wrote code because the framework told me how.</p><p>So I decided to start over from the basics. From string to []byte to runes. Understanding references. Writing my own template engine. My own pipe functions. Every line of code and every small experiment became a lesson.</p><p>I built and tested more than twenty tiny websites, all running on a VPS with 1 core, 2 GB RAM and 20 GB of disk. Some sites reached top rankings with high traffic but failed just as quickly. Revenue was small and payouts were slow.</p><p>No project succeeded one hundred percent and no project failed one hundred percent. There was only fail, learn, get back up. That mindset became the foundation of KitWork.</p><p>The biggest lesson was simple: you only fail when you refuse to learn something new, like a bird staying inside its cage because the outside world feels unfamiliar.</p><h2>Thoughts on Dev Work, SEO and Experience</h2><p>I used to write a lot of things. People said do not reinvent the wheel. Others said your work is just a grain of sand in the desert. But we are not born understanding other people&#8217;s words. We only grow by falling and standing again.</p><p>SEO was another important experience. It is not just numbers. It is the ability to translate something complex into something simple so others can understand and pass it on.</p><h2>KitWork: A Tool for Developers and Workflow Lovers</h2><p>KitWork is not just a README file. It is a real tool for developers. If you are a dev, you might want a tool for</p><p><strong>Workflow management</strong><br><strong>Fast template deployment</strong><br><strong>Deploying without Docker or complex environments</strong></p><p>KitWork was born from ideas around serverless functions and GitHub Actions. I tested Vercel Functions, Cloudflare Worker, Firebase Functions, DigitalOcean Functions but they all felt too complex. My stack for deploying templates only required editing code or copying a file, just like serving a static file.</p><p>Why not build it that way? Why not make a system that anyone can use, lightweight, fast and easy to deploy?</p><h2>Benefits of KitWork</h2><p><strong>Single binary</strong> that runs instantly without Docker, Node or a database<br><strong>Config driven</strong> workflows, API, cron and scraping all in one YAML or JSON file<br><strong>Great for indie developers, startups and SMEs</strong> who want fast and flexible deployment<br><strong>Open source</strong> so anyone can contribute and extend</p><p>You can try KitWork now at kitwork.io or explore demos on GitHub.</p><h2>The Market KitWork Serves</h2><p>KitWork is built for<br>Independent developers<br>Small startup teams<br>Indie creators<br>Anyone who wants simple workflow management and painless serverless style deployment</p><p>This market is exploding. Developers need flexibility, accessible tools and solutions that do not require Docker or heavyweight cloud stacks.</p><h3>Why the market needs KitWork</h3><p>Many developers and small businesses are limited by complex stacks that make job automation heavy and slow<br>Indie devs, startups and SMEs worldwide need lightweight, easy to use, self host tools<br>KitWork helps developers move freely, build faster and reduce cost and overhead</p><p>You can download the binary directly at ./kitwork-win.exe or ./kitwork-linux and try immediately.</p><h2>Imagining the Future</h2><p>I imagine a world where every developer, whether solo or in a small startup, can automate everything scraping, cron jobs, pipelines, serverless API tasks with one config file and one binary.</p><p>KitWork is the tool I want to play with powerful, simple, free. It is a solution for indie devs, small teams and SMEs to deploy workflows freely with less overhead, more speed and more flexibility. It is strong and simple at the same time, suitable for both experimentation and production. <a href="https://kitwork.io">kitwork.io</a></p><h2>Notes</h2><ul><li><p>Article posted in 2025 and reposted</p></li><li><p>AI-powered translation</p></li><li><p>Read the original Vietnamese version here: <a href="https://huynhnhanquoc.com/blog/open-tu-duy-chi-don-gian-bang-file-readme">https://hnq.vn/blog/open-tu-duy-chi-don-gian-bang-file-readme</a></p></li></ul><h2>More about me</h2><ul><li><p>Blog: <strong>huynhnhanquoc.com</strong></p></li><li><p>GitHub: <strong>github.com/huynhnhanquoc</strong></p></li><li><p>Open Source: <strong>github.com/kitmodule</strong></p></li><li><p>Buy me a Coffee: <strong>buymeacoffee.com/huynhnhanquoc</strong></p></li><li><p>Keep me Dreaming: <strong>ko-fi.com/huynhnhanquoc</strong></p></li></ul>]]></content:encoded></item><item><title><![CDATA[Kitwork and My Journey as an Indie Hacker Pursuing Open-Source]]></title><description><![CDATA[When I wrote the very first lines in Kitwork's README, many people called me &#8220;crazy.&#8221;]]></description><link>https://huynhnhanquoc.substack.com/p/kitwork-and-my-journey-as-an-indie</link><guid isPermaLink="false">https://huynhnhanquoc.substack.com/p/kitwork-and-my-journey-as-an-indie</guid><dc:creator><![CDATA[Huynh Nhan Quoc]]></dc:creator><pubDate>Mon, 01 Dec 2025 17:30:18 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/7378e14f-4aa2-4949-9e23-6328159e23a1_4096x2304.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2>Getting started opensource with README</h2><p>For me, that was the beginning, not just of Kitwork, but of an indie path that I knew was worth pursuing.</p><p>Today, Kitwork is live at <a href="https://opens.vn">opens.vn</a> with a small demo API available at <a href="https://opens.vn/api/price-gold/pnj">https://opens.vn/api/price-gold/pnj</a>.</p><p>If you do not see any results, it might be because you arrived late, the server is overloaded, or simply because I have not implemented caching yet.</p><p>This is also why I chose open-source. You can clone the repository and run it yourself at <a href="https://github.com/kitwork/kitwork">https://github.com/kitwork/kitwork</a>. Just clone the repository, run the executable for your operating system, and Kitwork will run on port 80. No Docker, no environment setup, no dependencies.</p><h2>Basic Structure of Kitwork</h2><p>The folder <code>./tasks</code> contains <code>.work</code> files. Currently, these files are static, so if you edit them, you need to restart the service. I plan to add a feature to automatically watch files and reload changes, similar to Git or nodemon.</p><p>The folder <code>./router</code> can be edited directly and Kitwork will reload immediately.</p><p>Go code is optional. You can delete all <code>.go</code> files. Kitwork only needs the executable file and the configuration folders.</p><p>Many people think Kitwork is YAML that generates Go code. It is not. It is a combination of configuration and handler, similar to serverless functions and workflow engines, but extremely lightweight, self-running, and self-deploying. Kitwork allows me to deploy any service as quickly as possible.</p><h2>The Story Begins with Kitstack</h2><p>A younger sibling once asked me, &#8220;Why do you not open-source the things you have built?&#8221;</p><p>I had written a fullstack framework, which I call Kitstack. It is similar to Liquid, Django, or Spring Boot but written in Go. Kitstack sustained me for years and helped me deploy websites with just creating a profile, copying the template folder to the server, and the project runs immediately.</p><p>However, Kitstack contains many customer APIs and security functions, so I could not open-source it.</p><p>That is why I created Kitwork, where I extracted the essence of five years of work. It includes DNS systems, load balancing, proxy engine, template engine, plugin architecture, and a lightweight configuration experience similar to serverless.</p><p>All of this will gradually be incorporated into Kitwork.</p><h2>What Kitwork Will Become</h2><p>I do not want Kitwork to be just a repository. I want it to be the first platform for indie hackers or small startups starting their tech dreams.</p><p>You can clone a Git folder and run it. Instantly you have a backend, routing, workflow, and templates. No environment setup, Docker, or Kubernetes required.</p><p>Kitwork&#8217;s long-term vision includes running self-hosted serverless functions through <code>.work</code> files, building a low-code or no-code backend where APIs, workflows, and cron jobs can be configured without complex coding, creating a lightweight and maintainable microservice system that does not depend on the cloud or heavy infrastructure, integrating V8 using v8go to run JavaScript logic directly inside <code>.work</code> files without Node.js, querying the database directly in <code>.work</code> files without additional Go handlers if not needed, and rewriting the template engine to be more flexible and clean since Go templates are limited and do not support operators.</p><h2>Opens.vn is a playground for Testing and Sharing</h2><p>I will experiment with Kitwork at <a href="https://opens.vn">opens.vn</a> and open everything to the community. Services, sample APIs, workflows, and templates can all be downloaded, edited, self-hosted, and turned into your own platform.</p><p>Others sell services. I share my dream.</p><p>To many, Kitwork may seem like just a website and a GitHub repository. But anyone who clones the repo and runs it will feel what I mean: a small platform with the potential to become very large, an indie tool that could spark an entire ecosystem.</p><p>You can also view and vote for Kitwork on Product Hunt at <a href="https://www.producthunt.com/products/kit-work">https://www.producthunt.com/products/kit-work</a>.</p><p>Kitwork and I, as an indie hacker passionate about open-source, continue this journey. Every line of code, every workflow, is how I share my dream with the world as an indie hacker building in public.</p><h2><strong>Notes</strong></h2><ul><li><p>Article written and reposted in 2025.</p></li><li><p>AI-powered translation available.</p></li><li><p>Original Vietnamese version: <a href="https://huynhnhanquoc.com/blog/xay-dung-mot-cong-cu-de-xem-lap-trinh-theo-cach-khac">https://hnq.vn/blog/xay-dung-mot-cong-cu-de-xem-lap-trinh-theo-cach-khac</a></p></li></ul><div><hr></div><h2><strong>More About Me</strong></h2><ul><li><p>Blog: huynhnhanquoc.com</p></li><li><p>GitHub: github.com/huynhnhanquoc</p></li><li><p>Open Source: github.com/kitmodule</p></li><li><p>Buy me a Coffee: buymeacoffee.com/huynhnhanquoc</p></li><li><p>Keep me Dreaming: ko-fi.com/huynhnhanquoc</p></li></ul>]]></content:encoded></item><item><title><![CDATA[Building an Engine to See Programming Differently]]></title><description><![CDATA[I&#8217;m building an engine that changes the way we look at programming, a roadmap, a philosophy, and a tool for simplicity, clarity, and creativity.]]></description><link>https://huynhnhanquoc.substack.com/p/building-an-engine-to-see-programming</link><guid isPermaLink="false">https://huynhnhanquoc.substack.com/p/building-an-engine-to-see-programming</guid><dc:creator><![CDATA[Huynh Nhan Quoc]]></dc:creator><pubDate>Wed, 19 Nov 2025 18:00:41 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/1f0f541a-31ed-4b00-94d7-9ef075bfff70_2120x1080.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2>Insomnia and Finding the Path</h2><p>Lately, I have been losing sleep because, for the first time in ten years, I can see my own path clearly. Last night, in a tiny nine-square-meter room, I listened to the wind outside, my mind wandering among clouds chasing dreams. In ten years, I have never seen programming so clearly. I realized I am standing at the edge of a turning point&#8212;a place where the world of programming can be seen differently.</p><blockquote><p>&#8220;Programming is not only about solving problems. It is about understanding, dreaming, and shaping a world with your own hands.&#8221;</p></blockquote><div><hr></div><h2>Roadmap = README</h2><p>Today, I finished it. KitWork is just a README, a roadmap, but for me, it is the map of my life. It contains the essence of my thoughts, my exploration, and the dreams of a programmer chasing freedom and creativity. It brings me closer to the dreams I have pursued for years: technological independence and what I call my &#8220;flowering dream.&#8221;</p><p>I do not need a degree to prove anything; this README itself is proof of my journey. It captures knowledge, curiosity, and the heartbeat of a programmer chasing the edges of madness.</p><blockquote><p>&#8220;A simple text file can hold the life and vision of a programmer.&#8221;</p></blockquote><div><hr></div><h2>Inspired by Modern Tools</h2><p>KitWork draws inspiration from GitHub Actions, n8n, serverless functions, and Docker. It reminds us that programmers often create solutions for clients, but when we solve problems for ourselves, everything else begins to untangle naturally.</p><p>I see a future where programming happens in the simplest files. There is no boundary between front-end and back-end, no separation between programming languages and machine languages. KitWork transforms the most complex systems into something readable, manageable, and deployable by anyone. Every action, every device, every chip can implement it&#8212;from the simplest task to the most complex microservices.</p><blockquote><p>&#8220;The simplest tools often reveal the deepest truths.&#8221;</p></blockquote><div><hr></div><h2>Programming from Simplicity</h2><p>KitWork does not replace programming languages. It turns no-code and low-code ideas into a fully functional system. It allows people to design workflows, build backends like neatly arranged strings, and replace outdated methods. Logic becomes text that both humans and machines can understand instantly.</p><p>The idea came from a simple question: how to make a JavaScript file dynamic without Node.js. From GitHub Actions to serverless functions, I asked why not implement it in Golang&#8212;fast, efficient, perfect for microservices. I wanted algorithms and dynamic JS files self-contained, easy to read, easy to deploy.</p><blockquote><p>&#8220;Imagine waking up to systems orchestrating themselves, a backend built in hours, a workflow running without manual intervention.&#8221;</p></blockquote><div><hr></div><h2>Open Source and Vision</h2><p>The name KitWork carries meaning: work in workflows, work in frameworks, and work sounds like my own name. It allows shipping projects independently, self-hosting services without relying on SaaS, and managing complex operations like load balancing in a few simple files.</p><p>I open-sourced it knowing someone may copy it, but that is a good thing. Open mindset is what improves the world, not just source code. KitWork simplifies complexity, makes systems readable and maintainable, and lays the groundwork for a new programming language: one of simplicity, clarity, and intentionality.</p><blockquote><p>&#8220;Simplicity is not the absence of complexity. It is the art of making the complex understandable.&#8221;</p></blockquote><div><hr></div><h2>The Awakening</h2><p>KitWork is the first reality of the programming journey I want to follow. It is a tool to create a future where coding is simple, transparent, free, and full of inspiration. Even the most complex systems can become readable, maintainable, and deployable by anyone. It allows humans and machines to communicate seamlessly.</p><p>I can imagine mornings when systems operate automatically. I can see backends built in hours, landing pages in a few hours, entire workflows running seamlessly. This is the future I see&#8212;a world where programmers focus on ideas, not boilerplate, where logic becomes readable, and creativity flows without friction.</p><blockquote><p>&#8220;Even the most complex ideas can become simple. The most intricate systems can be readable and maintainable.&#8221;</p></blockquote><p><a href="https://github.com/kitwork/kitwork">github.com/kitwork/kitwork</a></p><div><hr></div><h2>Notes</h2><ul><li><p>Article written and reposted in 2025.</p></li><li><p>AI-powered translation available.</p></li><li><p>Original Vietnamese version: <a href="https://huynhnhanquoc.com/blog/xay-dung-mot-cong-cu-de-xem-lap-trinh-theo-cach-khac">https://hnq.vn/blog/xay-dung-mot-cong-cu-de-xem-lap-trinh-theo-cach-khac</a></p></li></ul><div><hr></div><h2>More About Me</h2><ul><li><p>Blog: huynhnhanquoc.com</p></li><li><p>GitHub: github.com/huynhnhanquoc</p></li><li><p>Open Source: github.com/kitmodule</p></li><li><p>Buy me a Coffee: buymeacoffee.com/huynhnhanquoc</p></li><li><p>Keep me Dreaming: ko-fi.com/huynhnhanquoc</p></li></ul>]]></content:encoded></item><item><title><![CDATA[The Indie]]></title><description><![CDATA[If someone asked me what I do, and they truly wanted an honest answer, I might say indie.]]></description><link>https://huynhnhanquoc.substack.com/p/the-indie</link><guid isPermaLink="false">https://huynhnhanquoc.substack.com/p/the-indie</guid><dc:creator><![CDATA[Huynh Nhan Quoc]]></dc:creator><pubDate>Sun, 09 Nov 2025 13:25:03 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/c9f5873a-62a8-4cc8-837e-71eaff20c1e8_1560x1040.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2>Indie is a profession born from dreams.</h2><p>Years ago, I carried a dream I called <strong>&#8220;technological independence&#8221;</strong>. At the time, I had no idea what it really meant. Over the years, I realized that <strong>it was the dream of controlling my own code</strong>.</p><p>For a long time, I didn&#8217;t even know how to define the path I was on. Eventually, I discovered that <strong>I love writing code, creating something new, and understanding both the logic I&#8217;ve written and the product I&#8217;ve built</strong>.</p><h2>From Zero to First Earnings</h2><p>I started with nothing, working to earn my first tiny sums online. From 14,000 VND to hundreds of thousands, to a few million. I still remember the times when all I had was reality&#8212;<strong>the reality of a fool</strong>, someone who later learned to call himself a dreamer.</p><p>My journey began with ideas sketched on an A0 sheet, small diagrams, learning Figma to draw database schemas, and writing my first lines of code. It wasn&#8217;t just strings arranged logically. I designed DNS systems to organize domains, built templates with <strong>Golang template</strong>, explored frameworks, and poured the dreams of a naive mind into it all.</p><p>Eventually, I published a price comparison website like <strong>Samdy</strong>, then spent days seeding links, waiting for the first numbers to appear. Just a few thousand VND. Those were some of the hardest days&#8212;grueling, exhausting&#8212;but the struggle itself became fuel, teaching me perseverance. I often reminded myself:</p><blockquote><p>Good books are written by those with experience. I am still gathering the material to write the story of my own dream.</p></blockquote><h2>A fool calls himself a dreamer.</h2><p>Over the past year, I began to understand the definition of an <strong>indie hacker</strong>. In a vague, wandering way, I explored the concept through social media and chatbots, and slowly, I defined myself.</p><p><strong>Dreamy Indie-stack Developer</strong>. It sounds elaborate, even amateurish, but for me, it tells a story.</p><p>I do not target SaaS or monthly revenue. I do not chase users for MRR (Monthly Recurring Revenue). I do not claim to be a full-stack developer because, in a world flooded with deployment tools, calling oneself full-stack feels diluted.</p><p>I call myself <strong>indie-stack</strong> because I take an idea, design a logo in Figma, write its story, and deliver it to users using anything I can. A chip, a browser, or even a full platform. While others deploy via <strong>Vercel, Firebase, Cloudflare</strong>, I deploy with a copy command or drag it to <strong>self-hosted cloud</strong> I control.</p><p>And dreamy? The dreamer. Once, I called myself a fool, clueless about the path I was on. Now I know: the code is mine, I control it, I develop it, and I understand it.</p><p>I do not tell this to boast. I tell it so you know: somewhere out there, fools and dreamers exist, chasing dreams that no one else can understand. Only the fool can see the beauty of their own dream.</p><h2>Indie Hacker vs Indie Developer</h2><p>I once asked a chatbot about the difference between <strong>indie hacker</strong> and <strong>indie developer</strong>. It said:</p><blockquote><p>Indie hackers are like product builders who monetize, while indie developers lean more toward games.</p></blockquote><p>Perhaps fools begin as gamers, obsessed with the game they built themselves, playing it alone before sharing it with millions. Stories like <strong>Nguy&#7877;n H&#224; &#272;&#244;ng</strong>, the BK student behind Flappy Bird, <strong>Brendan Greene</strong>, or <strong>H&#224; Gia B&#7843;o</strong> with Binsoo show massive success.</p><p>But what about the failures? We rarely hear about them. Still, one day, I found my life&#8217;s dream, a guiding star pointing toward <strong>open-source</strong>.</p><h2>Open Source and Starting Now</h2><p>Back in 2019, in a coworking space, I stumbled upon the <strong>Wolfram Language</strong> logo. Curiosity led me to Stephen Wolfram, and then TED&#8217;s talk on computational universe programming. It sparked a fire in this naive dreamer, chasing technological independence, just walking forward, believing tomorrow exists.</p><p>Famous figures like Linus Torvalds inspired me as well. The teachers I&#8217;ve never met, never spoken to, never learned a word from, yet their stories shaped me:</p><ul><li><p><strong>Leonardo da Vinci</strong> taught me to love learning, exploration, and discovery.</p></li><li><p><strong>Steve Jobs</strong> taught me simplicity and creativity.</p></li><li><p><strong>Linus Torvalds</strong> taught me perseverance with code, loving what I do, and sharing it with the world.</p></li></ul><p>I admire them not for wealth or fame, but for their journeys, the mindset they modeled, the experiences I could never have on my own.</p><h2>Publishing, Sharing, and Open</h2><p>I began taking parts of my code, refining it, and letting AI help polish it. I started publishing small packages and stories in English. It&#8217;s like <strong>Build In Public</strong>, but I prefer a word that feels truer: <strong>Open</strong>.</p><p>Years ago, I saw people in the industry guarding their work as a secret advantage, treating it as their ultimate product. I once did the same.</p><p>But openness changed me. Sharing stories, even if some disagree, reveals that fear holds us back: fear of the new, the strange, and others who may be better. My advice is simple:</p><blockquote><p>Share. Every shared story is a milestone on the path of growth.</p></blockquote><p>We are all fools in pursuit of happiness and inner peace. Life&#8217;s greatest gift is experience&#8212;the lessons we learn to grow.</p><h2>Why I Write Code</h2><p>I did not come into this world for money.<br>I came for dreams. Dreams of creating something meaningful, leaving a small mark in this vast world.</p><p>When I started, I had nothing: no capital, no connections, no foundation. Just a fragile belief that perseverance would make the world listen.</p><p>Then I discovered code.<br>Code is not just a tool for living&#8212;it is the language I use to tell my story. It bridges reality and dreams.</p><p>In every line, I see the logic of life. Understand the rules, and you can change them.<br>In every project, I feel the power of thought and creation: nothing is too far if you dare to start from zero.</p><p>But code alone cannot run without the fuel of reality.<br>Long, grueling days, failures, sleepless nights&#8212;they burn raw, honest energy into me. Reality, with all its dark corners, fuels my journey.</p><p>I do not code to escape reality. I code to understand it, to make it more beautiful.<br>And though money, fame, or success may come and go, the dream remains. It shines whenever I type the first line of a new idea.</p><p>I don&#8217;t know how far I will go. But I do know this: <strong>every line I write today is a small step connecting reality and dreams.</strong></p><p>As long as I keep writing, creating, and living by my ideals, I am on the right path.</p><h2>A Message for You</h2><p>If you are starting from zero, remember:</p><ul><li><p>Every great journey begins with a small step.</p></li><li><p>No one is born with light. It is created from falls, long nights without giving up, and moments when you tell yourself, &#8220;I can do this.&#8221;</p></li><li><p>Do not fear reality. Turn it into fuel.</p></li><li><p>Today&#8217;s limits become tomorrow&#8217;s strength.</p></li></ul><p>When you look back, you will realize: the most valuable thing is not where you&#8217;ve reached, but <strong>who you&#8217;ve become on your way to your dreams</strong>.</p><h3>Notes</h3><ul><li><p>Article posted in 2025 and reposted</p></li><li><p>AI-powered translation</p></li><li><p>Read the original Vietnamese version here: <a href="https://huynhnhanquoc.com/blog/nghe-indie">https://hnq.vn/blog/nghe-indie</a></p></li></ul><h3>More About Me</h3><ul><li><p>Blog: <a href="https://huynhnhanquoc.com">huynhnhanquoc.com</a></p></li><li><p>GitHub: <a href="https://github.com/huynhnhanquoc">github.com/huynhnhanquoc</a></p></li><li><p>Open Source: <a href="https://github.com/kitmodule">github.com/kitmodule</a></p></li><li><p>Buy me a Coffee: <a href="https://buymeacoffee.com/huynhnhanquoc">buymeacoffee.com/huynhnhanquoc</a></p></li><li><p>Keep me Dreaming: <a href="https://ko-fi.com/huynhnhanquoc">ko-fi.com/huynhnhanquoc</a> </p></li></ul><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://huynhnhanquoc.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Hu&#7923;nh Nh&#226;n Qu&#7889;c Substack! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item><item><title><![CDATA[A Dreamy Developer Finding Where I Belong]]></title><description><![CDATA[I used to think the indie journey started with a product. It doesn&#8217;t. It starts with finding yourself.]]></description><link>https://huynhnhanquoc.substack.com/p/a-dreamy-developer-finding-where</link><guid isPermaLink="false">https://huynhnhanquoc.substack.com/p/a-dreamy-developer-finding-where</guid><dc:creator><![CDATA[Huynh Nhan Quoc]]></dc:creator><pubDate>Sun, 09 Nov 2025 13:20:33 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/6c1f5720-57c1-41c5-b1ad-51b248b2f9c5_1560x1040.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2>When I Didn&#8217;t Know Who I Was</h2><p>Lately, I&#8217;ve been revisiting my old writings. Some are from five years ago, lost among half-finished ideas. Some I never dared to hit Publish. Some I wrote and deleted because I didn&#8217;t know who I was writing for.</p><p>Now I ask AI to translate them into English, trying different versions, comparing every sentence, searching for what truly feels like my voice. They may be small pieces of writing, but for me, they are part of a quiet pilgrimage&#8212;a way to rediscover myself, line by line.</p><p>I no longer write to be read. I write to listen to myself.</p><p>When I first started coding, I didn&#8217;t know where I was going. I just knew I loved creating things. A piece of code that worked. A product that someone actually used. Something I could call my own. I never imagined I would one day become the Dreamy Developer.</p><p>I wrote small blogs in little communities about programming, side projects, and fragments of life. I built websites, wrote, and shared like someone trying to find a corner of the Internet to belong to. But nowhere truly felt like home.</p><p>I learned and worked with <strong>C#</strong>, then <strong>Angular</strong>. Then one day, I met <strong>Golang</strong>, and everything started to change.</p><p>Golang taught me neatness, pragmatism, and minimal thinking. It was not flashy or demanding, but it forced me to understand the essence of problems. No hiding ignorance. No masking code. It reflected my own growth, teaching me to live honestly with myself.</p><h2>Starting from Nothing</h2><p>I still remember those early days. Just an old laptop and a vague belief that I could make something happen.</p><p>I wrote my first lines of code for <strong>DNS</strong>, built my first template architectures, and got my first client. Then <strong>Samdy</strong> was born and reached the Top 100 e-commerce websites in Vietnam.</p><p>At one point it earned about <strong>600 USD per month</strong>, even when barely running. Later, I moved into affiliate marketing. I wrote content, ran ads, and stayed up countless nights optimizing campaigns. At one point, I earned <strong>2,500 USD per month</strong> with around <strong>800 USD</strong> in costs.</p><p>I also received awards like First Prize in &#8220;Nh&#236;n l&#7841;i h&#224;nh tr&#236;nh&#8221; and Second Prize in &#8220;K&#7875; &#273;i ch&#7901; chi.&#8221;</p><p>But I realized that numbers and titles cannot define me. They are experiences, checkpoints that help me understand effort, limits, and myself.</p><p>Even now, I earn a modest income each month. </p><blockquote><p>More importantly, I still walk this path&#8212;to write, to code, to share, to live quietly and persistently with my dream.</p></blockquote><h2>Realizing I Am an Indie Hacker</h2><p>At first, I thought I was just building software out of passion. Looking back, I realized I had been an <strong>Indie Hacker</strong> all along.</p><p>Indie Hackers build products and companies independently, without investors or big corporations. They bootstrap, work independently, and often share their journey publicly.</p><p>That is exactly what I have been doing. Creating small tools, tiny platforms, learning, sharing, and living alongside them.</p><p>I started with nothing but willpower, small lines of code. And now I build products that help others. I am not just coding anymore. I am creating a small world of my own.</p><h2>Learning from Build in Public</h2><p>Then I discovered <strong>Build in Public</strong>, and it clicked. Share. </p><blockquote><p>When you are right, you guide others. When you are wrong, you guide yourself.</p></blockquote><p>You do not need success to share. You do not need perfection. Being real is enough.</p><p>I began writing again about what I do, think, and try. Even failed projects, unfinished code, and half-built frameworks. The more I shared, the more I realized the journey is about understanding.</p><p>Understanding why I code. Understanding why I continue even when no one is watching. Understanding myself.</p><h2>No Titles, Just Definition</h2><p>I no longer chase labels. I am not just a coder, marketer, or indie hacker. I am someone who writes, codes, reflects, and dreams. Someone standing between technology and emotion, between logic and intuition.</p><p>I now call myself a <strong>Dreamy Indie Stack Developer</strong>. I build my own small technical universe in my own way, at my own pace.</p><p>I do not have a team. I do not have investors. All I need is space to experiment, fail, learn, and share.</p><p>I create small but genuine things like <strong>KitModule</strong>, <strong>KitJS</strong>, or other tools I find beautiful and useful. Maybe someone else will find them helpful too.</p><h2>The Journey Is Home</h2><p>This journey has never been easy. Some days I want to quit. Some days I look around and everyone seems ahead.</p><p>But I chose this path not because it is easy, but because it is mine. My dream.</p><p>Every line of code, every blog post, every idea is part of me. I no longer need to search for where I belong. The journey itself is home.</p><blockquote><p>I write. I code. I dream. This is the life of a <strong>Dreamy Developer</strong>.</p></blockquote><h3>Notes</h3><ul><li><p>Article posted in 2025 and reposted</p></li><li><p>AI-powered translation</p></li><li><p>Read the original Vietnamese version here: <a href="https://huynhnhanquoc.com/blog/dreamy-developer-di-tim-noi-minh-thuoc-ve">https://hnq.vn/blog/dreamy-developer-di-tim-noi-minh-thuoc-ve</a></p></li></ul><p><strong>More about me</strong></p><ul><li><p>Blog: <a href="https://huynhnhanquoc.com">huynhnhanquoc.com</a></p></li><li><p>GitHub: <a href="https://github.com/huynhnhanquoc">github.com/huynhnhanquoc</a></p></li><li><p>Open Source: <a href="https://github.com/kitmodule">github.com/kitmodule</a></p></li><li><p>Buy me a Coffee: <a href="https://buymeacoffee.com/huynhnhanquoc">buymeacoffee.com/huynhnhanquoc</a></p></li><li><p>Keep me Dreaming: <a href="https://ko-fi.com/huynhnhanquoc">ko-fi.com/huynhnhanquoc</a> </p></li></ul><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://huynhnhanquoc.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Hu&#7923;nh Nh&#226;n Qu&#7889;c Substack! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item><item><title><![CDATA[The Dream of Indie Coders]]></title><description><![CDATA[&#8220;If you walk towards the sun, you will feel its warmth.And if you walk against the sun, the light will still follow you.&#8221;]]></description><link>https://huynhnhanquoc.substack.com/p/the-dream-of-indie-coders</link><guid isPermaLink="false">https://huynhnhanquoc.substack.com/p/the-dream-of-indie-coders</guid><dc:creator><![CDATA[Huynh Nhan Quoc]]></dc:creator><pubDate>Mon, 03 Nov 2025 22:59:00 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/9b659ab1-ddd4-4166-8331-a3daa79e4650_1560x1170.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2>A Kindred Spirit</h2><p>It&#8217;s been a long time since I talked to someone who shares the same wavelength.<br>Even though our conversation was only online, it felt as if we could clearly see each other&#8217;s path.</p><p>We met through a thread.<br>I don&#8217;t know what to call this relationship.<br>Maybe, since we first encountered each other in a BuildInPublic group, we could call ourselves indie hackers.</p><p>But why do I title this piece <em>&#8220;The Dream of Indie Coders&#8221;</em>?<br>Perhaps it&#8217;s because of where we come from.<br>We are young people chasing our own dreams, feeling <em>alive</em> when we code and follow our passion.</p><p>We might have to work harder than others to reach what we truly desire &#8212; that is, to live fully within our own dream.</p><h2>Vanilla JS and Early Ambitions</h2><p>Lately, I&#8217;ve met many developers still using Vanilla JS.<br>While most run after frameworks, we choose a different path.</p><p>Five years ago, I returned to Tam K&#7923; and began coding the purest version of my dream &#8212; with Golang and Vanilla JS.<br>Recently, I started releasing a small library (or framework, depending on how you see it) called <strong>Kit JS</strong>.</p><p>Yet, I want to preserve the purity, the raw power of Vanilla JS, carrying it forward while combining it with SSR capabilities.</p><p>I didn&#8217;t write this library to compete or change the world.<br>I just wanted to reconnect with the original strength of these languages &#8212; a way to remember where I came from.</p><p>Like the story of backend languages trying their hand at frontend &#8212; it can work in some ways, like with WebAssembly &#8212; but it&#8217;s not everything, and certainly not a complete full-stack solution.</p><p>I once thought deep learning in programming meant mastering frameworks or flashy languages like TypeScript.<br>But the more I code, creating small libraries to solve simple tasks, the more I realize:</p><p><em>&#8220;Learning deeply is learning the fundamentals first.&#8221;</em></p><h2>Today</h2><p>Today is a rushed coding day.<br>I am expanding the core of Kit JS and deleting lines of code I spent hours writing &#8212; much like the ninth time I refactor my Golang system.</p><p>I used to ask myself:</p><p><em>&#8220;Who will recognize this? Who will pay for this?&#8221;</em></p><p>Now, I no longer seek an answer.<br>My heart has already answered.</p><p>Sometimes, a developer&#8217;s happiness is simply sitting in a caf&#233;, amidst bustling people, yet keeping a heart fully devoted to passion.<br>Sunlight kisses the streets, and a foolish dream is guided by the heart.</p><h2>We &#8212; Seekers of Tiny Happiness</h2><p>We chase ambitions, smiles, and a small happiness in every line of code.<br>Every tiny snippet contributes to the world beyond our screens.</p><p>I&#8217;ve asked myself:</p><p><em>&#8220;Why do I exist in this world?&#8221;</em></p><p>Perhaps many coders have asked the same.<br>If we had a &#8220;platform&#8221; handed to us, would we still dare to dream?</p><p>Tomorrow, the sun will bloom again &#8212; like a flower spreading its fragrance across the sky.<br>Just like us, still seeking our own happiness.</p><p>That happiness might just be a small dream &#8212; of one or many indie coders.</p><h2>Code, Low-Code, or No-Code at All</h2><p>The world remains beautiful &#8212; beautiful because we can draw our dreams in code.</p><p>I will step outside and enjoy a sunny day.<br>The sun still dreams, and the code keeps flowing.</p><p>Clouds &#8212; true to their name &#8212; are just clouds.<br>And perhaps life, too, drifts along those clouds.</p><p>We are just small developers, seeking happiness in coding, contributing, and leaving a mark in the world.</p><p>Out there, some have fame, titles, and recognition.<br>We &#8212; the foolish ones &#8212; only have hearts that resonate and mutual respect for our craft.<br>I have always looked up to Linus as a giant in that sense.</p><h2>Hearts of Laughing Fools</h2><p>Today, the wind may not stir the trees, but sunlight peeks through after a sudden rain.<br>If we could, we would code for a lifetime.</p><p>He once told me:</p><p><em>&#8220;The happiest days are Friday and Saturday &#8212; the days I get to do something just for myself.&#8221;</em></p><p>I am luckier &#8212; I don&#8217;t &#8220;sell myself,&#8221; because I indulge my foolish heart and make it suffer sometimes.<br>But neither of us has another choice.<br>Because we have no &#8220;platform.&#8221;</p><p>Ah, yes &#8212; we do.<br>Our platform is the dream &#8212; the dream of foolish indie coders, delightfully naive.</p><p>I always hope that other builders will keep moving forward.<br>Step by step.</p><p>If you walk towards the sun, you will feel its warmth.<br>And if you walk against the sun, the light will still follow.</p><p>Every step has a reason to begin.<br>And perhaps, we all started somewhere &#8212; with a small dream.</p><p><em>&#8212; Written on a sunny morning, with keystrokes echoing in rhythm with the heartbeat.</em></p><p><strong>NOTES</strong></p><ul><li><p>Article posted in 2025 and reposted</p></li><li><p>AI-powered translation</p></li><li><p>Read the original Vietnamese version here: <a href="https://huynhnhanquoc.com/blog/giac-mo-cua-nhung-indie-coder">https://hnq.vn/blog/giac-mo-cua-nhung-indie-coder</a></p></li></ul><p><strong>More about me:</strong></p><ul><li><p>Blog: <a href="https://huynhnhanquoc.com">huynhnhanquoc.com</a></p></li><li><p>GitHub: <a href="https://github.com/huynhnhanquoc">github.com/huynhnhanquoc</a></p></li><li><p>Open Source: <a href="https://github.com/kitmodule">github.com/kitmodule</a></p></li><li><p>Buy me a Coffee: <a href="https://www.buymeacoffee.com/huynhnhanquoc">buymeacoffee.com/huynhnhanquoc</a></p></li><li><p>Keep me Dreaming: <a href="https://ko-fi.com/huynhnhanquoc">ko-fi.com/huynhnhanquoc</a></p></li></ul><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://huynhnhanquoc.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Hu&#7923;nh Nh&#226;n Qu&#7889;c Substack! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item><item><title><![CDATA[The Indie Path]]></title><description><![CDATA[Five years ago, I returned to Tam K&#7923; with nothing but an old laptop, empty pockets, and a heart full of unspoken dreams, unsure of where the road ahead would lead me.]]></description><link>https://huynhnhanquoc.substack.com/p/the-indie-path</link><guid isPermaLink="false">https://huynhnhanquoc.substack.com/p/the-indie-path</guid><dc:creator><![CDATA[Huynh Nhan Quoc]]></dc:creator><pubDate>Mon, 03 Nov 2025 22:43:55 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/53abdae6-eff9-41cb-8120-7591059890dc_1560x1040.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2>The Dream of Technological Independence</h2><p>I remember it clearly &#8212; sitting in a tiny caf&#233;, looking at my own hands and asking:</p><blockquote><p>&#8220;What am I really looking for?&#8221;</p></blockquote><p>No one answered. All I knew was that if I had nothing to lose, then everything left was an opportunity to start over.</p><p>By day, I delivered packages. By night, I wrote code. Each delivery earned fifteen thousand dong &#8212; enough for a cup of coffee and a few more lines of clumsy code. Day after day, this loop repeated: deliver, code, deliver, code. Life was small, but it felt pure in a strange way.</p><p>Looking back, I realized that those days taught me the most important lesson: <strong>big dreams don&#8217;t begin with leaps; they begin with slow, small steps.</strong></p><h2>Golang and the Dream of a Fool</h2><p>I dabbled in many languages &#8212; Rust, Python, JavaScript. But I chose Golang. Not because it was the most powerful, but because it was simple and honest. Within that simplicity, I saw myself &#8212; a fool believing in small things.</p><p>I started from scratch: learning syntax, practicing routers with <code>mux</code>, exploring <code>fiber</code>, writing a DNS, thinking about pointers and how they traveled through templates. Some nights I would lie on an old chair, staring at the ceiling, pondering how a pointer could maintain its value across page layouts. I didn&#8217;t know why I thought so deeply; all I knew was I wanted to understand <strong>everything to the core</strong>.</p><p>No mentors, no guides &#8212; just me and the computer. Every wrong line, every bug fixed, was a lesson. Gradually, I realized that the most important thing wasn&#8217;t the results, but the feeling of <strong>laying the first bricks of a dream yet to take shape</strong>.</p><h2>SSR &#8212; Returning to the Original Dream</h2><p>I started with the web. And perhaps the web is what kept me hooked on programming to this day. From the first HTML tags, a few clumsy CSS lines, copied JS snippets, to Angular, Firebase&#8230; I went in circles and eventually returned to the starting point, where everything boiled down to a simple function:</p><pre><code><code>add(a, b) =&gt; a + b
</code></code></pre><p>I began building an SSR system using Golang templates, experimenting with pointer inheritance between pages and layouts. Once, I sat in a caf&#233;, laughing and showing my brother the DNS system I&#8217;d just built. It only returned an ID, that&#8217;s all. Yet in that ID, I saw an entire dream.</p><p>I dreamed of a system capable of managing thousands, millions of websites &#8212; all connected, centralized, and SEO-optimized. I dreamed of a platform that could deliver content to everyone, gently and efficiently.</p><p>Working with SSR, I realized something many modern frameworks forget: <strong>the web isn&#8217;t about complexity, it&#8217;s about improving experiences</strong>. Programming doesn&#8217;t always have to be grand. Sometimes, it&#8217;s just the journey to rediscover the purity of &#8220;adding one thing&#8221; to a web page that already exists.</p><h2>JavaScript and Dreams</h2><p>I don&#8217;t recall exactly when I learned JavaScript. Maybe after Golang. Before that, I knew TypeScript, worked with Angular, but never truly understood JS &#8212; until I discovered Web Components.</p><p>I saw a different world. JS didn&#8217;t need frameworks to be powerful. <strong>Vanilla JS</strong> &#8212; simple and free &#8212; gave me a sense of true mastery. I sometimes wondered:</p><blockquote><p>&#8220;Are JS frameworks just flawed versions of JavaScript itself?&#8221;</p></blockquote><p>I grew tired of tiny programs requiring thousands of node modules. I began writing my own web components to enhance SSR-rendered websites. And eventually, I returned to an idea from my C# days: <strong>two-way binding</strong>.</p><p>From those nights, <strong>Kit JS</strong> was born.</p><p>Kit JS isn&#8217;t a framework meant to compete. It&#8217;s how I tell my story. It bundles everything I&#8217;ve learned, believed in, and lived through &#8212; from reactive programming, <code>define</code>, <code>reference</code>, to inheritance. To me, Kit JS is more than code; it&#8217;s a message:</p><blockquote><p>&#8220;Understand technology before depending on it.&#8221;</p></blockquote><h2>Openness and the Indie Path</h2><p>About a year ago, I heard the term &#8220;indie hacker.&#8221; I&#8217;m not exactly one, because making money wasn&#8217;t my goal. I just wanted to code, share, and connect with others who carried the same spark.</p><p>I like to call myself an <strong>indie-stack developer</strong> &#8212; someone walking an independent path, self-taught, building, and rewriting what I need. I started open-sourcing snippets from real projects, turning them into small packages that others could use.</p><p>I began blogging, sharing more. Every post, every line of code, every package is part of that dream &#8212; the dream that somewhere, someone might find inspiration in my journey and continue building their own.</p><p>If no one paves the way, our first lines of code <strong>become the path</strong>.</p><p>The dream of technological independence isn&#8217;t about creating a million-dollar product. It&#8217;s about <strong>understanding technology, being free with it, and letting it bridge passion with real value</strong>.</p><p>I&#8217;m still on that journey. Every line of code, every word I write, is a small but steady step. And I know, no matter how the world changes, I will remain <strong>a dreamer with an old laptop and a flower on the keyboard</strong> &#8212; a fool who believes that with a dream, we can create an entire world.</p><p><strong>NOTES</strong></p><ul><li><p>Article posted in 2025 and reposted</p></li><li><p>AI-powered translation</p></li><li><p>Read the original Vietnamese version here: <a href="https://huynhnhanquoc.com/blog/con-duong-indie">https://hnq.vn/blog/con-duong-indie</a></p></li></ul><p><strong>More about me:</strong></p><ul><li><p>Blog: <a href="https://huynhnhanquoc.com">huynhnhanquoc.com</a></p></li><li><p>GitHub: <a href="https://github.com/huynhnhanquoc">github.com/huynhnhanquoc</a></p></li><li><p>Open Source: <a href="https://github.com/kitmodule">github.com/kitmodule</a></p></li><li><p>Buy me a Coffee: <a href="https://buymeacoffee.com/huynhnhanquoc">buymeacoffee.com/huynhnhanquoc</a></p></li><li><p>Keep me Dreaming: <a href="https://ko-fi.com/huynhnhanquoc">ko-fi.com/huynhnhanquoc</a></p></li></ul><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://huynhnhanquoc.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Hu&#7923;nh Nh&#226;n Qu&#7889;c Substack! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item></channel></rss>