I work down the stack rather than across it — from patching Chromium in C++ to driving those same browsers with AI agents. Most of what I build takes a system that was never built to be scripted (a browser, After Effects, Word, n8n) and makes it programmable.
Hanoi, Vietnam
Agents & automation MCP bridges · CEP / Office extensions · n8n AI builder
────────────────────────────────────────────────────────────────────────────
Distributed systems Go · Connect RPC · NATS JetStream · transactional outbox
────────────────────────────────────────────────────────────────────────────
Browser internals Chromium C++ · fingerprint, TLS and HTTP/2 surfaces
The interesting problems live at the seams between those layers.
Anti-detect browser engine — custom Chromium build, ~66 patches organised into six
layers (de-telemetry, module, automation, fingerprint, network, branding). Spans canvas, audio,
WebGL and font surfaces through to TLS cipher ordering and HTTP/2 SETTINGS fingerprints.
C++ · closed source — but the surface map is public: browser-fingerprint-surfaces
Sourcing & fulfillment platform — 22 Go services across 10 bounded contexts. Connect
RPC over Buf-generated protos, one Postgres per service, NATS JetStream carrying
proto-encoded CloudEvents, transactional outbox, in-repo OIDC provider.
Go TypeScript · closed source — architecture notes: event-driven-go-notes
AE AI Assistant — After Effects CEP
extension: 27 service modules and 158 registered actions for AI-driven VFX automation. JavaScript
Word GPT Plus — AI agent inside Microsoft
Word, bridged to external tools over MCP. TypeScript
n8n Premium — enterprise n8n fork
with a custom AI Workflow Builder. JavaScript
agent-config-architecture — how to structure a coding-agent setup so its rules actually hold: standing config, on-demand skills, blocking hooks.
Most of my work is closed source, so I publish the thinking instead. Happy to talk through the architecture.
Email — or npx phquand, if you would rather stay in
the terminal.
Sign it → — an issue opens, you write a line, an Action puts it here and closes the issue.


