Skip to content
Wenjin Yu

Wenjin Yu

Backend Engineer · Developer Tooling

I build the tooling other developers install.

Medellín, Colombia · UTC-5 · Available for remote work

/about

What I work on

Backend developer working in C#/.NET and PHP/Laravel who also builds and ships developer tooling. Most of my work sits on one side or the other of that line: REST APIs and authentication on the server, or the tools other engineers run on their own machines.

The tooling side is TabBuilder — a project generator distributed three ways, as a VS Code extension, an npm CLI and a JetBrains plugin, all driven by a single Node.js engine rather than three parallel implementations.

/published-software

Published software

TabBuilder

Project generator for VS Code, the terminal and JetBrains IDEs

Problem
Starting a project means the same scaffolding every time — directory layout, config, entry points. Editor ecosystems make it worse: tooling written for one IDE has to be rebuilt from scratch for the next, so the same generator gets written three times and drifts apart three ways.
Architecture
One generation engine in Node.js, three thin clients. The engine owns the pipeline; filesystem access and user interaction sit behind interfaces so nothing in the core imports an editor API. Clients supply their own implementations of those interfaces: the VS Code extension talks to it in-process, the CLI wraps it directly, and the JetBrains plugin drives it as a child process over a line-delimited JSON protocol on stdio.
Distribution
  • VS Code extensionv3.2stable
  • CLI (npm)stable
  • JetBrains pluginbeta
Scope
11 frameworks across 5 languages.
Engineering
  • Extracted the generation logic into a shared Core consumed by all three clients, abstracting filesystem and UI access behind interfaces so the engine has no dependency on the VS Code API — which removed the need to maintain three parallel copies of the same pipeline.
  • Built framework support as Strategy implementations over a six-stage generation pipeline, so adding a framework does not require touching the pipeline itself.
  • Ported the tool to IntelliJ by writing only the UI layer in Kotlin and driving the existing Node.js engine over an NDJSON protocol on stdio, reusing the generation logic instead of reimplementing it for the platform.
  • Rebuilt the CLI experience on custom @inquirer/core prompts — split-screen wizard, live progress checklist — so terminal and editor users get the same flow.
Built with
  • Node.js
  • JavaScript
  • Kotlin
  • VS Code Extension API
  • IntelliJ Platform SDK
  • NDJSON over stdio
  • @inquirer/core
  • npm
  • monorepo
/architecture

One engine, three clients

TabBuilder architectureA single Node.js core engine at the top connects downward to three clients: the VS Code extension in-process, the npm CLI by direct import, and the JetBrains plugin over an NDJSON protocol on stdio. The core depends on none of them.Core engineNode.js · six-stage generation pipelineVS Code extensionin-processCLI (npm)direct importJetBrains pluginNDJSON over stdio
Filesystem and user interaction sit behind interfaces, so the core imports no editor API. Each client supplies its own implementation — which is what made porting to IntelliJ a UI-layer job rather than a rewrite.
/projects

Selected projects

BankOS

Multi-tenant banking platform

My part: Authentication and registration API

  • Built the auth and registration API in Laravel with JWT on a database-per-tenant architecture, resolving the tenant from the subdomain so a token stays scoped to the data of its own tenant.
  • Traced and fixed a failure where every JWT was invalidated on container restart, which surfaced only in the Docker environment and not in local development.
  • Laravel
  • PHP
  • JWT
  • PostgreSQL
  • Docker
  • stancl/tenancy
/stack

Technical stack

Languages
C# · JavaScript · PHP · Kotlin
Backend
ASP.NET Core · Entity Framework Core · Laravel · Node.js · REST APIs · JWT
Data
PostgreSQL · MySQL · SQL
Infrastructure
Docker · Linux · Git
Developer tooling
VS Code Extension API · IntelliJ Platform SDK · npm publishing · CLI design · Monorepos
Frontend
React · Blazor
/education

Education

Languages

  • SpanishNative
  • Mandarin ChineseNative
  • EnglishA2 (technical reading; actively studying)
/contact

Get in touch

Open to backend and developer-tooling roles, remote or in Medellín. The fastest way to reach me is email.

+57 302 709 1303