cuixiaohan

About

Full-stack engineer focused on front-end architecture and developer tools.

I care less about shipping features than about why a thing has the shape it does.

The terminal you're using is an example: no terminal emulator library, no shell

library. Lexing, parsing, expansion, globbing, pipes, and the virtual filesystem

are all hand-written TypeScript. React only paints characters on screen — a

boundary ESLint enforces, so a React import under `src/core/` fails the build.

How I work:

cases. The kernel runs under Node with no browser involved.

Why it's written this way, and why not the other way, only a comment can carry.

back to a semantic résumé a screen reader can read end to end. Hiding uses clip,

not `display: none` — the latter gets skipped by screen readers entirely.

Type `projects` to see what I've built, `skills` for what I know,

`contact` to reach me.

If you're on Chrome with the built-in model enabled, type `ask` to talk to me —

that model runs entirely on your own machine and nothing leaves it.

Skills

Languages

Front end

Engineering

Other

Projects

terminal-site

The site you're looking at. A static terminal emulator with no off-the-shelf

terminal library — the whole command path is hand-written.

Pipes `|`, redirection `>` `>>`, environment variables `$VAR`, exit codes `$?`,

tab completion, history.

traversal, and the same error codes a real system returns

(ENOENT / EISDIR / EPERM).

talks through a streaming `IO`. Any command composes into a pipeline for free —

including ones added later.

by ESLint. The kernel unit-tests under Node, and the same boundary leaves room

to mount WASM command modules later.

One thing worth calling out on the SEO side: crawlers don't run JavaScript, so a

build-time Vite plugin renders the Markdown content into semantic HTML and injects

it into `index.html` — clipped from sighted users, fully visible to crawlers and

screen readers, and restored to normal layout when JavaScript is off.

Contact

I usually reply within 24 hours.