LucDoroDesign / Blog / Development

Statyczne HTML w 2026 — dlaczego zrezygnowałem z Reacta

Portfolio lucdoro.design było wcześniej na Next.js 14 z SSR, wieloma stronami, ISR, Vercel deploymentem. Wszystko „nowoczesne". Wszystko działało. I wszystko było 3× wolniejsze niż jeden HTML.

Zrobiłem migrację w tydzień. Dziś strona to jeden plik index.html (~165KB) + statyczne asset foldery. Serwuje ją zwykły Apache przed WordPressem (klasyczny hosting CPanel). Poniżej — konkretne liczby i argumenty po każdej stronie.

Metryki przed / po

Metryka Next.js SSR Static HTML
LCP2.4s0.3s
TTFB800ms90ms
JS bundle312KB8KB
Miesięczny koszt$20 (Vercel Pro)$0 (współdzielony hosting)
Build time (deploy)45s2s (scp)

Argumenty za Next.js

Zanim pojedziemy w krytykę — Next.js jest genialny do:

Moje portfolio to zero z tych. Jedna osoba, sześć sekcji, aktualizacja raz na miesiąc, żaden state poza scroll position i palette-switcher.

Kiedy static ma sens

  1. Content stały — teksty rzadko się zmieniają, nie potrzebujesz CMS-a
  2. Jedna osoba pisze i utrzymuje — brak konfliktu w PR-ach
  3. Zero user-generated content — brak formularzy zapisu, brak konta użytkownika
  4. Interakcje proste enough by CSS + vanilla JS je udźwignął
  5. Hosting ma znaczenie kosztowe (nie chcesz płacić $20/msc za portfolio które ma 300 odwiedzin miesięcznie)
Framework to jest tylko wtedy warty złożoności, kiedy oszczędza więcej czasu niż mnie kosztuje utrzymanie. Dla portfolio jedno-osobowego ten kalkulator wychodzi na minus.

Co konkretnie zrobiłem

1. Wyeksportowałem wszystkie strony Next.js do jednego HTML używając Puppeteer (rendered HTML → save to file, potem manual cleanup)

2. Zainlinowałem CSS (Tailwind → CSS custom properties, ~15KB po minifikacji)

3. Wywaliłem całe frameworkowe JS (React, hooks, next/router, next/image). Zamieniłem na ~200 linii vanilla JS dla:

4. Obrazy — zostawiłem jako standard <img> z loading="lazy" i srcset. Zero Next Image, zero optymalizacji runtime.

5. Deploy: scp index.html lucdoro-web:/home/p567739/public_html/. Bez CI, bez build-stepu, bez Vercela.

Co tracisz

Zabierz z tego: nie wybieraj frameworka bo „wszyscy tak robią". Wybieraj bo rozwiązuje problem który masz. Portfolio jedno-osobowe najczęściej nie ma problemu który React rozwiązuje.


PS. Piszę to na stronie która jest tym samym plikiem, o którym mówię. Meta.

Łukasz Dorociak, LucDoroDesign · Świętochłowice · 2026-06-30

Masz podobny projekt?

Napisz krótko czego potrzebujesz. Odpowiem z konkretem, nie z korpo-formułką.

Napisz na WhatsApp Napisz e-mail