Built the Vue.js env that enables Vue developers to build with Bit.
years building for the web
FRONTEND · OPEN SOURCE · SCRUM MASTER · MANAGER

I'm Zhao Jinjiang, a software engineer living in Singapore who specializes in frontend engineering. I'm also a Vue.js team member and a former co-chair of the W3C HTML Chinese Interest Group, where I served from 2014 to 2018.
Working languages: English · Mandarin Chinese.

years building for the web
enthusiast
experience as an individual contributor, team manager, and Scrum master
Across companies ranging from global enterprises to startups, and products spanning browsers, e-commerce, cloud services, web platforms, and mobile apps.
Built the Vue.js env that enables Vue developers to build with Bit.
Vite and Vitest integrations let Bit developers use Vite as a preview dev server and bundler, and Vitest as a tester.
Maintain the Bit CLI core, core envs, and third-party integrations for tools including webpack, Jest, ESLint, TypeScript, and MDX.

Bit favors file-to-file compilation when publishing a component. For example, one TypeScript source file produces one JavaScript file and one declaration file. This model is challenging for Vue.js because mainstream Vue SFC tooling bundles source code into one or more chunks.
I created the open-source project
vue-simple-compiler. It compiles an
individual Vue SFC into a JavaScript file and can extract a <style> block into an
additional CSS, Sass, or Less file referenced by an import statement. The generated
files work as ordinary web-application source files and can be used directly in a Vue
project.
It also supports source maps and hot module replacement (HMR).
Together with vue-tsc for generating declaration files, this project gave Bit's Vue
env full compilation support for Vue SFCs.
I also presented Understanding Vue SFC Compiler at CityJS Singapore 2024.
Every Bit component is ultimately consumed as an npm package. During local
development, files inside node_modules can therefore change when a package is
generated from a local Bit component.
By default, Vite and Vitest treat code in node_modules as static: they pre-bundle it
and do not watch it for changes. So when one local Bit component imports another local one as an
npm package, the HMR does not work, and even refreshing the browser does not load the
updated code.
Vitest, server-side rendering, and pre-rendering add another constraint because the code runs in Node.js rather than in a browser.
Vite and Vitest provide configuration options for each case individually, but the options do not always work when these edge cases overlap.
I studied the Vite and Vitest source code and worked through multiple rounds of discussion with their teams, contributing to related GitHub issues and pull requests. This led to a configuration strategy that covered all of these cases.
I documented what I learned in Understanding how Vite deals with your node_modules.
The Vite and Vitest configuration includes:
node_modules.optimizeDeps.include and
resolve.alias in singleton mode.watch.ignored, optimizeDeps.exclude, and
resolve.alias. A custom alias plugin detects local package names in import
specifiers and points them to the corresponding source code.test.server.deps.inline for Vitest.resolve.dedupe for peer dependencies in SSR and pre-rendering modes.Because Bit applications are composed of independently managed components, large applications can contain enough components to slow down the development server or bundler.
I built a specialized pre-bundle env that deliberately departed from the file-to-file compilation model. It bundles source code and dependencies together and can serve as a micro-frontend checkpoint, accelerating consumption by higher layers.
I applied this env to Bit's default docs application, which renders the MDX documentation for Bit components on Bit Cloud. Pre-bundling reduced local-development load time by more than 50%.
Built a Storybook-like interface for previewing demos of a Bit component.
I defined a live-demo type that lets developers export a component object, a prop type definition, default prop values, optional input-control bindings, and an optional custom renderer. Without a custom renderer, Bit displays the component with its default props alongside controls that update the values live.
The next version extracted prop types from source code, making the explicit type definition optional. Bit could then infer each prop type and corresponding input control, reducing the minimum configuration to a component object and its prop values.

import, require, and other language-specific syntax.AGENTS.md file with guidance for AI agents.The Shopee Tech Committee was a 10-person group focused on core engineering topics. I was the person-in-charge (PIC) of frontend engineering.
Consolidated multiple UI design systems and component libraries into three: one each for consumer-facing, seller-facing, and internal products.
Drafted and aligned engineering guidelines with teams across the company, including:
Co-organized Shopee's annual internal technology summit, curating engineering innovations, practices, and case studies from development teams and product lines for the wider engineering organization.
Shopee's Marketplace department focused on consumer-facing websites and applications. Its frontend team was the company's largest and most experienced, with groups supporting individual product lines and evolving into sub-teams as it grew.
Led the team in shipping new versions of the Shopee web app across all regions, supporting product areas including Homepage, Search, Ads, Promotions, and Orders.

Led the team in maintaining its frontend technology stack and infrastructure while adopting new technologies to replace legacy systems.
Combined Ant Design with Kaya Toast, a minimal SPA scaffold; Toastbox, a source-based component-sharing platform; and shared generators for common table and form pages. We also explored Open Routes as an optional page-level build model.

Shopee faced growing demand for internal admin portals, but building each one from scratch was inefficient. Feature line teams had limited time and needed to prioritize customer-facing products, so we created shared infrastructure to make admin development faster and more cost-effective.
Toastack included:
As an optional experiment, we combined page-level state management, the Open Routes build workflow, and browser-side dependency management. This allowed teams to develop, build, deploy, and maintain portal pages independently, with the option to decentralize a growing portal across multiple repositories.
All new admin portals were built on Toastack, while existing portals increasingly migrated from legacy stacks. Two large portals also adopted the decentralized model, allowing multiple frontend sub-teams to maintain them independently.
Established a dependency collaboration loop: upper-layer teams shipped a temporary patch and reported the issue, lower-layer owners delivered the fix, then upper-layer teams removed the patch and upgraded to the fixed release. This kept delivery moving while giving dependency owners time to implement the long-term solution.
The team grew fifteenfold in three years. We also established a sub-team structure and helped more tech leads and managers step up and take on broader responsibilities.
The Alibaba Cloud Developer Experience team designed and supported frontend development for all Alibaba Cloud consoles. The team had more than 100 members. My work explored the future of cloud-console interfaces, primarily through experimental prototypes and demos created with designers.
Studied existing cloud-console designs and produced a report covering the primary layout, four common page types, and frequently used data-visualization scenarios.
The proposal offered purpose-built component variants, such as date pickers, for different screen sizes, device platforms, and interaction methods. It became an important reference for designing new pages.

At the time, most cloud consoles were designed primarily for mouse input. This created problems for iPad users and advanced users who preferred keyboard shortcuts. We also encountered issues such as lost focus, blocked user flows, and inconsistent designs. These problems were closely connected to accessibility practices.
My goal was to make the cloud consoles more accessible and consistent by improving the design system and engineering workflows.
These efforts significantly improved the interaction design and accessibility of the cloud consoles. More importantly, accessibility became a more consistent part of the team's daily work.
As a side project, I open-sourced a Vue.js utility library named vue-a11y-utils.

What I've done in details:
Built an experimental cloud-console prototype in a 3D environment, with an unlimited-size virtual screen, switchable workspace backgrounds, and novel input methods.
The Mobile business unit in Alibaba was focusing on the Taobao app. We also built mobile-app infrastructure for other mobile apps across the company. My role combined hands-on coding with team leadership.
Served as technical lead for a frontend infrastructure team of more than 20 developers.
The team's work was divided into four feature lines, each with its own roadmap and headcount. I combined hands-on development with team leadership while supporting both feature delivery and the underlying mobile frontend infrastructure.
Delivered features through the Taobao app's WebView and supported frontend engineering across its four feature lines.
I aligned feature work with the broader mobile infrastructure, helped teams resolve delivery challenges, and gained practical experience delivering embedded web interfaces at Alibaba's scale.
Served as the overall frontend project manager for Taobao Mobile during the 11.11 Shopping Day in 2014, 2015, and 2016.
Each event required roughly three to six months of preparation across product design, development, and delivery. On the whole Shopping Day, we monitored the product and adjusted configurable business logic when necessary. This work gave me extensive experience in project management, negotiation, and engineering management for large-scale events.
I initiated Weex, a native rendering engine with web dev experiences, designed to provide a lightweight, high-performance, and dynamic view in mobile apps.
I adapted Vue Single-File Components syntax. So developers can build native views by writing Vue SFCs and publish them as a JS bundle which is easy to reload or re-deploy.
The first version debuted on the homepage of the 2015 11.11 Shopping Day. It handled high traffic with average load times under one second, low memory and CPU usage, and a high frame rate.
In 2016 11.11 Shopping Day, it served more than 100 pages and handled most mobile traffic with high performance and delivery efficiency.
We also open-sourced Weex and establishing an official integration and collaboration with Vue.js. Weex went on to support large-scale mobile experiences with strong performance and delivery efficiency.


This project was built after React Native was announced by Meta in early 2015.
With inspiration of React Native and many other internal projects in Alibaba, we decided to make a "dynamic" version, which is easy to load and deploy as a JS bundle. We picked Vue.js SFC as the DSL. And later in 2016 we regularly supported VanillaJS and React.js.
The development of the first version ran through two months—four Scrum sprints, with 3 iOS engineers, 2 Android engineers, 1 web frontend engineer, and 1 QA engineer.
Beyond developing and leading the project, I gained extensive experience in open source and technical advocacy. I learned from the community and independent developers while significantly improving my presentation and communication skills.
Helped develop a foundational toolkit for mobile web development. It included:
rem unit.Most APIs automatically determined whether to call a server directly or communicate through the mobile app's native-to-JavaScript bridge. I contributed to every part of the toolkit. Some of the libraries were open-sourced on GitHub.
Created a graphical JSON editor that supported nested arrays and objects. It was used in an internal CMS for managing product operations and promotional pages.
The editor had two parts: a schema editor for administrators and a data editor for local operators. Built with Vue.js 0.x, it was my first hands-on experience with component-based frontend development.
Led and contributed to frontend engineering for Maxthon Browser and its web products from 2007 to 2013.
I joined Maxthon as its No. 6 employee and a frontend engineer, then grew into the technical lead of a team of more than 15 frontend developers. I led frontend engineering across the browser UI, built-in pages, and company websites. In the early jQuery era, Maxthon was an early adopter of HTML and CSS for internal interfaces, including Settings, the account panel, Bookmark Manager, and History Manager. It was my first full-time role, and I remain proud of the more than six years I spent there.
Built browser pages that called native browser APIs. Some also had online versions that communicated with server APIs. All were written in vanilla JavaScript.

Contributed to the main browser UI and the design of the theme system for Maxthon Browser v3.
The interface used HTMLayout, a lightweight HTML rendering engine that allowed the main browser UI to be built with HTML and CSS. The theme system used the same foundation, enabling third-party developers to create personalized browser interfaces.
Participated in the JavaScript API design and documentation for the Maxthon Browser v3 extension system.
Extensions could run JavaScript on web pages and add entry points to the main browser interface, including the toolbar and sidebar. The documentation helped third-party developers build against these APIs.
Developed company web products including the Maxthon homepage; Maxthon Multi-Search for searching the same keywords across multiple search engines; and Maxthon Today, a comprehensive Chinese web-navigation site backed by a content management system.
Helped Maxthon join W3C in 2013 and served as its W3C contact.
I followed evolving web standards, shared relevant knowledge across the company, and built and maintained a strong relationship with the W3C China office.

Introduced Scrum at Maxthon, then served as Scrum master for Start page project, the company's first Scrum project.
The team included 2 product owners, 1 designer, and 4 development team members. Each sprint lasted 2 weeks. The process helped us operate as a cohesive team with fewer disruptions and greater efficiency. I later coached Scrum masters for several other projects.
Open source, web standards, technical writing, and talks.
A linter for Chinese-language text.
Accessibility utilities for Vue.js applications.
Compiles Vue Single-File Components into plain JavaScript and CSS.
A component that renders Markdown into slides.
A native macOS companion that turns a paired Nintendo Switch Joy-Con into a configurable controller for keyboard shortcuts.
A walkthrough of how Vue Single-File Components are compiled into JavaScript and CSS.
A talk on using the Node APIs of Vite and Vitest to build custom development tooling.
A look at practical JavaScript applications in football, from pitch visualization and tactical tools to AI-assisted video analysis.
A practical guide to Vite's dependency handling, including pre-bundling, externalization, and server-side rendering.
An illustrated explanation of Vue 3's Proxy-based reactivity system, dependency tracking, and core APIs.
A design walkthrough of a lightweight, ESM-friendly demo server inspired by Vite.
Bachelor of Software Engineering · Xi’an, China
Curiosity, community, and life beyond code.
Football⚽️ A football coach certified by Football Association of Singapore (FAS) since 2025.
Marathon🏃 A Marathon finisher, Singapore Marathon 2025.
Podcast🎙️ Co-host a Mandarin tech podcast: Beyond Code FM (代码之外) since 2023