Open Source This page lists some of the open source packages and repositories I have published or contribute to.
Most of them are published under my company 47ng .
Frontend My tech stack of choice for server-rendered React apps is Next.js and TailwindCSS .
For client-heavy apps, I like to use Chakra-UI to quickly build beautiful and accessible interfaces.
Because of its CSS-in-JS approach, it's a bit awkward to use with the new Next.js app router and server components, so I'm now letting Tailwind deal with styling. ChatGPT makes a perfect companion for refactoring one into the other anyway.
NPM updated at: 2026-06-08T12:24:26.450Z GitHub updated at: 2026-06-08T12:24:26.875Z Type-safe search params state manager for React frameworks - Like useState, but stored in the URL query string.
$ pnpm add nuqs $ yarn add nuqs
$ npm install nuqs
0 May 09 159,779 May 10 497,161 May 11 519,375 May 12 521,497 May 13 478,451 May 14 453,724 May 15 173,619 May 16 173,810 May 17 509,392 May 18 532,300 May 19 555,224 May 20 550,183 May 21 473,860 May 22 174,989 May 23 174,205 May 24 353,642 May 25 493,702 May 26 546,340 May 27 528,948 May 28 464,166 May 29 196,211 May 30 182,057 May 31 533,899 Jun 01 561,730 Jun 02 543,932 Jun 03 548,553 Jun 04 469,526 Jun 05 177,562 Jun 06 180,011 Jun 07 11,727,848 Last 30 days Backend I like to use Fastify to build backend services in Node.js.
What I like about it:
More opinionated and structured than Express.js Damn fast Easy to write plugins Good defaults out of the box NPM updated at: 2026-06-08T12:24:26.450Z GitHub updated at: 2026-06-08T12:24:26.902Z Opinionated Node.js microservices framework built on Fastify ⚡️
$ pnpm add fastify-micro $ yarn add fastify-micro
$ npm install fastify-micro
0 May 09 6 May 10 1 May 11 3 May 12 0 May 13 3 May 14 1 May 15 6 May 16 0 May 17 1 May 18 0 May 19 10 May 20 2 May 21 5 May 22 1 May 23 0 May 24 0 May 25 6 May 26 5 May 27 0 May 28 1 May 29 2 May 30 0 May 31 3 Jun 01 3 Jun 02 22 Jun 03 0 Jun 04 6 Jun 05 4 Jun 06 4 Jun 07 95 Last 30 days NPM updated at: 2026-06-08T12:24:26.450Z GitHub updated at: 2026-06-08T12:24:26.933Z Run cron jobs alongside your Fastify server 👷
$ pnpm add fastify-cron $ yarn add fastify-cron
$ npm install fastify-cron
271 May 09 275 May 10 1,214 May 11 1,434 May 12 0 May 13 1,000 May 14 1,267 May 15 290 May 16 287 May 17 1,266 May 18 1,419 May 19 1,298 May 20 1,539 May 21 1,313 May 22 213 May 23 561 May 24 865 May 25 1,354 May 26 1,900 May 27 1,420 May 28 1,344 May 29 311 May 30 274 May 31 1,747 Jun 01 1,727 Jun 02 1,963 Jun 03 1,235 Jun 04 1,014 Jun 05 177 Jun 06 183 Jun 07 29,161 Last 30 days GitHub Action to deploy to Clever Cloud
Security & Encryption NPM updated at: 2026-06-08T12:24:26.450Z GitHub updated at: 2026-06-08T12:24:26.955Z Secure cryptographic key storage in the browser and Node.js
$ pnpm add session-keystore $ yarn add session-keystore
$ npm install session-keystore
21 May 09 14 May 10 39 May 11 21 May 12 0 May 13 56 May 14 52 May 15 27 May 16 19 May 17 92 May 18 19 May 19 25 May 20 18 May 21 99 May 22 148 May 23 7 May 24 14 May 25 33 May 26 55 May 27 72 May 28 8 May 29 0 May 30 43 May 31 22 Jun 01 70 Jun 02 44 Jun 03 3 Jun 04 0 Jun 05 0 Jun 06 26 Jun 07 1,047 Last 30 days I wrote an article about how I came to build session-keystore:
13 December 2019 • 4 min read e2ee security End-to-end encrypted applications use cryptographic keys that don't leave the client, so how do we store them securely in the browser ?
NPM updated at: 2026-06-08T12:24:26.450Z GitHub updated at: 2026-06-08T12:24:26.843Z Serialized AES-GCM 256 encryption, decryption and key management in the browser & Node.js
$ pnpm add @47ng/cloak $ yarn add @47ng/cloak
$ npm install @47ng/cloak
0 May 09 2,997 May 10 11,241 May 11 14,321 May 12 12,912 May 13 11,690 May 14 13,805 May 15 4,039 May 16 3,031 May 17 10,402 May 18 12,604 May 19 13,389 May 20 11,563 May 21 10,688 May 22 4,091 May 23 5,724 May 24 6,517 May 25 13,967 May 26 16,544 May 27 17,183 May 28 12,453 May 29 3,894 May 30 2,841 May 31 13,806 Jun 01 15,466 Jun 02 16,895 Jun 03 15,892 Jun 04 13,464 Jun 05 3,608 Jun 06 2,399 Jun 07 297,426 Last 30 days SDK to build end-to-end encrypted web applications
Environment Variables The Twelve Factor App model uses environment variables extensively for configuration and passing runtime data to a web app.
However, there are things to look out for when working with environment variables, so I built a few packages to make their management easier and more secure:
NPM updated at: 2026-06-08T12:24:26.450Z GitHub updated at: 2026-06-08T12:24:26.794Z Redact values of critical environment variables in a string
$ pnpm add redact-env $ yarn add redact-env
$ npm install redact-env
194 May 09 257 May 10 348 May 11 274 May 12 404 May 13 419 May 14 254 May 15 131 May 16 250 May 17 297 May 18 237 May 19 306 May 20 208 May 21 130 May 22 183 May 23 276 May 24 194 May 25 273 May 26 189 May 27 280 May 28 203 May 29 0 May 30 153 May 31 186 Jun 01 125 Jun 02 170 Jun 03 149 Jun 04 0 Jun 05 132 Jun 06 0 Jun 07 6,222 Last 30 days NPM updated at: 2026-06-08T12:24:26.450Z GitHub updated at: 2026-06-08T12:24:26.982Z Define aliases for environment variables and bind them at runtime
$ pnpm add env-alias $ yarn add env-alias
$ npm install env-alias
8 May 09 4 May 10 4 May 11 1 May 12 14 May 13 2 May 14 19 May 15 8 May 16 0 May 17 0 May 18 0 May 19 7 May 20 1 May 21 1 May 22 0 May 23 0 May 24 1 May 25 1 May 26 10 May 27 0 May 28 0 May 29 3 May 30 0 May 31 5 Jun 01 2 Jun 02 9 Jun 03 0 Jun 04 4 Jun 05 9 Jun 06 2 Jun 07 115 Last 30 days NPM updated at: 2026-06-08T12:24:26.450Z GitHub updated at: 2026-06-08T12:24:26.857Z Check that required environment variables are set for your app
$ pnpm add @47ng/check-env $ yarn add @47ng/check-env
$ npm install @47ng/check-env
16 May 09 22 May 10 413 May 11 155 May 12 183 May 13 28 May 14 107 May 15 4 May 16 13 May 17 172 May 18 51 May 19 156 May 20 206 May 21 144 May 22 104 May 23 20 May 24 54 May 25 128 May 26 272 May 27 184 May 28 253 May 29 134 May 30 142 May 31 426 Jun 01 354 Jun 02 0 Jun 03 174 Jun 04 120 Jun 05 5 Jun 06 102 Jun 07 4,142 Last 30 days Miscellaneous NPM updated at: 2026-06-08T12:24:26.450Z GitHub updated at: 2026-06-08T12:24:26.952Z Universal conversion of Uint8Array from/into UTF-8, base64url and hex in the browser and Node.js
$ pnpm add @47ng/codec $ yarn add @47ng/codec
$ npm install @47ng/codec
3,806 May 09 2,988 May 10 10,622 May 11 13,328 May 12 11,935 May 13 11,147 May 14 13,461 May 15 4,006 May 16 3,056 May 17 10,380 May 18 12,382 May 19 13,031 May 20 11,226 May 21 10,543 May 22 4,198 May 23 5,728 May 24 6,516 May 25 12,836 May 26 15,644 May 27 16,283 May 28 12,165 May 29 3,845 May 30 2,946 May 31 13,220 Jun 01 14,428 Jun 02 16,183 Jun 03 0 Jun 04 12,797 Jun 05 3,656 Jun 06 2,395 Jun 07 274,751 Last 30 days My longest-running open-source project is the Arduino MIDI Library. I learned programming in C++ in 2008 with this project and discovered my passion for open-source software.
The source code for this website! Made with Next.js , TailwindCSS and MDX .
🤝 Hire me!
I build web apps for startups, businesses and public institutions as a freelance web developer and designer. Let's discuss your needs and see how I can help.
Contact meEdit this page on GitHub