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.
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.
I usually reply within 24 hours.