Przemysław Zalewski

React na produkcji od 2017

Zatrudnij programistę React, który pokaże w liczbach, że zadziałało

Dla zespołów produktowych, których aplikacja w Reakcie zwalnia, aktualizacje ciągle się przesuwają, a pull requesty od agentów czekają na review. Naprawiam interfejs, otaczam go testami w Playwright i pokazuję w PostHogu, czy użytkownicy z niego korzystają.

Rozmowy w tym tygodniu · start od zaraz · Wrocław, zdalnie

Przemysław Zalewski
2017pierwsza aplikacja w React na produkcji
9lat TypeScriptu, Reacta i Node.js
~2/3zmergowanych PR w 2026 zbudowanych z agentami AI, prawie wszystkie przez mój review albo merge
100 000+graczy Korony Krulów, mojej gry przeglądarkowej open source

Brzmi znajomo?

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

Czy aplikacja w React musi spełniać akt o dostępności (EAA)?

Od 28 czerwca 2025 europejski akt o dostępności wymaga, żeby platformy e‑commerce, banki i inne usługi dla konsumentów w UE były dostępne (AccessibleEU). Koszyk, którego nie da się przejść klawiaturą, to dziś ryzyko prawne, a do tego utracone zamówienia.

Stawiam WCAG 2.2 AA za automatyczną bramką axe i testuję ścieżki klawiaturą w Playwright przy każdym pull requeście. Zmiana, przez którą koszyka nie da się przejść klawiaturą, nie przechodzi buildu i nie trafia do Twoich klientów. W sierpniu 2026 sprawiłem, że cały interfejs aplikacji pocztowej skaluje się od 100 do 200 procent, przerabiając 122 sztywne rozmiary czcionek bez zmiany ani jednego piksela w domyślnym widoku, co spełniło WCAG 1.4.4 i etykietę Larger Text w App Store.

Wciąż Create React App, a npm audit nie przestaje krzyczeć?

Create React App jest porzucony i tkwi na webpack‑dev‑server 4, a poprawka luki CVE‑2025‑30360 z czerwca 2025, przez którą złośliwa strona może wykraść kod źródłowy w przeglądarkach innych niż Chromium, trafiła dopiero do wersji 5.2.1 (ostrzeżenie na GitHubie). Te ostrzeżenia same nie znikną.

Przenoszę aplikację na Vite z tymi samymi trasami i testami, a resztę zależności aktualizuję falami, które da się cofnąć. Przy typowej aplikacji to często jeden wieczór. W listopadzie 2023 zastąpiłem minifikator CSS, który ciągnął ponad 1000 paczek, jedną zależnością, co usunęło około 8000 linii netto z lockfile’a i dało mniejszy CSS.

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

Czy zatruty axios trafił do naszego lockfile’a?

20 kwietnia 2026 amerykańska CISA ostrzegła, że 31 marca atakujący opublikowali w npm wersje axios 1.14.1 i 0.30.4 z zależnością, która instaluje trojana zdalnego dostępu (CISA). Jedna zatruta instalacja w CI może wynieść każdy sekret, do którego ma dostęp.

Porównuję Twoje lockfile’e i cache z listą zatrutych wersji, przypinam bezpieczne wersje, razem z Tobą wymieniam tokeny i przestawiam CI na instalację wyłącznie z lockfile’a z wyłączonymi skryptami instalacyjnymi. Potem aktualizacje idą małymi falami, które da się cofnąć. W marcu 2026, rano w dniu przejęcia paczki axios w npm, zgłosiłem to zespołowi, sprawdziłem, że nasz lockfile ma starą wersję spoza zainfekowanych, przejrzałem własny komputer i zaleciłem zespołowi wyłączenie skryptów instalacyjnych i wstrzymanie świeżych instalacji.

Aplikacja w React zacina się po dotknięciu na telefonie?

Web Almanac 2025, opublikowany w styczniu 2026, pokazuje, że dobry wynik INP, czyli wskaźnika responsywności Google, ma tylko 77% stron mobilnych (HTTP Archive). Przycisk, który po dotknięciu nie reaguje, wygląda na zepsuty, więc ludzie naciskają go drugi raz albo wychodzą.

Profiluję wolne interakcje na danych od prawdziwych użytkowników z PostHoga, poprawiam komponenty blokujące główny wątek i pokazuję liczby przed i po. W 2026 przeniosłem sumy kafelków raportów Sandtime do wątku roboczego, według szacunku od 0,1 do 0,25 sekundy pracy głównego wątku na kafelek, i dodałem 15‑sekundowy bezpiecznik, który wymienia zawieszony wątek roboczy, zamiast zamrażać ekran.

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

Dlaczego ja

React bez podatku od frameworka

Stack dobieram pod produkt, nigdy pod CV. Vite i zwykły serwer, gdy to wystarczy, Next.js, gdy na to zasłuży, a czasem żaden framework po stronie klienta, bo jeden strumień HTML załatwia sprawę.

Dostępność, która przetrwa każde wydanie

WCAG 2.2 AA za bramką axe, ścieżki klawiaturowe testowane w Playwright, skalowanie tekstu do 200%. W kliencie poczty dla starszych osób, który budowałem, ten poziom utrzymał się przez kolejne wydania bez ręcznego audytu za każdym razem.

Każdy komponent widać w liczbach

PostHog od pierwszego dnia i plan zdarzeń dla każdej funkcji. Dashboard pokazuje, ilu użytkowników doszło do komponentu i ilu przeszło całą ścieżkę.

Pokaz na żywo

Komponent, który możesz edytować

Zmień kod i kliknij Uruchom. React 19 renderuje go na żywo na tej stronie, bez bundlera i bez budowania. Profiler pokazuje każdy commit i czas jego trwania.

Ładuję pokaz…

Zaznacz React.memo, kliknij Przerenderuj rodzica i patrz na licznik commitów w Profilerze.

Dowody

Praca, którą mogę pokazać

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

Desktopowy produkt do pomiarów 3D przeniesiony do przeglądarki, React w 2017

Problem
Amerykański producent przyrządów pomiarowych miał aplikację desktopową do wizualizacji skanów 3D i chciał tej samej funkcjonalności w przeglądarce.
Co zrobiłem
WebGL i three.js do skanów, React do interfejsu, backend .NET wokół biblioteki obliczeniowej klienta, płatności Stripe, testy regresji wizualnej, wspólne narzędzia zespołu. Wykresy pomiarowe liczone od zera, bez biblioteki, zsynchronizowane z widokiem 3D. Praca po angielsku przy dziewięciu godzinach różnicy czasu, z cotygodniowymi rozmowami.
Efekt
Wersja w przeglądarce dorównała desktopowej. Gdy klient ciął zespół z powodów budżetowych, sam wybrał, kogo zostawić, i byłem jednym z dwóch.

WebGL React 2017 1 z 2 zostawionych

Zobacz też: C# i .NET (legacy)

Patriot Mail: klient poczty z AI przez CASA Tier 2 do App Store

Problem
Nowy klient poczty z AI na web, iOS i macOS, budowany w Sanddev, potrzebował oceny bezpieczeństwa CASA Tier 2 od Google, zanim mógł czytać Gmaila, i miał działać dla starszych osób.
Co zrobiłem
Byłem głównym inżynierem w Sanddev. Napisałem plan dostarczenia, ukształtowałem wizję produktu i potraktowałem prompt injection przez niezaufaną pocztę jako ograniczenie projektowe, zanim jakikolwiek model dotknął skrzynki. Kontrole CASA i OWASP ASVS stały się zestawem testów Playwright na każdym pull requeście. WCAG 2.2 AA pilnuje automatyczna bramka axe.
Efekt
Poprowadziłem CASA Tier 2 do zaliczenia w styczniu 2026, z poprawkami po zewnętrznym pentescie, a coroczną ponowną ocenę, zatwierdzoną w październiku 2026, też prowadziłem; kwestionariusz zamienił się w test na każdym PR. W App Store na iOS i macOS od kwietnia 2026. Skalowanie tekstu do 200% i tryb spokojnej poczty dla starszych użytkowników. Przy tej ocenie pięć punktów wróciło z powodu braków w dowodach; najpierw poprawiłem kod, potem przesłałem uzupełnione dowody, i wszystkie pięć przyjęto 27 października.

CASA Tier 2 iOS + macOS WCAG 2.2 AA Otwórz ↗

Agent AI jako członek zespołu, pod wymuszonymi regułami

Problem
Agenci kodujący piszą kod szybciej, niż zespół zdąży go przejrzeć. Czteroosobowy zespół chciał tempa bez bagna na mainie.
Co zrobiłem
Napisałem zestaw reguł wspólny dla Claude Code i Codexa: mechaniczne kontrole zamiast spisanych zasad, bramki lint i testów dla bezpieczeństwa, powierzchni API i CSP, agenci na mainie z hookami, każdy PR przejrzany przez człowieka, treści z AI jawnie oznaczone.
Efekt
W 2026 około dwóch trzecich zmergowanych PR w dwóch produktach powstało z agentami, a prawie wszystkie przeszły przez mój review albo merge. Zmergowałem 260+ własnych PR i zrobiłem review 300+ cudzych. Mój własny wynik w tych dwóch produktach urósł z poniżej 1000 commitów w 2025 do 7500+ do października 2026.

~2/3 PR z agentami 300+ review 7500+ commitów w 2026

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 React

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.

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.

Mierzone, nie zakładane

PostHog w każdym projekcie od pierwszego dnia. Plan zdarzeń dla każdej funkcji i dashboardy, z których zarząd bierze liczby, zamiast o nie pytać.

Warto wiedzieć

Fakty o Reakcie, które gryzą przy aktualizacji

propTypes przestają ostrzegać, po cichu

React 19 usunął sprawdzanie propTypes i ignoruje je bez słowa. Zniknęły też defaultProps w komponentach funkcyjnych, więc stara walidacja propsów po prostu przestaje działać (przewodnik po React 19).

Koniec paczek UMD

Od Reacta 19 nie ma paczki UMD, więc zwykły tag script z react.js już nie działa. React zaleca CDN z ESM, na przykład esm.sh (przewodnik po React 19).

React2Shell bez Server Functions

CVE‑2025‑55182 (CVSS 10.0) dotknęła też aplikacje, które nie miały ani jednej Server Function. Wystarczyła obsługa Server Components (blog Reacta, grudzień 2025).

Pierwsze łatki były niepełne

Kto przeszedł na 19.0.3, 19.1.4 albo 19.2.3, musiał aktualizować drugi raz, do 19.0.4, 19.1.5 albo 19.2.4. Jeden z błędów potrafił zwrócić kod Server Function razem z wpisanymi w niego sekretami (blog Reacta).

Compiler działa na Reakcie 17 i 18

React Compiler 1.0 działa przed Reactem 19 z react‑compiler‑runtime i ustawieniem target. Expo włącza go domyślnie, w Vite i Next.js trzeba go włączyć (React Compiler 1.0).

Błędy nie są już rzucane ponownie

W Reakcie 19 nieprzechwycone błędy idą do window.reportError, a przechwycone do console.error. Narzędzia do śledzenia błędów oparte na ponownym rzuceniu mogą je gubić (przewodnik po React 19).

FAQ

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

Ile kosztuje programista React?
150⁠–⁠220 zł/h netto, zależnie od zadania. Kontrakt B2B na pełne obłożenie: 30 000 zł netto miesięcznie. Pełna tabela jest w cenniku.
Od kiedy możesz zacząć?
Od zaraz. Umów rozmowę teraz, ustalimy zakres wcześniej i zaczynam pierwszego dnia.
Pracujesz z Next.js?
Tak, z zastrzeżeniami. App Router, Server Components, cały zestaw. Jeśli Twój produkt to długowieczna aplikacja ze stabilnym API, powiem Ci, kiedy Next.js jest podatkiem, a kiedy narzędziem. Jest o tym cała strona: zatrudnij mnie do Next.js.
Jak testujesz kod w Reakcie?
Playwright do testów end‑to‑end i regresji wizualnej na wielu przeglądarkach i urządzeniach, axe do dostępności, testy jednostkowe tam, gdzie siedzi logika. W jednym projekcie kontrole bezpieczeństwa CASA od Google stały się zestawem testów Playwright na każdym pull requeście.
React Native też?
Wydany na iOS i Androida jako wrappery dla SaaS‑a i jako funkcje reklamowe w aplikacji podróżniczej. Natywnie tam, gdzie się opłaca, web tam, gdzie nie. Więcej na stronie o aplikacjach mobilnych.
Przejmiesz istniejący kod?
Tak. Zaczynam od tygodniowego audytu kodu w Reakcie, opisanego wyżej: ustalenia uszeregowane według ryzyka, plan z kamieniami milowymi i decyzja „idziemy albo nie”. Potem pierwszy pull request.
Używasz agentów AI do kodowania?
Tak, pod wymuszonymi regułami: bramki lint i testów, review każdego PR przez człowieka, oznaczanie pracy z AI. W 2026 około dwóch trzecich zmergowanych PR w dwóch produktach powstało z agentami, a prawie wszystkie przeszły przez mój review albo merge. Jak to wygląda na co dzień, opisuję na stronie o AI i agentach.
Nasz zespół już używa Claude Code. Co dodajesz?
Przepustowość review i reguły. W 2026 zmergowałem 260+ własnych pull requestów i przejrzałem 300+ cudzych. Reguły, hooki i bramki CI wkładam do Twojego repozytorium, więc agenci zespołu pracują pod nimi także po moim odejściu. Więcej na stronie o AI w Twojej firmie.
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ę.
Czy React2Shell dotyczy mojej apki, jeśli nie używam server actions?
Możliwe. Narażona była każda aplikacja z obsługą Server Components. Bezpieczne wersje to 19.0.4, 19.1.5, 19.2.4 i nowsze, bo pierwsze łatki były niepełne (blog Reacta).
Czy do React Compilera potrzebuję Reacta 19?
Nie. Wersja 1.0 działa na Reakcie 17 i 18 z react‑compiler‑runtime (React Compiler 1.0). Create React App jest wycofany, więc pierwszym krokiem jest zwykle przejście na Vite (blog Reacta).
Czy aplikacja w React musi spełniać akt o dostępności (EAA)?
Od 28 czerwca 2025 europejski akt o dostępności wymaga, żeby platformy e‑commerce, banki i inne usługi dla konsumentów w UE były dostępne (AccessibleEU). Koszyk, którego nie da się przejść klawiaturą, to dziś ryzyko prawne, a do tego utracone zamówienia. Stawiam WCAG 2.2 AA za automatyczną bramką axe i testuję ścieżki klawiaturą w Playwright przy każdym pull requeście. Zmiana, przez którą koszyka nie da się przejść klawiaturą, nie przechodzi buildu i nie trafia do Twoich klientów. W sierpniu 2026 sprawiłem, że cały interfejs aplikacji pocztowej skaluje się od 100 do 200 procent, przerabiając 122 sztywne rozmiary czcionek bez zmiany ani jednego piksela w domyślnym widoku, co spełniło WCAG 1.4.4 i etykietę Larger Text w App Store.

Bonus · #suchar

Suchar na deser

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

Dlaczego komponent bezstanowy nie ma żony?Puenta

Bo jest stanu wolnego. Ba‑dum‑tss.

Co bierze programista React na ryby?Puenta

Same hooki. Ba‑dum‑tss.

Dlaczego komponent React chodzi na terapię?Puenta

Bo każda uwaga rodzica wywołuje u niego ponowny render. 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 od zaraz · Kontrakt B2B · Wrocław, zdalnie

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