Przejście do treści
Jacek Rudnicki — CV i twórczość
Strona internetowa

Jacek Rudnicki — CV i twórczość

Osobista strona lekarza, wykładowcy i autora — CV, książki, wykłady i galeria w jednym miejscu.

Wdrożone i utrzymywane — jacekrudnicki.pl ·

  • React
  • Vite
  • MUI
  • i18n
  • Lightbox
Krótki opis

Strona-wizytówka: dorobek naukowy, książki do pobrania i wykłady, w trzech językach.

Zrzuty ekranu

Pasek można przewijać w bok. Kliknięcie zrzutu powiększa go — dalej nawigacja strzałkami.

Pełny opis

Osobista strona internetowa Prof. dr. hab. n. med. Jacka Rudnickiego — pediatry, neonatologa i wykładowcy Pomorskiego Uniwersytetu Medycznego w Szczecinie, a przy tym kompozytora, autora książek i tekstów piosenek. Jedna strona typu single-page, która musi pomieścić dwa różne życiorysy naraz: naukowy i artystyczny.

CV, KTÓRE JEST WIĘCEJ NIŻ CV

Sekcja "O mnie" łączy zdjęcie, chipy z rolami ("Pediatra i Neonatolog", "Profesor PUM", "Kompozytor", "Autor i Artysta") i wielowątkową biografię — bo jedna etykieta zawodowa nie odda kariery, która obejmuje neonatologię, muzykę studencką, satyryczne rysunki prasowe i teksty do filmu Juliusza Machulskiego.

KSIĄŻKI I WYKŁADY DO POBRANIA JEDNYM KLIKNIĘCIEM

Piętnaście książek (PDF i DOCX) i dwadzieścia trzy prezentacje z wykładów (PPTX, DOCX) — każda jako osobny, statyczny plik, bez żadnego CMS-a. Wykłady mają wyszukiwarkę po tytule i rozwijaną listę, żeby dwadzieścia kilka pozycji nie przytłaczało od razu.

GALERIA Z LIGHTBOXEM

Portrety, grafiki i fotografie filtrowane po kategorii, z pełnoekranowym podglądem na kliknięcie.

TRZY JĘZYKI, JEDEN OBIEKT TŁUMACZEŃ

Polski, angielski i niemiecki, przełączane bez przeładowania strony — bez biblioteki i18n, jednym własnym kontekstem Reacta.

KONTAKT NA RÓWNI Z KANAŁAMI SPOŁECZNYMI

E-mail i telefon obok linku do kanału YouTube i wyszukiwarki publikacji na Empiku — bo część odbiorców trafia tu z książki, nie z wizytówki.


Technologie

Zakres prac: Osobisty projekt — design, implementacja frontendu, wdrożenie

Aplikacja frontendowa
  • React 19
  • Vite
  • MUI (Material UI) v7
  • Emotion
  • yet-another-react-lightbox
Testy
  • ESLint
  • Hand-rolled i18n context (PL/EN/DE)
  • Responsive breakpoints
Wdrożenie
  • Static hosting
  • Own domain
  • Content shipped as static files

Realizacja — architektura i technologie

7 min

Realizacja w jednym akapicie

To osobisty projekt — strona internetowa mojego taty, prof. dr. hab. n. med. Jacka Rudnickiego: pediatry i neonatologa, profesora Pomorskiego Uniwersytetu Medycznego w Szczecinie, a jednocześnie kompozytora, autora kilkunastu książek i tekstów piosenek. Zadanie było proste do nazwania i trudne do dobrego wykonania: jedna strona typu single-page, która musi pomieścić dorobek naukowy i artystyczny naraz, bez sprawiania wrażenia dwóch sklejonych ze sobą wizytówek.

Jedna osoba, dwa życiorysy

Sekcja CV zaczyna się od czterech chipów — "Pediatra i Neonatolog", "Profesor PUM", "Kompozytor", "Autor i Artysta" — bo żadna pojedyncza etykieta zawodowa nie odda tej kariery. Dalej biografia rozbita na sześć akapitów, każdy o innym aspekcie: wykształcenie i wojskowa akademia medyczna, kierownictwo Kliniki Patologii Noworodka i stypendia zagraniczne, tematyka badawcza (encefalopatia noworodków, komórki macierzyste w neonatologii, relacja medycyny z filozofią i sztuką), książki i teksty piosenek dla kilku zespołów oraz do filmu V.I.P. Juliusza Machulskiego, nagrody muzyczne i rysunki satyryczne w prasie, wreszcie drobne, osobiste detale — długie włosy, bo w czasie studiów w WAM było to niemożliwe; muszka noszona na wzór stryja. To ostatnie zdanie jest tam świadomie: CV, które nie zostawia miejsca na te szczegóły, byłoby po prostu nieprawdziwe dla tej osoby.

Piętnaście książek, zero CMS-a

Każda książka to jeden wpis w tablicy JavaScript — tytuł, okładka, ścieżka do pliku — renderowany jako karta z okładką, która przy najechaniu odsłania odznakę pobierania. Plik pobiera się bezpośrednio (download, target="_blank", rel="noopener noreferrer") prosto z katalogu statycznego. Dodanie kolejnej książki to jeden wiersz w pliku danych i wgranie PDF-a do folderu — żadnej bazy danych, żadnego panelu admina, bo dla strony jednego autora, który sam nie będzie codziennie zarządzał treścią, to byłaby architektura nadmiarowa.

Wykłady, które trzeba było najpierw poskładać

Dwadzieścia trzy prezentacje z wielu lat wykładów — od neonatologii przez socjologię po "Sztukę na dopingu" — w formatach PPTX, PPTM i DOCX. Komponent rozpoznaje typ pliku z samego rozszerzenia ścieżki i przypisuje mu ikonę oraz kolor chipa (pomarańcz dla prezentacji, niebieski dla dokumentów) — żadnego dodatkowego pola z metadanymi, bo rozszerzenie już niesie tę informację. Wyszukiwarka filtruje listę po tytule na żywo (useMemo), a siatka domyślnie pokazuje tylko kilka pierwszych pozycji — liczba zależna od szerokości ekranu (3 na telefonie, 4 na tablecie, 6 na desktopie, przez useMediaQuery z breakpointami MUI) — z przyciskiem "Rozwiń", który mówi wprost, ile pozycji jeszcze czeka. Zwinięcie z powrotem przewija płynnie do góry sekcji, żeby długa lista wykładów nie zostawiała użytkownika zagubionego gdzieś w środku strony.

Galeria jako osobna kolekcja, nie dodatek do CV

Portrety, grafiki i zdjęcia, filtrowane po kategorii przez pojedynczą tablicę allPhotos z polem category na każdym wpisie. Kliknięcie w miniaturkę otwiera pełnoekranowy podgląd przez yet-another-react-lightbox — jedna biblioteka, zero własnego kodu do obsługi klawiatury, gestów czy nawigacji strzałkami, bo to dokładnie ten rodzaj funkcji, którego nie warto pisać od zera dla strony wizytówkowej.

Własny i18n zamiast biblioteki

Trzy języki — polski, angielski, niemiecki — jako jeden zagnieżdżony obiekt JavaScript i prosty kontekst Reacta z funkcją t. Zamiast i18next czy react-intl, kilkadziesiąt linijek własnego kodu, bo strona ma stały, znany z góry zestaw tekstów, a nie ładowane dynamicznie treści. Ciekawy detal: część wartości w tym obiekcie to nie stringi, tylko funkcje — expand przyjmuje liczbę i zwraca gotowy tekst w stylu "Rozwiń (5 więcej)", a noResults przyjmuje wpisaną frazę i zwraca "Nie znaleziono wykładów pasujących do…" — prosty sposób na interpolację bez sięgania po pełny system pluralizacji, którego przy trzech językach i garści dynamicznych komunikatów po prostu nie potrzeba.

Nagłówek, który wie, kiedy się schować

Nawigacja jest przezroczysta na tle pełnoekranowego zdjęcia w hero, ale po przewinięciu (useScrollTrigger z progiem 100px) zyskuje półprzezroczyste ciemne tło i kurczy się z 80 do 60 pikseli wysokości — subtelna, ale świadoma decyzja: nawigacja nie może konkurować wizualnie ze zdjęciem, dopóki użytkownik faktycznie nie zacznie przewijać treści.

Kontakt bez hierarchii ważności

Cztery kanały kontaktu — e-mail, telefon, YouTube, wyszukiwarka publikacji na Empiku — pokazane jako cztery równorzędne, okrągłe ikony, bez podziału na "główny" i "dodatkowe". To celowe: część odwiedzających trafia na tę stronę po przeczytaniu książki i szuka kanału YouTube albo kolejnej publikacji, nie kontaktu biznesowego, więc żaden z tych czterech kanałów nie zasługuje na uprzywilejowane miejsce.

Co z tej realizacji wynika

Najmocniejsza lekcja z tej strony: nie każdy projekt potrzebuje architektury skalowalnej na wyrost. Piętnaście książek i dwadzieścia trzy wykłady jako statyczne pliki w tablicy JavaScript to nie jest uproszczenie z braku czasu — to świadomie dobrany rozmiar rozwiązania do rozmiaru problemu: jeden autor, treść zmieniająca się rzadko, zero potrzeby na CMS czy bazę danych. Rzecz, którą bym powtórzył: zanim sięgniesz po bibliotekę albo wzorzec architektoniczny, zapytaj, czy ten konkretny projekt kiedykolwiek urośnie do rozmiaru, który by go uzasadnił — a jeśli nie, kilkadziesiąt linijek własnego kodu jest lepszą odpowiedzią niż zależność, którą trzeba będzie utrzymywać.


Porozmawiajmy o planowanym projekcie

Pierwsza konsultacja jest bezpłatna i niezobowiązująca. Wystarczy krótki opis procesu oraz oczekiwanego rezultatu.

Porozmawiajmy o projekcie