Przemysław Zalewski, senior full-stack engineer

I build web apps, SaaS products and AI agents in TypeScript, React and Node.js. I work from Wrocław, Poland, for clients in the US, UK and EU.

Here you will find the free tools I run in 2026, my apps from 2007 to 2017 and a blog about JavaScript, React and app development.

If you have ever wondered, the guy on the left it’s me and the dog on the right is Ares 🐶

Read the stories

Node.js 26 replaced 24 as the Active LTS line in October 2026 and is supported until April 2029. It turns on Temporal, adds new JavaScript from V8 14.6 and removes APIs deprecated for years. Here is what you gain, what breaks on the way up from Node.js 24 and how to fix it.

Read more: Node.js 26 is LTS: what's new since Node.js 24 and how to upgrade

A contact form needs two parts: the HTML form and back-end code that delivers each message. This guide builds the form in React and sends every submission to your Gmail inbox with nodemailer and OAuth2, from registering the app in Google Cloud to handling the form on the server.

Read more: Creating contact forms with nodemailer and React

Data as code modules

1 June 2017 · 2 min read

Treat data like code: keep JSON, text, CSV, spreadsheets and images in your repository and import them as ES modules. Webpack loaders parse them at build time, so you skip the fetching and parsing code and use ordinary language features to filter them and create new views. Data and code deserve equal treatment!

Read more: Data as code modules

Debugging JavaScript - The Basics

1 June 2017 · 5 min read

Debugging JavaScript starts with three tools: `console.log`, tapping into method chains, and breakpoints in the browser DevTools, set with the `debugger` statement or in the Sources view. JavaScript trades static type safety for dynamic freedom, so knowing these tools well matters. Let’s explore what each one does and bravely fight nasty bugs!

Read more: Debugging JavaScript - The Basics

Traversable Objects in JavaScript

1 June 2017 · 2 min read

JavaScript objects are often used as dictionaries, yet they have no `map`, `filter` or `reduce` like arrays do. Many libraries add helper functions, but most lack the common interface that makes arrays easy to process. This post builds that interface for objects: mapping, filtering and reducing with the same callback signature as arrays.

Read more: Traversable Objects in JavaScript