Przemysław Zalewski

Next.js, z Vercelem i bez

Programista Next.js, który powie Ci też, kiedy Next.js jest problemem

App Router, Server Components, streaming, reguły cache, których nikt nie pamięta. Wdrażam Next.js, gdy na to zasługuje, i ratuję aplikacje tam, gdzie nie zasłużył: tydzień pomiarów, potem poprawki o największym efekcie.

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

Przemysław Zalewski
9lat TypeScriptu, Reacta i Node.js
2017pierwsza aplikacja w React na produkcji
~2/3zmergowanych PR w 2026 zbudowanych z agentami AI, prawie wszystkie przez mój review albo merge
300+wygenerowanych stron wdrażanych automatycznie

Brzmi znajomo?

Problemy z Next.js, które rozwiązuję w 2026

Kolejna krytyczna łatka Next.js: kto zaktualizuje naszą aplikację?

14 października 2026 Next.js wydał nadzwyczajną poprawkę dwóch krytycznych błędów, które pozwalały zdalnie wykonać kod bez logowania, a na jeden z nich nie ma znanego obejścia (blog Next.js). Poprawki trafiły do 16.4.1 i 15.5.28, wersja 14.x nie dostała żadnej.

Wdrażam łatkę tego samego dnia, gdy tylko przejdą Twoje testy. W październiku 2025 przed zewnętrznym pentestem utwardziłem aplikację w Next.js: CSP z nonce’ami przez middleware, API tylko w JSON‑ie wymuszające preflight przeciw CSRF i HSTS z preload.

Next.js 14: czy dostaje jeszcze poprawki bezpieczeństwa?

Nie. Next.js wymienia 14.x jako wersję bez wsparcia: łatki dostają tylko 16 (Active LTS) i 15 (Maintenance LTS), a pierwotny koniec wsparcia 15, czyli 21 października 2026, przesunięto na termin jeszcze nieogłoszony (polityka wsparcia Next.js).

Przenoszę aplikację na 16 krokami, które da się cofnąć: najpierw oficjalne codemody, potem zmiany łamiące zgodność po jednym pull requeście, każdy za testami i na wdrożeniu podglądowym. Trzy razy przeprowadzałem aplikacje przez główne wersje Next.js: dwie na Next.js 15 pod koniec 2024 i Patriot Mail na Next.js 16 w październiku 2025, dwa dni po premierze, z włączonym React Compilerem i Turbopackiem.

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

Rachunek z Vercela rośnie: przenieść Next.js na własny serwer?

Plan Pro na Vercelu to dziś 20 USD miesięcznego kredytu na zużycie, wprowadzany wszystkim zespołom od października 2025, a sam Vercel szacował, że około 7% zespołów zapłaci więcej (Vercel).

Najpierw mierzę, co napędza rachunek, na przykład dynamiczne renderowanie stron, które mogłyby być statyczne. Potem dostajesz jedną rekomendację z kosztem każdej drogi: dostroić aplikację na Vercelu albo z niego wyjść. W marcu 2026 naprawiłem padające wdrożenia aplikacji w Next.js, wyłączając testy i źródła aplikacji natywnych z jej funkcji serverless, a potem zmniejszyłem największą z 47 MB do 7 MB; w kwietniu przeniosłem wszystkie 74 trasy API do osobnego kontenera, który według szacunku zużywa od jednej piątej do jednej dziesiątej pamięci.

Strona na Next.js wolna na telefonie i oblewa Core Web Vitals?

Według Web Almanac 2025, opublikowanego w styczniu 2026, Core Web Vitals zalicza tylko 48% stron mobilnych (HTTP Archive). Wolna strona traci ludzi, za których zapłaciłeś w reklamach i SEO.

Szukam tego, co spowalnia stronę na prawdziwych telefonach: kaskad zapytań, force-dynamic na stronach, które mogłyby być statyczne, JavaScriptu, który nie musiał trafić do przeglądarki. Każda poprawka ma liczby przed i po. W lipcu 2026 aplikacja pocztowa na Next.js potrzebowała od kilku do kilkudziesięciu sekund, żeby pokazać aktualną skrzynkę; po przeniesieniu odczytów do lokalnej bazy każda kolejna strona ładowała się w 88 do 219 ms, a testy end‑to‑end z budżetem czasu blokują build, jeśli znów zwolni.

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

Dlaczego ja

Szybsza aplikacja, z liczbami przed i po

Sto żądań przy pierwszym wejściu, force-dynamic wszędzie, regresja przy każdym podbiciu wersji. Najpierw mierzę, potem naprawiam trzy rzeczy, które mają znaczenie, potem oddaję checklistę na resztę.

Strona widoczna, zanim dojdą dane

Jedna odpowiedź HTML, wolne części dochodzą, gdy są gotowe, bez hydratacji tam, gdzie jej nie trzeba. Zbudowałem to dla wyników agentów (przypadek niżej). Next.js też tak umie, jeśli nikt nie walczy z ustawieniami domyślnymi.

Vercel czy własny serwer: uczciwa decyzja

Next.js na własnym serwerze Node.js albo w Dockerze, albo część statyczna na Cloudflare. Czasem uczciwa odpowiedź brzmi „zostańcie i postawcie wszystko na Vercela”. Powiem, która to.

Łatki bezpieczeństwa tego samego dnia

Gdy wychodzi ostrzeżenie, Twoja aplikacja dostaje łatkę i wdrożenie tego samego dnia, za Twoimi testami. Potem przeszukuję kod pod tę samą klasę błędu. Jak to wyglądało przy React2Shell, opisuję w przypadku niżej.

Pokaz na żywo

Kaskada kontra strumień

Trzy osie czasu, mierzone na żywo w Twojej przeglądarce. Kaskada: dwanaście żądań po kolei, kształt strony, która pobiera dane w każdym komponencie. Równolegle: te same dwanaście naraz. Strumień: jedna odpowiedź HTML z Workera, pięć slotów przychodzi poza kolejnością.

Ładuję pokaz…

Zaznacz pod osią czasu to, co was dotyczy. To pytania, które zadaję na rozmowie ratunkowej, a werdykt zmienia się razem z zaznaczeniami.

Dowody

Praca, którą mogę pokazać

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

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ż: JavaScript

Centrum pomocy przeniesione z WordPressa do repo jako docs-as-code

Problem
Nieutrzymywany help na WordPressie: czerwony w audytach, bez sitemapy, wygasające certyfikaty, pluginy, których nikt nie rozumiał.
Co zrobiłem
Markdown w repo, wersjonowany z produktem, wszystkie języki generowane automatycznie, linkowanie wewnętrzne, 301 dla każdego starego adresu, help dopisany do Definition of Done.
Efekt
Jedna maszyna mniej do zepsucia na urlopie, dokumentacja zgodna z produktem, lepsze SEO i GEO, kontekst, który czytają agenci.

docs‑as‑code 301s i18n

Reakcja tego samego dnia na React2Shell i inne podatności

Problem
Krytyczne podatności w Reakcie, Node.js, WordPressie i OpenSSH spadają bez ostrzeżenia, a skanery z PoC przychodzą kilka dni później.
Co zrobiłem
Stały wzorzec: oficjalne źródło, łatka tego samego dnia, mitygacja w WAF, przeszukanie własnego kodu regexpem pod tę samą klasę podatności, flagi hardeningu Node.js, lektura dla zespołu.
Efekt
React2Shell załatany w dniu publikacji ostrzeżenia, na kilka dni przed uruchomieniem publicznych skanerów.

łatka tego samego dnia WAF przegląd kodu

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 Next.js

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.

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 Next.js, które zespoły poznają na produkcji

Next 15 przestał cache’ować handlery GET

Od Next.js 15 handlery GET i kliencki Router Cache domyślnie nie są cache’owane. Aplikacja podniesiona z 14 potrafi nagle dużo częściej odpytywać bazę (Next.js 15).

Każda instancja ma własny cache

Przy własnym hostingu cache siedzi w pamięci (domyślnie 50 MB) i na dysku każdej instancji. revalidateTag() na jednej nie czyści pozostałych, dopóki nie dodasz wspólnego cacheHandler (przewodnik self‑hosting).

„Failed to find Server Action” za load balancerem

Każdy build dostaje własny klucz szyfrowania Server Actions. Przy kilku instancjach ustaw wszędzie ten sam NEXT_SERVER_ACTIONS_ENCRYPTION_KEY (przewodnik self‑hosting).

nginx psuje streaming

Streaming z Suspense działa dopiero po wyłączeniu buforowania proxy, na przykład nagłówkiem X-Accel-Buffering: no. Bez tego strona przychodzi w jednym kawałku (przewodnik self‑hosting).

middleware.ts to teraz proxy.ts

Next.js 16 zastąpił middleware.ts plikiem proxy.ts na runtime Node.js, wymaga Node 20.9 lub nowszego i nie uruchamia już lintu w next build (Next.js 16).

Obejście middleware dotyczyło tylko własnego hostingu

CVE‑2025‑29927 wykorzystywała wewnętrzny nagłówek x‑middleware‑subrequest. Narażone były tylko wdrożenia next start i standalone, poprawka to 14.2.25 albo 15.2.3 (postmortem Vercela).

FAQ

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

Czy powinniśmy zrezygnować z Next.js?
Czasem. Jeśli produkt to strona z treścią, raczej nie. Jeśli to aplikacja rozwijana latami, ze stabilnym API, wdrażana poza Vercelem, framework może kosztować więcej, niż daje. Robię krótki audyt i daję odpowiedź z liczbami, włącznie z „zostańcie”. Jeśli odpowiedź brzmi „czysty React”, ta praca jest na stronie o Reakcie.
Co psuje się w App Routerze?
Fetch w każdym komponencie bez planu cache, server actions używane jako API, wszystko dynamiczne, bo jedna rzecz była, i aktualizacje, które po cichu zmieniają działanie cache. Mierzę, co kosztuje najwięcej, i od tego zaczynam naprawy.
Wdrożysz Next.js poza Vercelem?
Tak: serwer Node.js, Docker na VPS‑ie albo eksport statyczny z dynamicznymi kawałkami na Cloudflare Workers. Powiem, które funkcje tracicie i czy ich używaliście.
Ile kosztuje ratowanie aplikacji i ile trwa?
Pierwszy tydzień to audyt kodu Next.js, 30⁠–⁠40 godzin, z widełkami ceny podanymi wyżej: pomiar, czytanie, spisanie wniosków. Tygodnie od drugiego do czwartego: trzy poprawki o największym efekcie, każda za testem. Potem checklista, którą zespół przejdzie beze mnie. To sprintowy szczebel drabinki ofert.
Budujesz też nowe aplikacje w Next.js?
Tak, gdy pasuje: strony z dużą ilością treści, marketing plus aplikacja w jednym repo, zespoły, które już go znają. Z planem cache spisanym pierwszego dnia.
Od kiedy możesz zacząć?
Od 3 listopada 2026. Umów rozmowę, zaczniemy od tygodnia pomiarów.
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; około dwóch trzecich zmergowanych PR w dwóch produktach powstało z agentami. 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ę.
Czemu Next.js na własnym serwerze pokazuje inne dane po każdym odświeżeniu?
Każda instancja trzyma własny cache, a revalidateTag czyści tylko tę, na której się wykonał. Potrzebny jest wspólny cacheHandler i jeden klucz szyfrowania Server Actions dla wszystkich instancji (przewodnik self‑hosting).
Co się psuje przy przejściu na Next.js 16?
middleware.ts zmienia się w proxy.ts, minimum to Node 20.9, revalidateTag przyjmuje profil cacheLife, a next/image zmienia domyślne wartości: cache na 4 godziny i jakość 75 (Next.js 16).
Kolejna krytyczna łatka Next.js: kto zaktualizuje naszą aplikację?
14 października 2026 Next.js wydał nadzwyczajną poprawkę dwóch krytycznych błędów, które pozwalały zdalnie wykonać kod bez logowania, a na jeden z nich nie ma znanego obejścia (blog Next.js). Poprawki trafiły do 16.4.1 i 15.5.28, wersja 14.x nie dostała żadnej. Wdrażam łatkę tego samego dnia, gdy tylko przejdą Twoje testy. W październiku 2025 przed zewnętrznym pentestem utwardziłem aplikację w Next.js: CSP z nonce’ami przez middleware, API tylko w JSON‑ie wymuszające preflight przeciw CSRF i HSTS z preload.

Bonus · #suchar

Suchar na deser

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

Dlaczego Next.js nie chodzi na siłownię?Puenta

Bo ma już za dużo bundli. Ba‑dum‑tss.

Co pije Next.js po imprezie?Puenta

Dużo wody. Ma problemy z hydratacją. Ba‑dum‑tss.

Kiedy wyjdzie ostatnia wersja Next.js?Puenta

Nigdy. Zawsze jest następna. 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.