
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 🐶
What I build now, in 2026
You 🤝 Przemysław?Riddle me this: a hire page
PrzemoFlack: DM the AI me, it always replies
MigawkiStarted as a song, ended as a game
WyroczniaAsk Klaudia anything, she says yes or no
Korpo TłumaczCorporate speak into plain words
All 2026 apps and free tools →
* The rest of this page is kept exactly as it was in 2017, on purpose: compare it with the tiles above to see how far things have come.

Node.js 26 is LTS: what's new since Node.js 24 and how to upgrade
30 October 2026 · 19 min read
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.

Creating contact forms with nodemailer and React
1 June 2017 · 5 min read
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.

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!

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!

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.