Przejdź do treści

Wielostronicowa witryna B2B — projekt własny · 2026

NewLab Systems

To projekt demonstracyjny zrealizowany z własnej inicjatywy. NewLab Systems to prawdziwa firma z okolic Poznania; witryna nie została przez nią zamówiona i nie jest jej oficjalną stroną.

Przebudowałem witrynę dystrybutora diagnostyki molekularnej jako ćwiczenie projektowe i front-endowe, wybierając temat, w którym odbiorca jest techniczny, a poprzeczka wiarygodności wysoko. To siedem ręcznie napisanych stron dzielących jeden arkusz stylów i jeden skrypt, z przełącznikiem polski/angielski, animacją hero na canvasie i interaktywnym panelem do przeglądania zawartości testów diagnostycznych. Nie ma frameworka ani kroku budowania — pliki są serwowane dokładnie tak, jak zostały napisane.

7
Stron
2
Języki
0
Kroków budowania
Strona główna NewLab Systems z ciemną sekcją hero, animowaną helisą DNA po prawej stronie i polskim nagłówkiem „Precyzyjna diagnostyka molekularna dla polskich laboratoriów”.
Strona główna. Helisa za tekstem jest rysowana na elemencie canvas.

Cel

Na czym polegał problem

  • Poćwiczyć projektowanie dla wyspecjalizowanego odbiorcy B2B, gdzie czytelnikiem jest osoba kupująca do laboratorium, a tekst musi być precyzyjny, a nie perswazyjny.
  • Zbudować naprawdę dwujęzyczną witrynę — kupujący są polscy, producent międzynarodowy — bez sięgania po framework.
  • Utrzymać całość jako pliki statyczne, żeby zobaczyć, co takie ograniczenie zmusza do zrobienia porządnie.

Moja rola

Wszystko: struktura, projekt graficzny, teksty w obu językach, wykonanie front-endu i konfiguracja wdrożenia.

Co zbudowałem

  • Siedem stron — strona główna, produkty, strona testu HPV, współpraca z producentem, technologia, o firmie i kontakt — dzielących jeden arkusz stylów i jeden skrypt.
  • Przełącznik polski/angielski obejmujący każdy tekst na stronie, łącznie z etykietami wykresów i statystyk, z wyborem zapisanym w localStorage, więc przetrwa nawigację.
  • Animowane pole cząsteczek w kształcie helisy DNA w sekcji hero, rysowane na elemencie canvas.
  • Interaktywny panel multipleks pozwalający filtrować kategorie i panele diagnostyczne oraz sprawdzić, które cele wykrywa każdy test.
  • Znak firmowy odtworzony jako osadzony, przezroczysty SVG, dzięki czemu pozostaje ostry w każdym rozmiarze.
  • Konfiguracja wdrożenia, która wymusza ponowną walidację współdzielonych zasobów przy każdym żądaniu i trzyma wewnętrzne notatki robocze poza publiczną witryną.

Ekrany

Interaktywny panel diagnostyki multipleks z wybieralnymi kategoriami i panelami nad siatką wykrywanych celów, takich jak grypa A, RSV A i kontrola wewnętrzna.
Panel interaktywny. Wybranie kategorii i panelu pokazuje dokładnie, które cele wykrywa dany test.
Strona produktów z numerowanymi kategoriami produktów w obramowanej siatce, nad ciemnym panelem opisującym kompleksowe rozwiązania laboratoryjne pod klucz.
Strona produktów.
Strona główna NewLab Systems na wąskim ekranie telefonu, ze skróconym nagłówkiem i tekstem hero ułożonym nad przyciskami wezwania do działania.
Ta sama strona przy szerokości 390 pikseli.

Narzędzia

Front end

  • HTML
  • CSS
  • JavaScript
  • Canvas API
  • Osadzony SVG

Podejście

  • Bez frameworka
  • Bez kroku budowania
  • Współdzielone zasoby
  • localStorage

Wdrożenie

  • Netlify
  • Reguły przekierowań i nagłówków cache

Wyzwania

Decyzje warte wyjaśnienia

Jeden skrypt dla stron, które nie mają wspólnych elementów

Każda strona ładuje ten sam plik JavaScript, ale helisa istnieje na jednej stronie, a panel multipleks na innej. Zasada, którą przyjąłem, brzmi: skrypt nigdy nie może zakładać, że element istnieje — każde wyszukanie jest zabezpieczone i wycofuje się, gdy celu nie ma. Bez tej zasady jeden brakujący element rzuca wyjątek i kładzie nawigację razem z przełącznikiem języka.

Przełącznik języka, który przetrwa nawigację

Na witrynie wielostronicowej bez frameworka oczywiste rozwiązanie resetuje język do polskiego przy każdym kliknięciu, przez co strona sprawia wrażenie zepsutej dla anglojęzycznego czytelnika. Zapisanie wyboru w localStorage i przywrócenie go przy ładowaniu to niewielki fragment kodu, który decyduje o różnicy między działającą funkcją a ozdobną.

Współdzielone zasoby i nieaktualny cache

Arkusz stylów i skrypt zachowują te same nazwy plików między wdrożeniami, więc powracający użytkownik może zostać z zapisanym w cache arkuszem i zobaczyć stronę w połowie zaktualizowaną — co przydarzyło mi się lokalnie podczas pracy. Konfiguracja wdrożenia wymusza teraz ponowną walidację tych zasobów przy każdym żądaniu. Kosztuje to jedno 304 i gwarantuje, że nikt nie zobaczy zepsutej wersji.

Osadzanie kontra współdzielenie

CSS i JS były pierwotnie osadzone w każdej stronie. Przy mniej więcej 63% objętości pliku oznaczało to około 237 KB powielone na sześciu stronach i sześć kopii każdej przyszłej zmiany. Przeniesienie ich do wspólnych plików było słuszną decyzją, ale to właśnie ona stworzyła dwa powyższe problemy.

Czego się nauczyłem

  • Ograniczenie „bez kroku budowania” zabiera siatkę bezpieczeństwa i zmusza do myślenia wprost o kolejności ładowania, cache’owaniu i defensywnym wyszukiwaniu elementów, zamiast ufać, że bundler się tym zajmie.
  • Konfiguracja i dokumentacja są częścią dostarczanego produktu. Reguła cache i przekierowanie ukrywające wewnętrzne notatki to tyle samo tego projektu, co układ strony.
  • Pisanie tekstów technicznych dla odbiorcy, który wie więcej od ciebie, jest najpierw zadaniem researchowym, a dopiero potem pisarskim.

Kod źródłowy

Repozytorium jest prywatne. Chętnie udostępnię je na życzenie.

Następny projekt

Stravo Media

Niezależna działalność, pod którą mieści się reszta tej pracy — pozycjonowanie oferty, strona, proces sprzedaży i system, który to wszystko obsługuje.

Czytaj dalej