Przemysław Zalewski

JavaScript od 2012, przeglądarka i Node.js

Programista JavaScript, który wie, co runtime zrobi za chwilę

Modernizuję stary JavaScript bez wyłączania serwisu, przyspieszam wolne strony i pokazuję zysk w liczbach, a framework dodaję tylko tam, gdzie się zwraca. Dziewięć lat TypeScriptu, Reacta i Node.js, w przeglądarce i na serwerze.

Rozmowy w tym tygodniu · start pracy 3 listopada 2026 · Wrocław, zdalnie

Przemysław Zalewski
15+lat tworzenia oprogramowania
9lat TypeScriptu, Reacta i Node.js
100 000+graczy Korony Krulów, mojej gry przeglądarkowej open source
30 000równoczesnych użytkowników mojego czatu

Brzmi znajomo?

Problemy z JavaScriptem, które rozwiązuję w 2026

npm audit pokazuje dziesiątki podatności. Od czego zacząć?

31 marca 2026 dwa przejęte wydania Axiosa dociągnęły złośliwą zależność, która pobierała trojana zdalnego dostępu. W alercie z 20 kwietnia 2026 CISA zaleciła przypiąć sprawdzone, bezpieczne wersje, wymienić tokeny npm i sekrety CI oraz ustawić w .npmrc ignore-scripts i siedmiodniowe min-release‑age (alert CISA).

Aktualizuję zależności falami, które da się cofnąć, i każdą sprawdzam Twoimi testami. Typowa aplikacja często zajmuje jeden wieczór. Dostajesz czysty plik lock i krótką listę zmian. W październiku 2025 jedna z bibliotek przypinała podatną wersję nodemailera, której żadna aktualizacja nie mogła podmienić, więc wymusiłem poprawioną wersję przez override w npm i jeszcze tego dnia audyt był czysty.

Stary kod w JavaScripcie, którego nikt nie rozumie. Przepisać?

Oddanie go samemu agentowi AI to loteria. W ankiecie Stack Overflow z 2026 roku prawie połowa programistów (48%) odpowiedziała, że ufa wynikom AI wtedy, gdy może je łatwo sprawdzić (Stack Overflow 2026). A stary kod, którego nikt nie rozumie, to właśnie kod, którego nie da się łatwo sprawdzić.

Refaktoruję pod osłoną testów: Playwright pilnuje ścieżek, które zarabiają, agent robi mechaniczną robotę, a każdy merge zatwierdza człowiek. Bez przepisywania od zera, strona cały czas działa. We wrześniu 2026 część sesji w Safari gubiła lokalną bazę aplikacji; zamiast proponowanej na start ryzykownej migracji magazynu udowodniłem, że prawdziwą przyczyną jest pomocniczy worker spóźniający się na 4‑sekundowy limit startu, zapisałem jego pliki w cache i dodałem jedną ponowną próbę, a pierwszy raport z produkcji to potwierdził.

Masz to u siebie? Umów bezpłatne 30 minut →

Brak dokumentacji, a agent AI ciągle psuje kod

W teście opublikowanym przez Agentic AI Foundation w lipcu 2026 dwunastolinijkowy AGENTS.md, plik, który mówi agentom, jak działa projekt, skrócił czas pracy agenta o 27%, a jego zmiany o 26% przy niejasnym zadaniu. Bez niego dwa z pięciu przebiegów zadania na wielu plikach zbaczały z kursu: od nowa przeszukiwały repozytorium albo uruchamiały niezamówiony build produkcyjny (AAIF, 22 lipca 2026). Bez spisanych zasad zgadują i nowi ludzie w zespole, i agenci.

Opis architektury, instrukcje operacyjne i AGENTS.md piszę na podstawie samego kodu, a potem sprawdzam je na prawdziwym zadaniu dla agenta. Jeśli agent się pomyli, poprawiam dokumentację. W 2026 dałem agentom kodującym spisane reguły, poprawiłem dokumentację, która rozjechała się z kodem, a reguły, które ciągle były łamane, zamieniłem na automatyczne sprawdzenia.

Dlaczego nasza strona tak wolno działa na telefonach?

W 2025 tylko 48% stron mobilnych przeszło Core Web Vitals, a mediana Total Blocking Time na telefonach wzrosła o 58% do 1916 ms, czyli prawie dwóch sekund, w których strona nie reaguje na dotyk (Web Almanac 2025).

Najpierw mierzę na danych prawdziwych użytkowników w PostHogu, potem tnę trzy typowe koszty: kaskady żądań, wagę paczek JavaScriptu i pracę głównego wątku. Wynik przed i po widzisz na jednym wykresie. W 2023 samoobsługowe demo sprzedażowe musiało działać szybko na żywym spotkaniu; najpierw je zmierzyłem, potem ograniczyłem zapytania i trafiło do potencjalnego klienta w terminie.

Masz jeden z tych problemów? Umów bezpłatne 30 minut →

Dlaczego ja

Brak frameworka to też opcja

Strona ze strumieniowanym HTML bez frameworka klienckiego, API na Workers w zwykłych modułach. Gdy React albo Next.js dodałyby koszt bez wartości, mówię to. Gdy pasują, zobacz stronę o Reakcie.

Legacy, które dalej działa

jQuery, ES5, bundler, którego nikt nie odważa się dotknąć. Modernizuję wycinkami: najpierw testy wokół ryzykownych części, potem moduły, potem typy. Strona nigdy nie gaśnie. Celem zwykle jest TypeScript.

Wydajność, którą da się zmierzyć

Mniej żądań, streaming zamiast odpytywania, praca poza głównym wątkiem, obrazy w odpowiednim rozmiarze. Mierzone danymi prawdziwych użytkowników w PostHogu, nie samym wynikiem Lighthouse.

Jeden język, obie strony

Przeglądarka, Node.js, Cloudflare Workers, Electron, React Native. Naprawiam API i UI w jednym pull requeście, bez czekania na przekazanie między zespołami.

Pokaz na żywo

Event loop na żywo

Zmień kod i uruchom go w Twojej przeglądarce. Oś czasu pokazuje prawdziwą kolejność: kod synchroniczny, potem mikrozadania, potem makrozadania, a klatki animacji tuż przed kolejnym malowaniem. Pomyłka w tej kolejności to spinner, który nigdy nie znika, migający interfejs albo podwójna aktualizacja stanu.

Ładuję pokaz…

Zagnieźdź setTimeout w Promise.then albo dodaj await w środku. Oś czasu odświeża się przy każdym uruchomieniu.

Dowody

Praca, którą mogę pokazać

Problem, co zrobiłem, efekt. Nazwy klientów tylko tam, gdzie wolno mi ich użyć.

Korona Krulów: satyryczna gra w Reakcie dla 100 000+ graczy

Problem
Wiosna 2020, lockdown, żart, który zasługiwał na grę, zanim się zestarzeje.
Co zrobiłem
React, 400+ akcji, ranking, open source na GitHubie, zbudowana wieczorami.
Efekt
100 000+ graczy i ~700 wykopów przy premierze.

100 000+ graczy 2 tygodnie open source Otwórz ↗

Strumieniowanie wyniku agenta w jednym żądaniu HTML, bez frameworka po stronie klienta

Problem
Wynik agenta przychodzi poza kolejnością i trwa. Strona, która czeka na wszystko, wygląda na zepsutą.
Co zrobiłem
Jedna odpowiedź HTML strumieniowana z serwera, sloty wypełniane poza kolejnością w miarę wyników, bez hydratacji, bez frameworka klienckiego.
Efekt
Pierwsze malowanie w milisekundach, reszta dopływa na żywo. Ten sam pomysł napędza pokaz strumienia na stronie Next.js.

strumieniowany HTML bez hydratacji

Zobacz też: Next.js

Poprawki wysłane do źródła zamiast obchodzenia ich u siebie

Problem
Błędy w bibliotekach, od których zależeliśmy: minifikator CSS wywracający się na brakujących wartościach obramowania, paczka kolejki bez punktu wejścia, wycinanie obrazków zepsute w React 17, reklamy, które mogły wywrócić aplikację mobilną, i paczka design systemu opublikowana bez potrzebnego pliku.
Co zrobiłem
Błędy bibliotek naprawiłem u źródła i wysłałem pull requesty do autorów: cssnano i p‑queue w 2019, react‑image‑crop pod React 17 w 2021, design system Carbon firmy Sage w 2023. Poprawka w Carbon powstała w ramach outsourcingu dla Sage. W Omio naprawiłem wyścigi i sprawiłem, że reklamy nie wywracają aplikacji, w forkach używanych przez produkt na produkcji.
Efekt
Cztery poprawki zmergowane u źródła, w tym trzy w bibliotekach z tysiącami gwiazdek każda, do tego publiczne poprawki z pracy dla klientów. Pełna lista z linkami jest na stronie open source.

3 zmergowane u źródła praca dla klientów publicznie od 2019 Otwórz ↗

Masz podobny problem? Umów bezpłatną rozmowę →

Jedna noga w drzwiach

Nie czas na projekt? Zacznij od tygodnia albo jednego PR‑a.

Dwa sposoby, żeby zobaczyć, jak pracuję, zanim zamówisz sprint. Stały zakres, widełki ceny poniżej, ostateczna kwota na piśmie w ciągu 24 godzin od rozmowy.

Tygodniowy audyt kodu JavaScript

Ręcznie czytam repo, CI, testy, wdrożenia i miejsca, których zespół unika. Dostajesz pisemny raport: ryzyka uszeregowane po koszcie, co naprawić najpierw, plan z kamieniami milowymi i decyzję go/no‑go, którą da się obronić. Raport zostaje u Ciebie bez względu na to, czy pracujemy dalej.

4 500⁠–⁠8 800 zł netto · 30⁠–⁠40 h · Zobacz cenę i termin →

Code review jednego pull requesta albo modułu

Przyślij diff, który Cię martwi. W kilka dni dostajesz komentarze do linii, trzy rzeczy, które zmieniłbym najpierw, i werdykt: zmergowałbym czy nie. W jednym produkcie przejrzałem od 2018 roku ponad 800 pull requestów.

300⁠–⁠880 zł netto · 2⁠–⁠4 h · Zobacz cenę i termin →

Umów rozmowę i wybierz Najpierw bezpłatna rozmowa 30 min. Jeśli żadne nie pasuje, powiem to na rozmowie.

Jak to działa

Trzy kroki od tej strony do działającego projektu.

  1. 1

    Rozmowa 30 minut

    Opisujesz produkt i problem. Ja zadaję pytania, które zadałbym pierwszego dnia.

  2. 2

    Zakres na piśmie

    W ciągu 24 godzin po rozmowie dostajesz krótki plan na piśmie: co budujemy najpierw, co mierzymy, jak pracujemy i ile to kosztuje. Bez prezentacji.

  3. 3

    Działający kawałek w pierwszym tygodniu

    Wdrożony, zmierzony i gotowy do przejrzenia. Dalej tempo wyznaczają liczby.

Dopasowanie

Czy to pasuje?

Dobre dopasowanie, gdy

  • Potrzebujesz seniora, który bierze odpowiedzialność za dowiezienie, nie pary rąk
  • Produkt ma wyjść i być mierzony, z product managerem albo bez
  • Współpraca solo albo jeden zespół do czterech osób, który prowadzę bezpośrednio
  • TypeScript, React, Node.js, Cloudflare, Postgres, PostHog, a Python, gdy praca tego wymaga

Raczej nie, gdy

  • Projekt na dziesięcioosobowy zespół dostawcy
  • Stack zbudowany wokół Javy albo chmury, w której nie pracuję
  • Body leasing na godziny bez wpływu na sposób pracy

Styl pracy

Jak pracuję

Review jako rzemiosło

800+ przejrzanych pull requestów w jednym produkcie od 2018 roku. Patrzę na produkt i jego powody. Kod jest drugi.

Zero zaległych bugów

Błąd jest naprawiony albo świadomie zamknięty, nigdy odłożony. Alerty i śledzenie błędów w każdym projekcie, więc o problemach dowiaduję się przed klientem.

Agenci pod regułami

Claude Code i Codex pracują na mainie z hookami, bramkami lint i testów. Model podpowiada, kryteria decydują. Każdy PR ma ludzki review, a treści z AI są oznaczone.

Warto wiedzieć

Fakty o JavaScripcie, które zmieniły się w 2025 i 2026

Node.js 20 nie jest już wspierany

Node 20 stracił wsparcie 30 kwietnia 2026. Node 22 kończy 30 kwietnia 2027, a Node 26 zostaje Active LTS 28 października 2026 (harmonogram Node.js).

Od 27 jedna wersja Node.js rocznie

Od Node 27 wychodzi jedna wersja główna rocznie i każda zostaje LTS. Podział na parzyste i nieparzyste znika (blog Node.js).

Klasyczne tokeny npm unieważnione

npm unieważnił wszystkie klasyczne tokeny w grudniu 2025. Tokeny z prawem zapisu żyją najwyżej 90 dni, więc stare publikacje z CI padają, dopóki nie przejdą na tokeny granularne albo trusted publishing (changelog GitHuba).

require() modułów ESM działa, z jednym haczykiem

Node 20.19, 22.12 i 23 ładują moduły ES przez require() bez flagi, ale graf z top‑level await rzuca ERR_REQUIRE_ASYNC_MODULE (dokumentacja Node.js).

Temporal to jeszcze nie Baseline

Następca Date działa w Chrome, ale MDN oznacza go jako ograniczoną dostępność, więc kod produkcyjny nadal potrzebuje polyfilla (MDN).

jQuery 4 porzuca stare przeglądarki i helpery

jQuery 4.0 porzucił IE 10 i starsze oraz usunął helpery jak jQuery.isArray i jQuery.parseJSON. Podbicie wersji na ślepo psuje stare wtyczki (blog jQuery).

FAQ

Pytania, które padają przed umówieniem rozmowy

JavaScript czy TypeScript?
TypeScript do wszystkiego, co żyje dłużej niż weekend, czysty JavaScript tam, gdzie krok budowania kosztowałby więcej, niż oszczędza: małe strony, skrypty, Workers, pokazy jak ten na tej stronie. Oba są w moim codziennym stacku, zobacz stronę o TypeScripcie i Node.js.
Zmodernizujesz stary kod w jQuery albo ES5?
Tak, wycinkami i bez przepisywania od zera. Najpierw zestaw Playwright wokół ścieżek, które zarabiają, potem moduły, potem typy, potem framework, którego potrzebuje produkt. Strona działa przez cały czas.
Ile to kosztuje?
Zacznij od tygodniowego audytu kodu opisanego wyżej: stałe widełki, a ostateczna kwota na piśmie w ciągu 24 godzin od rozmowy. Większą pracę rozliczam godzinowo albo stałą kwotą miesięczną na umowie B2B, obie stawki są w cenniku. Konfigurator od razu pokaże widełki dla Twojego projektu.
Node.js po stronie serwera?
Tak: API w Expressie, endpointy strumieniowe, workery i kolejki, Postgres. Flagi hardeningu włączone, zależności przejrzane, reakcja na podatności tego samego dnia. Szczegóły na stronie o TypeScripcie i Node.js i stronie o Cloudflare.
Przyspieszysz wolną stronę?
Tak. Mierzę na danych prawdziwych użytkowników, a wynik przed i po widzisz na jednym wykresie. Trzy typowe koszty opisuję w problemach wyżej. Strona o Next.js ma pokaz problemu kaskady na żywo.
Od kiedy możesz zacząć?
Od 3 listopada 2026. Umów rozmowę i przynieś repo albo link do strony, która wydaje się wolna.
Jesteś jedną osobą. A jeśli się nie uda albo zachorujesz?
Zacznij od małego: tygodniowy audyt albo review jednego pull requesta, oba z ceną ustaloną przed startem. Rozliczenie godzinowe nie ma minimum, więc przerwiesz w każdej chwili i zatrzymasz wszystko, co dostarczone. Kod, CI i dokumentacja są w Twoim repozytorium od pierwszego commita, umowa przenosi na Ciebie autorskie prawa majątkowe na piśmie, a każdy projekt ma runbook i opis architektury. Gdy choruję, wiesz o tym tego samego dnia. Jak pracuję.
Jaką wersję Node.js trzymać na produkcji w 2026?
Node 24 albo 26. Node 20 nie jest już wspierany, a 22 kończy się w kwietniu 2027 (harmonogram Node.js). Flaga node --permission nie jest piaskownicą dla niezaufanego kodu, więc nie licz na nią (dokumentacja Node.js).
Czemu publikacja do npm z CI przestała działać?
Klasyczne tokeny zostały unieważnione w grudniu 2025, a tokeny z zapisem wygasają najpóźniej po 90 dniach (changelog GitHuba). Przenieś CI na trusted publishing albo token granularny z przypomnieniem o odnowieniu.
npm audit pokazuje dziesiątki podatności. Od czego zacząć?
31 marca 2026 dwa przejęte wydania Axiosa dociągnęły złośliwą zależność, która pobierała trojana zdalnego dostępu. W alercie z 20 kwietnia 2026 CISA zaleciła przypiąć sprawdzone, bezpieczne wersje, wymienić tokeny npm i sekrety CI oraz ustawić w .npmrc ignore-scripts i siedmiodniowe min-release‑age (alert CISA). Aktualizuję zależności falami, które da się cofnąć, i każdą sprawdzam Twoimi testami. Typowa aplikacja często zajmuje jeden wieczór. Dostajesz czysty plik lock i krótką listę zmian. W październiku 2025 jedna z bibliotek przypinała podatną wersję nodemailera, której żadna aktualizacja nie mogła podmienić, więc wymusiłem poprawioną wersję przez override w npm i jeszcze tego dnia audyt był czysty.

Bonus · #suchar

Suchar na deser

Gratis, jak pierwsza rozmowa. To samo poczucie humoru dostajesz w pakiecie z projektem.

Dlaczego dziewczyna rzuciła programistę JavaScript?Puenta

Bo składał same obietnice, a żadnej nie rozwiązał. Ba‑dum‑tss.

Co mają wspólnego Java i JavaScript?Puenta

Tyle, co kot i kotlet. Ba‑dum‑tss.

Ile jest 0.1 + 0.2 w JavaScripcie?Puenta

0.30000000000000004. Reszta idzie na podatki. Ba‑dum‑tss.

W 30 minut sprawdzisz, czy do siebie pasujemy

Ty przynosisz problem, ja pytania. Chcesz najpierw liczbę? Konfigurator pokaże godziny, widełki ceny i termin startu.

albo napisz na ciunkos@gmail.com

Po umówieniu dostajesz zaproszenie do kalendarza. Nic więcej do wypełniania.

Moja obietnica

  • Odpowiedź w 24 godziny. Odpowiadam w ciągu 24 godzin w dni robocze. Osobiście, nie bot. Wiadomości z weekendu: do poniedziałku, do 12:00.
  • Spóźnienie znaczy gratis. Jeśli się spóźnię, pierwsza godzina pracy jest za darmo. Nie musisz o to prosić.
  • Zakres na piśmie w 24 godziny. Bezpłatna rozmowa 30 minut bez prezentacji firmy, potem zakres i cena na piśmie w ciągu 24 godzin. Ty decydujesz.
  • Osoba, która wykona pracę. Rozmawiasz z osobą, która wykona pracę. Bez warstwy sprzedaży, bez przekazywania dalej.
  • Odzywam się tylko z czymś nowym. Odzywam się tylko wtedy, gdy mam dla Ciebie coś nowego. Nigdy „czy jest już decyzja?”.
  • Uczciwe „to nie dla mnie”. Jeśli nie jestem właściwą osobą, mówię to na rozmowie i wskazuję kogoś, kto jest.

Rozmowy w tym tygodniu · start pracy 3 listopada 2026 · Kontrakt B2B · Wrocław, zdalnie

Kod, domena i konta są Twoje od pierwszego dnia. Nic nie trzymam jako zakładnika.