§3
Open source
Tools, templates and experiments I've built and open-sourced.
Table 2. The repos, newest first, with GitHub stars, commits and the day of the last one.
| Repo | Stars | Commits | Last commit |
|---|---|---|---|
| clyrics | 0 | 116 | 4 May 2026 |
| claude-usage-monitor | 5 | 64 | 25 Jun 2026 |
| react-hanzi-input | 0 | 8 | 28 Apr 2026 |
| claudify | 0 | 8 | 20 Apr 2026 |
| hieu-chu-han | 2 | 172 | 2 Aug 2026 |
| food-tour-sg | 0 | 24 | 20 Apr 2026 |
| normalized-mouse-position | 1 | 27 | 4 Oct 2025 |
| magnetic-button | 3 | 66 | 8 Nov 2025 |
| nextra-blog-starter | 7 | 54 | 7 Dec 2025 |
| nextra-docs-starter | 50 | 58 | 5 May 2026 |
| viivue/overlapping-slider | 0 | 52 | 2 Nov 2022 |
| viivue/easy-tab-accordion | 0 | 197 | 22 May 2025 |
| viivue/easy-popup | 2 | 217 | 20 May 2025 |
| perxel/whack-a-mole | 0 | 129 | 20 Nov 2023 |
| viivue/easy-select | 1 | 210 | 3 Jun 2025 |
| cursor-effects | 7 | 33 | 26 Jun 2025 |
| jquery-scroll-direction-plugin | 7 | 38 | 26 Jun 2025 |
| lipsum-generator | 10 | 101 | 25 Feb 2026 |
Table 3. Every package I publish on npm, by downloads in the last 30 days. jsDelivr is the CDN, which serves the same packages to browsers.
| Package | 30 days | All time | jsDelivr |
|---|---|---|---|
| flickity-responsive | 186 | 7,770 | 43 |
| match-media-screen | 151 | 6,982 | 6 |
| @phucbm/magnetic-button | 151 | 2,248 | 24 |
| @phucbm/cursorjs | 74 | 2,337 | 271 |
| @phucbm/lerp | 70 | 1,366 | 8 |
| piajs | 50 | 1,582 | 15 |
| @phucbm/os-util | 44 | 2,507 | 11 |
| @phucbm/next-og-image | 36 | 660 | 3 |
| cuajs | 34 | 1,436 | 17 |
| @phucbm/banner | 31 | 989 | 26 |
| normalized-mouse-position | 28 | 835 | 5 |
| @phucbm/tailwindcss-container-queries | 27 | 3,423 | 20 |
| @phucbm/tailwindcss-components | 26 | 3,492 | 8 |
| gen-from | 26 | 1,025 | 0 |
| responsive-gsap | 26 | 1,063 | 0 |
| @phucbm/ripple-effect | 22 | 306 | 2 |
| @phucbm/data-toggle | 21 | 697 | 0 |
| @phucbm/gfm | 21 | 566 | 15 |
| honcau | 20 | 923 | 2 |
| @phucbm/tailwindcss-style-props | 19 | 3,093 | 2 |
| scroll-snooper | 18 | 527 | 10 |
| bg-prlx | 17 | 578 | 0 |
| @phucbm/events-manager | 15 | 456 | 0 |
| @phucbm/get-options-from-html-attr | 15 | 250 | 0 |
| phucbm | 13 | 336 | 5 |
| claskit | 13 | 693 | 0 |
| react-hanzi-input | 9 | 214 | 0 |