hnq.me

Self-taught developer / Systems notes

A quiet place for
life, systems,
and long learning.

I am Huynh Nhan Quoc, a self-taught developer from Tam Ky, Vietnam. I have been learning through real products, broken deployments, private systems, and years of starting again. This site keeps that road in one place: the ideas, the work, and the life around them.

2015 Started learning
Tam Ky Home
Go + JS Working tools
In public Current chapter

Ways into this site

Enter through the question you have.

Explore the archive

One body of work, several ways in.

Look up one concept, follow a topic across formats, or begin with a collection selected in reading order.

choose where to begin
concepts
31
articles
64
topics
20
collections
4
Featured collection Runtime foundationsA path through source code, bytecode, virtual machines, and the boundaries of execution. 9 entries

Now

What is moving today.

Building Kitwork Runtime workbench for multi-tenant websites Learning / 2026-07-09 Zero VM A beginner-friendly guide to understanding requests that bypass VM execution. Writing / 2026-08-23 I Never Planned to Build a Database. I Just Wanted Kitwork to Manage Thousands of Websites More Simply. Source / 4e142d7 A data-kit-scope literal on a component host sets its parameters A counter that counts 1 to 99 instead of 0 to 10 meant editing its JavaScript: markup had no way to give an instance its own values. The kernel ignored a data-kit-scope on a component host. Now the literal on the host is applied over the blueprint's defaults, before init — <div data-kit-component="counter" data-kit-scope="min: 1, max: 99">. It is the same literal a plain scope uses, read by the same code (literalInto): typed, evaluated once in the scope around the host (max: limit reads the parent's limit). Order: defaults → host literal → seed → init. Because Drive already tells instances apart by their scope literal, a different literal is a different instance on a page change. The server checks the keys against the component's names: a key it does not have is reported at render with the names it has ("data-kit-scope sets "mx" on component counter…"), and a page's own state is pointed to a data-kit-scope nested inside the host. Only readable components are checked. No page in apps/ or native/ has both attributes on one tag, so nothing that worked changes. Kernel core 11619 → 11646 bytes gzip. Proof in real Chrome: the literal's start value, its min and max clamping, init seeing them, a host without one keeping the defaults (control), a literal reading its parent scope. Server: the typo reported; parameters it has, an unreadable component, a plain scope and nested state stay silent. Disable-checks, each red for its own reason: the literal ignored, applied after init, strays unreported, every key reported. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> 2026-10-03

Latest articles

Fresh from the long road.

archive
Newest / 2026-08-23 I Never Planned to Build a Database. I Just Wanted Kitwork to Manage Thousands of Websites More Simply. From tenant_id, PostgreSQL, and Turso to a small database designed specifically for Kitwork. read article

A concept becomes executable

The path from text to behavior.

01 Source
02 Lexer
03 AST
04 Compiler
05 Bytecode
06 VM

Runtime

The place where code receives memory, values, limits, and a world in which to run.

Bytecode

The compact instruction layer between source language and machine behavior.

Virtual machine

A machine made of software that reads those instructions and enforces their boundaries.

explore all concepts

The road so far

Not a straight line.

2015

Blogger and HTML. The first small changes that made the hidden structure of a website visible.

2018

A friend's coffee shop and a Firebase night. Dependency stopped being an abstract technical word.

2020

Home, delivery work, and Kitstack. Real projects began shaping a private Go platform.

Now

Opening the useful parts. Kitwork, concepts, articles, and source code turn private lessons into public material.

This site is also an experiment

The URL follows the directory tree.

Each folder can inherit layout, metadata, and runtime behavior from the folders above it. The page you are reading is both a personal homepage and a working Kitwork tenant.

Search