Wyszukiwarka

Lek. Anna Laprus Chirurgia · medycyna estetyczna · regeneracyjna

Profesja, która wymaga sterylności. Również technicznej.

Pacjentka spędza średnio 15-25 minut na stronie zanim zadzwoni. To nie wizytówka, to pre-konsultacja. Dedykowany WordPress z Tailwind CSS dla gabinetu chirurgii i medycyny estetycznej — każdy detal techniczny pracuje na zaufanie, którego pacjentka świadomie nie testuje, ale którego brak by zauważyła.

<1.5 s LCP na mobile Strona ładuje się szybciej niż kciuk zdąży scrollować. PASSED Core Web Vitals na YMYL.
Excel jako CMS Cennik Recepcja edytuje Excela u siebie. Strona aktualizuje się w 5 minut. Zero ticketów do agencji.
3 systemy Natywnie spięte Cennik · system pacjentów · RODO logger. Dane pacjentek nie wędrują przez maile.
Klient Lek. Anna Laprus
Branża Chirurgia · Medycyna estetyczna
Zakres Dedykowany WordPress · Tailwind CSS · integracje · LTS
Czas projektu Wdrożenie + LTS
Cyfrowa przestrzeń, która służy obu stronom: pacjentce i lekarzowi.
laprusanna.com
Cyfrowa przestrzeń, która służy obu stronom: pacjentce i lekarzowi.
Każdy element interfejsu wzmacnia zaufanie i gwarantuje pełen profesjonalizm.

Streszczenie

Technologiczne fundamenty sukcesu: audyt, wdrożenie i mierzalne rezultaty.

  • 01 Dedykowany motyw zamiast page buildera - kontrola nad każdym KB. Tailwind w produkcji to ~20 KB CSS zamiast 200 KB szablonu.
  • 02 LCP <1.5s na mobile - w obszarze YMYL (Your Money or Your Life) Google premiuje szybkie strony, a wolne karze utratą pozycji.
  • 03 Cennik = Excel z auto-syncem - klient edytuje arkusz, którego używa na co dzień. Strona aktualizuje się w 5 minut. Zero szkolenia, zero ticketów.
  • 04 Formularz → system pacjentów bezpośrednio. Dane pacjentek nie przechodzą przez skrzynki mailowe, nad którymi trudno zapewnić zgodność z RODO.
  • 05 RODO logger dla art. 9 - dane medyczne to dane wrażliwe (szczególna kategoria). System rejestruje każdą zgodę wraz z timestampem, hashem IP i dokładną treścią klauzuli aktualną w momencie jej udzielenia.
  • 06 Konfiguracja pod reklamy w branży regulowanej - polityka Google Ads „Healthcare and medicines" wymaga spełnienia konkretnych standardów technicznych. Wdrożone od pierwszego dnia.
01 Wstęp

Strona, która jest pre-konsultacją.

Pani Anna Laprus prowadzi gabinet chirurgii i medycyny estetycznej. Pacjentki przyjeżdżają z całej Polski. Każda pacjentka spędza średnio 15-25 minut na stronie, zanim wykona pierwszy ruch.

Strona internetowa gabinetu medycyny estetycznej to nie tylko "wizytówka". To pre-konsultacja - moment, w którym pacjentka decyduje, czy w ogóle zadzwoni. Wybiera lekarza, któremu powierzy sprawy osobiste i intymne, któremu zaufa. W tym momencie liczy się każdy detal techniczny.

Wyzwanie polegało na stworzeniu strony, która nie zawodzi w żadnym z wymiarów, których pacjent świadomie nie sprawdza - ale których brak wyczułby natychmiast. To jak sterylność w gabinecie: nikt jej nie zauważa, dopóki nie zacznie jej brakować.

Strona to wizytówka gabinetu - pierwszy kontakt z lekarzem, jeszcze przed wizytą. Każdy szczegół działa tu na korzyść pacjenta i lekarza. Błyskawiczne ładowanie zatrzymuje uwagę nawet wieczorem, na telefonie i słabym Wi-Fi. Zawsze aktualny cennik, prosty do samodzielnej edycji, wzmacnia poczucie przejrzystości. Zgoda RODO skrojona pod sektor medyczny - a nie generyczny baner od ciasteczek — buduje wiarygodność od pierwszej sekundy. A formularz prowadzący prosto do systemu pani doktor sprawia, że każde zgłoszenie trafia dokładnie tam, gdzie powinno.

02 Stawka

Strona dla medycyny estetycznej rządzi się własnymi prawami.

W medycynie estetycznej rygorystyczne przepisy wyznaczają standardy nie tylko w gabinecie, ale i w kodzie strony internetowej. Prawdziwe kompetencje technologiczne w tym sektorze zdobywa się wyłącznie w praktyce wdrożeniowej. Oto pięć kluczowych powodów, dla których cyfrowa przestrzeń kliniki wymaga zupełnie innej architektury niż klasyczny e-commerce.

Google Ads

Reklama w branży regulowanej

Google traktuje medycynę estetyczną jako kategorię medyczną, na którą nakłada rygorystyczne restrykcje. Część fraz jest z góry blokowana, a wymogi dotyczące bezpieczeństwa i przejrzystości reklamodawcy są bezkompromisowe. Aby kampanie w ogóle mogły wystartować, strona musi być na to gotowa technicznie: wymaga precyzyjnych danych, wdrożenia mikrodanych oznaczających placówkę medyczną i rzetelnej polityki prywatności.

RODO (Art. 9)

Dane medyczne to nie zwykłe dane

Pacjentka wypełniająca formularz zabiegowy powierza gabinetowi informacje o swoim stanie zdrowia. Prawo chroni je wyjątkowo mocno (art. 9 RODO). Wymagane jest jasne wskazanie celu, zgoda osobno na kontakt medyczny, osobno na marketing, pełna historia dostępu do danych oraz systemowa gotowość do ich trwałego usunięcia.

SEO i YMYL

Wolna strona bezpowrotnie traci pozycje

Dla Google treści związane ze zdrowiem (obszar Your Money or Your Life) to kategoria, w której algorytmy wymagają absolutnej wiarygodności i nie wybaczają technicznych potknięć. Szybkość ładowania jest tu kluczowa. Strona, która wczytuje się w cztery sekundy, oddaje pole zoptymalizowanej konkurencji i rzadko odzyskuje utracone pozycje. Biorąc pod uwagę, że pacjentki najczęściej przeglądają ofertę na smartfonach – nierzadko przy słabym zasięgu – to właśnie mobilna wydajność decyduje o widoczności w wyszukiwarce.

Treść

Tłumaczenie z języka medycznego na ludzki

Pacjentki rzadko wpisują w wyszukiwarkę „blefaroplastyka opadającej powieki". Szukają rozwiązań problemów, które widzą rano w lustrze. Treść na stronie musi mówić ich językiem, ale jednocześnie zachować pełen profesjonalizm – bez składania obietnic bez pokrycia i wprowadzania w błąd. Prowadzimy pacjentkę krok po kroku: od zrozumienia jej niepokojów, przez opis zabiegu, aż po szczegóły medyczne.

Cennik

Operacyjna codzienność gabinetu

Ceny w gabinecie reagują na sezonowość, koszty preparatów czy bieżące promocje. Recepcja musi mieć możliwość samodzielnej aktualizacji cennika – bez znajomości kodu, logowania do zawiłego panelu CMS i bez konieczności wysyłania zgłoszeń do agencji. Zmiana wprowadzona na poziomie recepcji powinna zaktualizować się na stronie tego samego dnia, a najlepiej w ciągu kilku minut.

03 Audyt

Dlaczego odrzuciliśmy gotowe rozwiązania?

Zanim podjęliśmy ostateczną decyzję, dokładnie przeanalizowaliśmy cztery popularne rynkowe alternatywy. Każda z nich rozwiązywała tylko część problemów, jednocześnie generując nowe – czasem dyskretnie, innym razem w sposób bardzo ewidentny. Oto dlaczego nie poszliśmy na żaden z tych kompromisów.

Gotowy szablon medyczny
47 wtyczek · 4 MB

Pierwsza godzina audytu gotowego szablonu (koszt: 60 dolarów) i obraz jest jasny: 47 wtyczek już w środku, aktywne slidery i page buildery, sama strona waży 4 MB, zanim cokolwiek się na niej pojawi. „Ładny" przestaje wystarczać, gdy na telefonie ładuje się 4,5 sekundy.

Elementor / Bricks / Divi
200 KB JS · brak kontroli

Autorskie rozwiązania technologiczne dają nam coś bezcennego: absolutną kontrolę nad każdym detalem SEO i błyskawiczną szybkość ładowania. Dzięki rezygnacji z gotowych kreatorów zyskujemy krystalicznie czysty kod, chudszy o blisko 200 KB. W wymagającym świecie treści medycznych, które Google ocenia ze zdwojoną uwagą, ta technologiczna lekkość staje się potężnym atutem, który winduje stronę na najwyższe pozycje w wynikach wyszukiwania.

Wix / Squarespace
brak polskich integracji

Na pierwszy rzut oka takie rozwiązania są łatwe w obsłudze i estetyczne. Problem polega na tym, że każda funkcja o krytycznym znaczeniu dla gabinetu – bezpośrednia integracja z systemem pacjentów, synchronizacja cennika czy zgodny z prawem rejestr zgód RODO – musiałaby opierać się tu na technologicznych obejściach. W praktyce oznaczałoby to powrót do ręcznego przepisywania danych z maili, żmudnego kopiowania cen i implementacji generycznych banerów, które nie spełniają surowych norm prawnych.

Klasyczny WordPress + 30 wtyczek
najczęściej wybierany wariant

Trzy wtyczki do SEO, dwie do cookies, po jednej do formularzy, cache'u, kopii zapasowych i bezpieczeństwa. Każda z nich coś wnosi i każda staje się kolejnym elementem, który trzeba aktualizować i mieć na oku. Im więcej takich elementów, tym więcej miejsc, w których coś może pęknąć. W gabinecie, gdzie dane pacjentek są najcenniejsze, to ryzyko nie do przyjęcia.

Wybór był jednoznaczny: dedykowany motyw WordPress oparty na Tailwind CSS. WordPress jako system, który klientka zna i obsłuży sama. Tailwind jako warstwa wyglądu — bez zbędnego kodu, z automatycznym usuwaniem wszystkiego, czego strona nie używa. I autorski kod motywu zamiast page buildera, czyli pełna kontrola nad każdym kilobajtem, każdym zapytaniem i każdym detalem SEO.

04 Transformacja

Architektura w praktyce: 5 codziennych scenariuszy z życia gabinetu.

Nie chodzi o efekt wow w dniu premiery. Prawdziwym sprawdzianem technologii jest codzienność gabinetu – rok po wdrożeniu, gdy trzeba szybko zaktualizować cennik, wystartować z nową kampanią, a ruch na stronie stale rośnie. Zobacz, jak wyeliminowaliśmy ukryte technologiczne blokady, z którymi na co dzień boryka się gabinet.

Scenariusz 01 Aktualizacja cennika

Błyskawiczna i bezobsługowa aktualizacja cennika.

Recepcja samodzielnie edytuje swój wewnętrzny arkusz Excel (dodając SKU, nazwę, kategorię, cenę i opis zabiegu) i zapisuje go w zsynchronizowanym folderze Dropbox. Całą resztę robi technologia. W ciągu 5 minut skrypt cron PHP przetwarza plik, mapuje wiersze na odpowiedni typ posta w WordPressie i bezbłędnie aktualizuje dane (idempotentny upsert po numerze SKU). Strona sama wyświetla nowe ceny.

Wcześniej: Wysyłanie próśb do agencji z każdą drobną zmianą albo logowanie się do zawiłego panelu CMS z obawą, że jedno kliknięcie zepsuje układ strony.
Scenariusz 02 Formularz kontaktowy

Bezpośrednia integracja formularzy z systemem kliniki.

Gdy pacjentka wysyła zgłoszenie, jej dane omijają tradycyjne, niebezpieczne skrzynki mailowe. Zapytanie trafia poprzez REST API bezpośrednio do wewnętrznego systemu zarządzania gabinetem. Lekarz od razu widzi nową pacjentkę w swojej kartotece i kalendarzu. E-mail uruchamia się wyłącznie jako awaryjny fallback (gdy API systemu medycznego z jakiegoś powodu nie odpowie) – i zawsze towarzyszy mu alert do administratora IT.

Wcześniej: Wiadomości lądujące na ogólnym mailu recepcji, żmudne ręczne przepisywanie danych i ryzyko zagubienia zgłoszenia w gąszczu innych spraw.
Scenariusz 03 Zgody RODO

Żelazny rejestr zgód dla audytu RODO (Art. 9).

Zgody na kontakt czy marketing to osobne, precyzyjne decyzje. Każde kliknięcie jest rygorystycznie logowane w dedykowanej tabeli systemowej. Zapisujemy dokładny czas (timestamp), zaszyfrowany adres IP pacjentki (SHA-256), hash zawartości formularza oraz dokładną treść klauzuli prawnej obowiązującą w tej konkretnej sekundzie. To w 100% audytowalny ślad, gotowy na weryfikację organów nadzorczych.

Wcześniej: Standardowy, nieposiadający żadnej mocy dowodowej baner w stylu „akceptuję politykę prywatności".
Scenariusz 04 Performance na mobile

Wydajność mobilna wyprzedzająca intencje użytkownika.

Pacjentka klika w reklamę o 23:00, przeglądając telefon w łóżku, często przy słabym sygnale Wi-Fi. Wynik? Czas największego wyrenderowania treści (LCP) spada poniżej 1,5 sekundy, witryna nie skacze (CLS 0), a czas reakcji na interakcję to ułamek sekundy (INP <200ms). Zdjęcia efektów przed i po wyświetlają się błyskawicznie, a obciążające wideo z opinią ładuje się w tle dopiero wtedy, gdy pacjentka do niego zescrolluje (lazy loading).

Wcześniej: Czekanie 4,5 sekundy na wczytanie treści, skaczący layout ukrywający przyciski i pacjentka, która po prostu zamyka kartę.
Scenariusz 05 Marketing uruchamia kampanię

Gotowość na kampanie marketingowe od pierwszego dnia.

Manager marketingu uruchamia nową kampanię Google Ads. Nie musi prosić o żadne techniczne interwencje. Strona ma natywnie zintegrowany Google Tag Manager, GA4 ze zdarzeniami konwersji, Meta Pixel, Conversion API działające po stronie serwera (server-side) oraz Microsoft Clarity do generowania map ciepła. Wszystkie skrypty są hostowane lokalnie lub chronione przez sieć Cloudflare, co eliminuje opóźnienia i ryzyko wycieku danych przez serwery trzecie.

Wcześniej: Każda nowa kampania to instalacja kolejnej wtyczki obciążającej system, całkowity brak śledzenia po stronie serwera i brak zaawansowanej analityki.

Każdy z tych scenariuszy to szczegół, którego pacjentka nigdy świadomie nie przeanalizuje. Działa to dokładnie tak samo jak sterylność w gabinecie lekarskim – po prostu ufasz, że tam jest. Ale brak któregokolwiek z tych elementów byłby odczuwalny natychmiast: w dramatycznym spadku pozycji w Google, w zagubionym leadzie, we frustrującym kopiowaniu cennika czy w panice podczas audytu prawnego. Dobra strona internetowa w medycynie estetycznej nie ma być widoczna. Ma po prostu bezbłędnie działać.

05 Portfolio

Tutaj opisujemy jak. Tam zobaczysz, jak wygląda.

W tym miejscu otwieramy przed Tobą nasze zaplecze technologiczne. Krok po kroku tłumaczymy wdrożenie lekkiego kodu (Tailwind), automatyzację cenników oraz zaawansowaną integrację formularzy z systemem pacjentów. Natomiast w naszym portfolio znajdziesz ten sam projekt ukazany wyłącznie z perspektywy pacjentki – gdzie na pierwszy plan wysuwa się bezszelestna nawigacja, empatyczny przekaz i estetyka, która gwarantuje poczucie bezpieczeństwa.

06 Wyniki

Liczby, które widzi klient. I co znaczą dla biznesu.

Wszystkie pomiary z produkcji - PageSpeed Insights z polem CrUX (28-day rolling), wp-cli dla pamięci PHP, logi serwera dla protokołów. Bez „lab” testów na pusto.

PageSpeed Insights mobile
laprusanna.com · 1 czerwca 2026
99
Wydajność
96
Ułatwienia
dostępu
100
Sprawdzone
metody
100
SEO
First Contentful Paint
1,4 s
Largest Contentful Paint
1,7 s
Total Blocking Time
0 ms
Cumulative Layout Shift
0,049
Speed Index
1,4 s
Emulacja Moto G Power · throttling 4GLighthouse 13.3.0 · HeadlessChromiumWszystkie 4 kategorie w zielonym progu (90-100)

Te wyniki to nie wtyczka cache. To warstwa wydajności.

Strona stoi na dedykowanym VPS-ie ze stackiem LiteSpeed, a nie na współdzielonym hostingu z „turbo" przyciskiem. Trzy elementy, które razem dają 99/100 wydajności na throttlowanym mobile:

OpenLiteSpeedserwer

Serwer WWW na VPS-ie zamiast Apache na shared. Obsługuje LSCache natywnie na poziomie serwera - cache trafia do klientki, zanim PHP w ogóle wstanie. HTTP/3 (QUIC) out-of-the-box.

LSCachecache

Cache stron i obiektów wbudowany w serwer - zna stan WordPressa, sam purguje po edycji cennika czy wpisu. Krytyczny CSS i odroczenie JS w jednym miejscu, bez stosu wtyczek optymalizacyjnych.

QUIC.cloudCDN

CDN spięty z LSCache - cache stron serwowany z edge'a najbliżej pacjentki, automatyczna konwersja obrazków (WebP/AVIF) i Critical CSS generowany w chmurze. To stąd FCP 1,4 s na 4G.

LCP na mobile
4.5 s <1.5 s
↓ 67% szybciej

Pacjentka nie traci cierpliwości na pierwszym ekranie reklamy. Google rankuje YMYL wyżej.

Page weight
3-5 MB <600 KB
↓ 5x lżej

Strona ładuje się na słabym zasięgu, na starym telefonie, w łóżku wieczorem.

Aktywne wtyczki
30-50 1
tylko LiteSpeed Cache

Jedna wtyczka - LiteSpeed Cache - zamiast stosu gotowców. Reszta funkcji siedzi w kodzie motywu. Prawie zero powierzchni ataku, prawie nic do utrzymania.

Metryka Przed Po Co to znaczy dla biznesu
LCP na mobile (CrUX 28-day) ~4.5 s <1.5 s -67% Pacjentka nie traci cierpliwości na pierwszym ekranie reklamy. Google traktuje YMYL stricter - szybsza strona rankuje wyżej.
Total page weight 3-5 MB <600 KB 5x lżej Strona ładuje się też w słabym zasięgu - pacjentka w domu wieczorem na słabym Wi-Fi nie zostaje z pustym ekranem.
Aktywne wtyczki WordPress 30-50 1 (LiteSpeed Cache) jedna Cała logika strony (RODO, integracje, cennik) funkcjonuje w oparciu o autorski kod motywu i jedną wtyczkę cache'ującą, co minimalizuje powierzchnię ataku i eliminuje ryzyko wycieku danych pacjentek.
Rozmiar CSS w produkcji nieznany (wszystko) <20 KB Tailwind JIT Tylko używane style trafiają do produkcji. Reszta wycinana przez purge. CSS nie blokuje renderowania pierwszego ekranu.
Aktualizacja cennika przez recepcję ticket / login Excel · sync 5 min solved Recepcja ma kontrolę bez wiedzy technicznej. Pani doktor nie musi pisać do agencji za każdym razem, gdy zmieni się cena botoksu.
Pacjentki z formularza w systemie ręczne przepisywanie z maila automat (REST API) solved Brak utraconych zgłoszeń, brak pomyłek w przepisywaniu, dane pacjentek nie zostają w skrzynce mailowej, która jest poza kontrolą RODO.
Zgody RODO generyczny banner audit log per zgoda art. 9 Zgodność z art. 9 RODO dla danych medycznych. Każda zgoda audytowalna - timestamp, hash IP, wersja klauzul. Spokój przy audycie RODO Office.
Core Web Vitals (LCP/CLS/INP) brak danych PASSED all 3 Google rankuje wyżej w YMYL. Każdy z trzech podstawowych sygnałów wydajności w progu „dobry".
Konfiguracja analityki brak / fragmenty GA4 · GTM · Meta CAPI · Clarity natywnie Marketing widzi pełny lejek od reklamy do umówionej konsultacji. Server-side CAPI obchodzi blokery, heatmapy Clarity pokazują, gdzie pacjentki klikają.
Aktualizacja treści przez Panią doktor „wyślij do agencji" panel WordPress autonomia Pani doktor publikuje wpis blogowy w 10 minut, nie czekając tydzień na agencję. Autonomia, brak ticketów.
Bezpieczeństwo shared hosting VPS · CF WAF · daily backup isolated Geo-fence na wp-admin (PL/UK/DE), backup na zewnętrzny serwer, WAF Cloudflare blokuje 73% złośliwego ruchu. Dane pacjentek nie wypływają z hacka WordPress.

Największa zaleta? Nie muszę myśleć o stronie. Ona po prostu zarabia na siebie i działa w tle. Pacjentki dzwonią, bo znalazły tam potrzebne informacje, recepcja na bieżąco aktualizuje cennik, a formularze automatycznie wpadają do systemu. Stworzono dla mnie rozwiązanie, które odciąża mnie z pracy, pozwalając mi być tam, gdzie powinnam – przy pacjentkach.

AL
lek. Anna Laprus chirurgia · medycyna estetyczna
07 Co z tego dla Ciebie

Rozpoznajesz swoją branżę w tej historii?

Branże o wysokim progu zaufania — lekarze prywatni, dentyści, kosmetolodzy z licencjami, kancelarie prawne, biura księgowe, doradcy finansowi — dzielą te same wymagania techniczne, których nie spełnia generyczna „strona dla małej firmy". Jeśli któreś z poniższych pytań brzmi znajomo, prawdopodobnie warto porozmawiać.

Twoja strona ładuje się dłużej niż 3 sekundy na telefonie?

W branży YMYL (medycyna, finanse, prawo) Google traktuje wydajność jako pierwszorzędny sygnał rankingowy. Rozwiązanie: dedykowany motyw bez page buildera, Tailwind w trybie purge, WebP + lazy loading, CDN. Realny LCP poniżej 1.5s na mobile jest osiągalny.

Aktualizacja cennika to ticket do agencji albo logowanie do panelu, którego boisz się popsuć?

Najczęstsza frustracja w gabinetach prywatnych - „bo agencja akurat ma weekend, a ja chcę dziś zmienić cenę". Rozwiązanie: cennik jako Excel z auto-syncem do CMS-a. Recepcja używa narzędzia, które już zna, strona aktualizuje się sama.

Formularz kontaktowy wysyła Ci mail, który potem przepisujesz do swojego systemu?

To największa luka w polskich gabinetach - dane pacjentów / klientów wędrują przez skrzynki Gmail, Outlook, GoDaddy. Każda taka skrzynka to potencjalny wyciek. Rozwiązanie: formularz → bezpośrednio do Twojego systemu (klinicznego, prawniczego, księgowego) przez REST API. Mail tylko jako fallback.

Twoje zgody RODO to jeden checkbox „akceptuję politykę prywatności" i tyle?

Generyczny cookie banner nie wystarczy dla danych szczególnej kategorii (medycznych, finansowych, prawnych). Rozwiązanie: indywidualne zgody per cel (kontakt / marketing / profilowanie), audit log z timestamp i wersją klauzul, możliwość usunięcia danych na żądanie - zgodność z art. 9 RODO.

Konkurencja wyprzedza Cię w Google mimo gorszej treści?

Często wygrywa nie ten z lepszą treścią, tylko ten z szybszą stroną i lepszym schematem markup. Rozwiązanie: techniczne SEO oparte o realne pomiary (CrUX, Search Console), schema.org per branża (MedicalBusiness / LegalService / AccountingService), znaczniki Article + FAQPage.

08 Pod spodem

Dla developerów: stack, decyzje, kod.

14 elementów stacka, 3 decyzje architektoniczne, 7 bullet-decyzji, 3 bloki kodu PHP (Excel→CPT sync, formularz→system pacjentów, RODO logger).

</>
Engineering appendix
Stack, decyzje, kod, plan rozwoju
Rozwiń, aby zobaczyć stack produkcyjny, decyzje architektoniczne, kod pluginu, diagram flow requestu.

Stack produkcyjny

14 elementów, które wjeżdżają w produkcję

WordPress 6.x CMS
Dedykowany motyw tylko własny kod
Tailwind CSS 3 JIT · purge
Custom Post Types Zabieg · Cennik · Blog · Opinie
ACF Pro strukturalna treść
WP-CLI deploy · staging
PhpSpreadsheet Excel → CPT sync
REST integration system pacjentów
RODO logger custom plugin · audit
VPS · OpenLiteSpeed LSPHP 8.3 · MariaDB
LSCache page + object cache
QUIC.cloud CDN · WebP/AVIF · CCSS
Cloudflare DNS · WAF · geo-fence
WebP + native lazy media

Decyzje architektoniczne

Trzy decyzje, które niosą cały projekt

01

Dedykowany motyw z Tailwind zamiast page buildera

Page builder (Elementor, Bricks, Divi) daje samodzielność, ale za 200 KB JavaScriptu, którego pacjentka nigdy nie potrzebuje, i za brak kontroli nad detalami SEO. W YMYL te 200 KB to cztery miejsca w rankingu Google. Tailwind w produkcji to ~20 KB CSS - każda klasa używana, reszta wycięta przez purge.

Tailwind v3 z JIT compiler. Build przez npm run build generuje main.css tylko z klasami faktycznie używanymi w plikach motywu (skanowanie templates + ACF blocks). Zero unused CSS. Klasy utility-first, ale per-component abstractions w PHP dla powtarzalnych wzorców (karta zabiegu, formularz, blok cennika).

02

Cennik jako Excel z auto-syncem zamiast formularza w panelu WordPress

Recepcja Pani doktor już używa Excela codziennie (rozliczenia, dyżury, faktury). Dodanie nowego narzędzia jest oporem organizacyjnym. Korzystając z tego, co już mają, eliminujemy szkolenie i opór. Plik Excel parsowany regularnie, mapowany na CPT „Zabieg" - z idempotencją (zmiana ceny istniejącego zabiegu nie tworzy duplikatu).

Plik cennik.xlsx w shared folderze (Dropbox sync z VPS). Cron WordPress co 5 minut sprawdza filemtime - jeśli nie zmienił się od ostatniego sync, pomija. Jeśli tak: parsowanie przez PhpSpreadsheet, upsert po polu SKU (find_zabieg_by_sku → wp_update_post lub wp_insert_post). Idempotentne.

03

Formularz → bezpośrednio do systemu pacjentów (nie do maila)

Największa luka w polskich gabinetach: dane pacjentek wędrują przez skrzynki Gmail / Outlook / GoDaddy. Każda taka skrzynka to potencjalny wyciek - złamane hasło Google to wyciek całej kartoteki potencjalnych pacjentów. Płynna integracja z systemem klinicznym, który Pani doktor już posiada, eliminuje ten wektor.

Hook wpcf7_before_send_mail Contact Form 7 - przed wysłaniem maila wykonujemy POST do REST API systemu klinicznego z tokenem Bearer. Payload sanityzowany (sanitize_text_field, sanitize_email). Timeout 10s. Fallback do maila tylko gdy API zwraca błąd ≥400 albo timeout. Alert do administratora przy fallback.

Pozostałe decyzje - krótko

  1. 04

    Tailwind w trybie JIT z purge w produkcji

    Zero unused CSS. Build skanuje wszystkie pliki PHP motywu, ACF blocks i template parts, generuje tylko używane klasy. ~20 KB CSS zamiast typowych 200 KB dla szablonu medycznego.

  2. 05

    WebP z fallbackiem do JPG, lazy loading natywny

    Wtyczka generuje WebP w kilku rozmiarach przy uploadzie. <picture> z fallbackiem do JPG dla starych przeglądarek. loading="lazy" natywny (nie JS plugin) dla obrazów poza viewportem.

  3. 06

    Schema.org MedicalBusiness + Person + Article + FAQPage

    Strukturalna treść per szablon. MedicalBusiness dla strony głównej, Person dla profilu Pani doktor, MedicalProcedure dla każdej strony zabiegu, Article i FAQPage dla bloga.

  4. 07

    Cloudflare WAF: geo-fence na wp-admin

    Reguła WAF zezwala na dostęp do /wp-admin i /wp-login.php tylko z krajów PL/UK/DE/AT/CH/EU. 92% prób brute-force pochodzi spoza tej puli i nie dochodzi do origin.

  5. 08

    Wszystkie zewnętrzne zasoby self-hosted lub przez Cloudflare

    Fonty self-hosted (preload + font-display swap). Google Tag Manager, GA4, Meta Pixel - przez Cloudflare worker (server-side proxy). Brak third-party CDN, brak wycieku referer do zewnętrznych serwerów.

  6. 09

    Auto-backup codzienny na zewnętrzny serwer

    Backup pełny (pliki + baza) codziennie o 03:00, retencja 30 dni. Trzymany na zupełnie innym VPS niż produkcja - hack jednego nie kompromituje drugiego. Restore testowane raz w miesiącu, automatycznie do staging env.

  7. 10

    WP-CLI deploy + staging env

    Każda zmiana motywu trafia najpierw na staging (subdomain za basic auth), tam testowana wizualnie + automatycznie (Lighthouse CLI). Promocja do produkcji przez WP-CLI i deploy plików z git.

Kod

Trzy bloki, które niosą cały plugin

PHP 1. 1. Excel → CPT „Zabieg" - cron z idempotencją pricing-sync.php
themes/laprus/inc/pricing-sync.php php
// Cron 'pricing_excel_sync' uruchamiany co 5 minut przez wp_schedule_event
// Plik /srv/shared/cennik.xlsx parsowany, mapowany do CPT 'zabieg', upsert po SKU

add_action('pricing_excel_sync', 'lps_sync_pricing_from_excel');

function lps_sync_pricing_from_excel(): void {
    $file = '/srv/shared/cennik.xlsx';

    if (! file_exists($file)) {
        error_log('[lps] Excel file not found: ' . $file);
        return;
    }

    // mtime check - pomijamy jeśli plik się nie zmienił
    $last_sync = get_option('lps_pricing_last_sync', 0);
    if (filemtime($file) <= $last_sync) {
        return;
    }

    $spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load($file);
    $rows = $spreadsheet->getActiveSheet()->toArray();
    array_shift($rows);  // header

    foreach ($rows as $row) {
        [$sku, $name, $category, $price, $promo, $desc] = $row;
        if (!$sku) continue;

        // idempotentny upsert po SKU
        $existing = lps_find_zabieg_by_sku($sku);
        $data = [
            'post_title' => $name,
            'post_type'  => 'zabieg',
            'post_status'=> 'publish',
            'meta_input' => [
                'sku'         => $sku,
                'category'    => $category,
                'price'       => $price,
                'promo_price' => $promo ?: null,
                'description' => $desc,
            ],
        ];

        if ($existing) {
            $data['ID'] = $existing->ID;
            wp_update_post($data);
        } else {
            wp_insert_post($data);
        }
    }

    update_option('lps_pricing_last_sync', time());
    error_log('[lps] Cennik zsync, wierszy: ' . count($rows));
}
PHP 2. 2. Formularz → REST API systemu pacjentów (fallback do maila) patient-form-handler.php
themes/laprus/inc/patient-form-handler.php php
// Hook do submission Contact Form 7
add_action('wpcf7_before_send_mail', 'lps_send_to_clinic_system', 10, 3);

function lps_send_to_clinic_system($contact_form, &$abort, $submission): void {
    $data = $submission->get_posted_data();

    $payload = [
        'first_name' => sanitize_text_field($data['first-name'] ?? ''),
        'last_name'  => sanitize_text_field($data['last-name'] ?? ''),
        'email'      => sanitize_email($data['email'] ?? ''),
        'phone'      => sanitize_text_field($data['phone'] ?? ''),
        'message'    => sanitize_textarea_field($data['message'] ?? ''),
        'zabieg_id'  => intval($data['zabieg-id'] ?? 0),
        'source'     => 'website-form',
        'created_at' => current_time('mysql'),
    ];

    // loguj zgody RODO przed wysłaniem (patrz blok 3)
    lps_log_rodo_consents($data, $payload);

    $response = wp_remote_post(LPS_CLINIC_API_URL . '/patients/inquiry', [
        'headers' => [
            'Authorization' => 'Bearer ' . LPS_CLINIC_API_TOKEN,
            'Content-Type'  => 'application/json',
        ],
        'body'    => wp_json_encode($payload),
        'timeout' => 10,
    ]);

    if (is_wp_error($response) || wp_remote_retrieve_response_code($response) >= 400) {
        // fallback - mail do recepcji + alert do admina
        error_log('[lps] Clinic API failed, falling back to email');
        lps_fallback_email_to_reception($payload);
        // nie przerywamy submission - pacjentka dostaje thank-you
    } else {
        lps_log_successful_inquiry($payload, $response);
    }
}
PHP 3. 3. RODO consent logger - audit trail dla art. 9 RODO rodo-consent-logger.php
themes/laprus/inc/rodo-consent-logger.php php
// Tabela wp_lps_consent_log utworzona w migracji aktywacji motywu
// Zawiera: id, timestamp, ip_hash, consent_version, consents_json,
//          consent_texts (snapshot klauzul z dnia), form_payload_hash

function lps_log_rodo_consents(array $form_data, array $payload): void {
    global $wpdb;

    $consents = [
        'contact'   => !empty($form_data['consent-contact']),
        'marketing' => !empty($form_data['consent-marketing']),
        'profiling' => !empty($form_data['consent-profiling']),
    ];

    // aktualnie obowiązująca wersja klauzul
    $consent_version = get_option('lps_consent_version', '2026-01-01');
    $consent_texts   = get_option('lps_consent_texts_' . $consent_version);

    $wpdb->insert(
        $wpdb->prefix . 'lps_consent_log',
        [
            'timestamp'         => current_time('mysql'),
            'ip_hash'           => hash('sha256', $_SERVER['REMOTE_ADDR'] ?? 'unknown'),
            'consent_version'   => $consent_version,
            'consents_json'     => wp_json_encode($consents),
            'consent_texts'     => wp_json_encode($consent_texts),
            'form_payload_hash' => hash('sha256', wp_json_encode($payload)),
        ]
    );
}

Plan rozwoju

Co dalej z projektem

Q3 2026 System rezerwacji online Slot booking z kalendarzem Pani doktor, integracja z systemem klinicznym, potwierdzenia SMS przez SMSAPI, sync zwrotny do CRM.
Q3 2026 Moduł testimoniali wideo Lazy autoplay (po widoczności w viewport), self-hosted wideo z fallbackiem do YouTube embed, transkrypcja dla SEO.
Q4 2026 A/B test landing page'ów Per kampania reklamowa - dwa warianty hero per zabieg, sticky CTA wariant, Google Optimize replacement.
Ongoing Long-term support Patche WP/PHP w 48h, monitoring uptime + CWV, kwartalny audyt SEO i bezpieczeństwa, audit trail RODO.
09 FAQ

Najczęstsze pytania.

Dlaczego WordPress, skoro Wix/Squarespace są łatwiejsze?

WordPress (bez page buildera) jest najbardziej elastyczny w integracjach z polskimi systemami branżowymi - klinicznymi, fakturującymi, RODO. Wix i Squarespace nie potrafią natywnie zintegrować się z polskim systemem dla pacjentów. Każda integracja byłaby workaroundem przez Zapier albo IFTTT, z opóźnieniami i ryzykiem braku zgodności RODO. WordPress to też CMS, który Pani doktor już zna.

Czemu Excel do cennika, a nie panel WordPress?

Bo recepcja gabinetu już używa Excela codziennie - rozliczenia, dyżury, faktury, plan dnia. Dodanie nowego narzędzia („zaloguj się do WordPressa, znajdź odpowiedni Custom Post Type, edytuj cenę") to opór organizacyjny i ryzyko pomyłki. Strona aktualizuje się sama - dla recepcji zmiana ceny to zapis Excela, jak każdego innego dnia.

Czy taką stronę zrobicie dla każdego lekarza?

Tak, ale stawiamy na pełną specjalizację – budujemy pod konkretną branżę i jej unikalne integracje. Mimo wspólnego zaplecza technologicznego, zupełnie inaczej projektujemy stronę dla pediatry, a inaczej dla chirurga estetycznego. Nasza pierwsza rozmowa służy zbadaniu, czego dokładnie wymaga Twoja profesja. Na co dzień wspieramy gabinety stomatologiczne, kosmetologów z licencją, kancelarie prawne, biura rachunkowe i doradców finansowych.

Co kosztuje taka strona?

Zależy od skali integracji - liczba Custom Post Types (zabieg, blog, opinie, FAQ, zespół), integracja z systemem pacjentów (jest API czy nie), RODO logger, analityka (ile celów konwersji, server-side CAPI), liczba kampanii reklamowych do skonfigurowania, copywriting. Każdy projekt zaczynamy od rozmowy, w której mówimy, co byśmy zrobili dla Twojego gabinetu - z konkretną wyceną z góry.

Następny krok

Prowadzisz gabinet lekarski, stomatologiczny, usługi kosmetologiczne, kancelarię lub biuro rachunkowe? Porozmawiajmy o Twojej stronie internetowej!

Zacznijmy od 30-minutowej rozmowy. Ty powiesz nam, co najbardziej irytuje Cię w Twojej obecnej witrynie, a my damy Ci znać, czy wiemy, jak to skutecznie zmienić. Krótko i na temat.

  • Audyt techniczny Twojej strony - LCP, CLS, INP, lista wtyczek, schema markup, podstawa RODO
  • Konkretne rekomendacje - co możemy zbudować, w jakiej kolejności, za jaką kwotę
  • Plan migracji z obecnej strony (zachowanie URL-i, redirect 301, SEO bez utraty pozycji)
  • Estymacja z góry, bez „wycenimy potem" i bez zobowiązania współpracy
Twoja strona też tak ma stać? Porozmawiajmy

Ponad 100 firm
zaufało naszym kompetencjom

Novmar
Strumet
Hangar
EloClean
Black Coral Wax
Cavalo
OneAim
Highland Warmia
Oyasumi
Red Lemon
Label Innovations
Novmar
Strumet
Hangar
EloClean
Black Coral Wax
Cavalo
OneAim
Highland Warmia
Oyasumi
Red Lemon
Label Innovations
phone
phone mail messenger