About Me
With over 15 years of experience as a full-stack developer, I've had the opportunity to spearhead project teams at tech startups in Vietnam, Thailand, Japan, and Singapore. Additionally, I have worked as a freelance engineer for various companies based in Asia Pacific, Europe, and North America.
Currently, I serve as a Senior Full Stack Software Engineer at ACX, where I focus on developing blockchain-based carbon exchange platforms and innovative solutions using TypeScript, Node.js, and React.
Featured Projects
Open source projects and tools I've created
zed-101-setup
Your ultimate guide to setting up Zed with Vim mode, tailored settings, and key bindings for a seamless coding experience
next-swagger-doc
This package reads your JSDoc-annotated source code on NextJS API route and generates an OpenAPI (Swagger) specification.
typescript-tips
A curated list of awesome 🔥 TypeScript Tips 🔥
dapp-starter
Opinionated Dapp Starter Template provides a solid foundation for building Ethereum-based applications. It incorporates various tools and frameworks such as React, Next.js, Hardhat, TypeChain, web3-react, daisyUI Tailwind CSS Components, and OpenZeppelin.
next-app-starter
Another awesome starter for your app base on nextjs + tailwind + react-query + zod + react-hook-form + next-auth + jotai
hurl.nvim
Hurl.nvim is a Neovim plugin designed to run HTTP requests directly from `.hurl` files. Elevate your API development workflow by executing and viewing responses without leaving your editor.
VS Code Extensions
Tools I've built to improve developer experience
vscode-hurl-runner
Hurl Runner is a VS Code extension designed to run HTTP requests directly from `.hurl` files.
vscode-like-pro
Make your VSCode Awesome! Minimalist, Productive, and Performance.
vscode-seal-code
Smart Code Review with AI-Powered Insights
vscode-settings-cycler
VSCode Settings Cycler
vscode-mux
Open VS Code terminals inside tmux or zellij
vs-code-preset
Easy to quickly enable/disable VS Code extensions base on your preset
Neovim Plugins
Lua plugins to supercharge your Neovim workflow
lazy-nvim-ide
My 💤 LazyVim IDE config for Neovim
tiny-nvim
Slim Neovim config for 0.11+ with minimal plugins.
ts-inlay-hints
A guide on how to utilize TypeScript inlay hints in VS Code / Neovim with the TypeScript Language Server
my-nvim-ide
My personal neovim configuration.
typecheck.nvim
A Neovim plugin for seamless TypeScript type checking.
nvim-for-webdev
Starter Template for Web Developers
quick-code-runner.nvim
A simple and efficient code runner for Neovim.
spinner.nvim
spinner.nvim is a single file, no-dependency plugin for Neovim
dotfiles
A set of vim, zsh, fish, tmux, zeliij, git configuration files and tools.
CLI & TUI DX Tools
Terminal-first tools to speed up day-to-day developer workflows
twt-dl-cli
The easiest way to download any Twitter video from CLI
cspell-tool
Keep your project's spelling in check with cspell-tool.
biome-interactive
Simple interactive to install biome to your project. Migrate from ESLint and Prettier with a single command
moleculer-connect
A command-line interface for connecting to Moleculer microservices
pkg-cli-simple-app
Demo pkg app
dotenv-tui
A terminal UI tool for managing .env files across projects and monorepos.
Latest Videos
Loading...
Loading videos...
Loading videos...
Loading videos...
Loading videos...
Loading videos...
Loading videos...
Latest Blog Posts
Guides, TILs, and tutorials
Reload page from iframe with cross-domain support
Trigger parent page reload from iframe
Sep 10, 2021

How to use custom element with NextJS/React
Use lite-youtube-embed with Next.js dynamic import
Sep 7, 2021

New Web APP CLI
React app generator built on Vite
May 30, 2021

React Hook - Use wait for transaction hash
Poll ETH transaction status in React
Apr 30, 2021

#TIL 2 - Create and apply git patch from a commit hash
Port commits between branches with git patch
Aug 12, 2020

#TIL 1 - Git Rebase Interactive
Clean up git history before PR
Aug 11, 2020