Case Study 01 · Jan Tekieli · Trener personalny
Od pierwszej rozmowy do wyników w Google po 13 dniach.
W kilka dni zbudowałem dla Janka nie tylko stronę trenera personalnego, ale podstawę długoterminowej obecności w Google. Najpierw wysłuchałem Janka, potem szybko pokazałem działający kierunek, a każdą kolejną zmianę podporządkowałem potrzebom klientów i lokalnemu SEO.

Janek jest trenerem personalnym w Krakowie. Ma wiedzę, doświadczenie i bardzo konkretny sposób pracy z osobami, które często boją się pierwszego kroku. Nie miał jednak miejsca w sieci, które opowiadałoby tę historię jego głosem i jednocześnie systematycznie zdobywało widoczność lokalną.
Nie zacząłem od technologii
Pierwszym etapem był zwykły wywiad. Rozmawiałem z Jankiem o tym, z kim ćwiczy, z jakimi obawami przychodzą klienci, jak wygląda bezpłatna konsultacja i co w jego podejściu jest naprawdę inne. Przejrzałem też jego social media. To tam znalazłem naturalny język, zdjęcia, opinie i pierwsze elementy marki, z których mogłem zbudować wiarygodny obraz człowieka, a nie anonimowego trenera z banku zdjęć.
Na podstawie tych materiałów przygotowałem pierwszą wizję strony w Lovable. Nie czekałem tygodniami na kompletny brief i idealne makiety. Chodziło o to, aby w kilka minut mieć coś działającego, co Janek może zobaczyć, ocenić i skorygować.
Pierwsza wersja była początkiem rozmowy
Janek oglądał kolejne wersje i mówił wprost, co brzmi jak on, a co wymaga poprawy. Na podstawie jego uwag korygowałem opisy oferty, sposób przedstawienia planów treningowych, konsultacji, cen, godzin pracy i samego studia. Zmieniałem nawet pojedyncze sformułowania, kiedy były zbyt techniczne albo nie pasowały do sposobu, w jaki Janek rozmawia z klientami.
W ten sposób design nie był osobnym etapem zamkniętym przed wdrożeniem. Powstawał razem z treścią. Najpierw zbudowałem jasny rdzeń: kim jest Janek, komu pomaga, jak pracuje i jak zrobić pierwszy krok. Dopiero potem sukcesywnie dodawałem ofertę, opinie klientów, filmy, FAQ, certyfikaty, formularz kontaktowy i kolejne podstrony.
SEO zaplanowane jako system, nie jednorazowa optymalizacja
Od początku pracowałem w dwóch horyzontach. Strona miała szybko zacząć odpowiadać na lokalne zapytania, ale jej struktura musiała też pozwalać na rozwój przez kolejne miesiące. Analizowałem sposób wyszukiwania usług, konkurencję i lokalne intencje. Zamiast pozycjonować jedną ogólną stronę na konkurencyjną frazę "trener personalny Kraków", zbudowałem osobne podstrony odpowiadające na konkretne wyszukiwania klientów - między innymi dla Ruczaju, Klin, Dębnik, Skotnik, Kobierzyna i Borku Fałęckiego. Dzięki temu Google może dopasować właściwą stronę do osoby szukającej trenera w swojej okolicy.
Do tego dodałem strony usługowe dla treningów indywidualnych, w parach, online i hybrydowych oraz treści dla początkujących, kobiet, mężczyzn i seniorów. Tematy wpisów planował Janek, korzystając ze swojej wiedzy i codziennych rozmów z podopiecznymi. Doradzałem mu, na co zwracać uwagę: jak mówić językiem klientów, nazywać ich realne problemy i odpowiadać na potrzeby, z którymi przychodzą do trenera. Z tej współpracy powstało kilka bardzo wartościowych artykułów, między innymi o kosztach trenera, pierwszym treningu, strachu przed siłownią i czasie potrzebnym, aby zobaczyć efekty.
Warstwa techniczna wspierała tę strategię: unikalne tytuły i opisy, canonicale, hreflang dla wersji polskiej i angielskiej, dane strukturalne, mapa strony, prawidłowy robots.txt oraz plik llms.txt ułatwiający agentom AI zrozumienie zawartości serwisu. Zadbałem również o Google Search Console, czytelne linkowanie wewnętrzne i możliwość publikowania artykułów jako szkiców przed ich indeksacją.
Dlaczego Astro i Cloudflare
Pierwsza wersja strony powstała w TanStack Start. To dobre narzędzie do budowania aplikacji, ale wraz z rozwojem projektu coraz wyraźniej widziałem, że serwis Janka jest przede wszystkim produktem treściowym. Miał szybko dostarczać dziesiątki stron ofertowych, lokalnych i artykułów, a nie zachowywać się jak rozbudowana aplikacja uruchamiana w przeglądarce. Dlatego świadomie przeniosłem cały projekt do Astro.
Astro zostało zaprojektowane właśnie dla stron opartych na treści. Domyślnie generuje lekki HTML i pozwala dodawać interaktywny JavaScript wyłącznie tam, gdzie jest potrzebny. U Janka są to pojedyncze elementy, między innymi formularz kontaktowy i galeria certyfikatów. Pozostała część serwisu dociera do użytkownika i robotów Google bez kosztu niepotrzebnej aplikacji klienckiej. To prostsza architektura, szybsze ładowanie i bardzo dobry punkt wyjścia dla SEO.
Stronę wdrożyłem na Cloudflare Workers. Oprócz szybkiego dostarczania treści rozwiązałem tam także mniej oczywiste problemy: wysyłkę formularza, obsługę przewijania filmów z opiniami, cache oraz bezpieczny proces publikacji. Każda zmiana może zostać sprawdzona lokalnie przed trafieniem na produkcję.
Ten wybór ma również mocne zaplecze na przyszłość. 16 stycznia 2026 roku Cloudflare ogłosiło przejęcie firmy tworzącej Astro. Zespół frameworka dołączył do Cloudflare i nadal rozwija Astro jako otwarte narzędzie na licencji MIT. Nie oznacza to uzależnienia Astro od jednego hostingu, ale daje obu technologiom wspólny kierunek rozwoju, szczególnie w obszarze szybkich stron, renderowania serwerowego i Cloudflare Workers.
Janek nie potrzebuje przy tym klasycznego panelu administracyjnego ani osobnego CMS-a. Treści i struktura strony pozostają w jednym, wersjonowanym projekcie. Dobrze przygotowane reguły oraz prompty sprawiają, że może opisać zmianę Codexowi, uruchomić stronę lokalnie, zobaczyć rezultat i sprawdzić produkcyjny build przed publikacją. Astro daje tu prostą, przewidywalną bazę, a agent AI pełni rolę bezpiecznej warstwy obsługi projektu.
Przed i po migracji
Migracja nie była zmianą technologii dla samej technologii. Każda decyzja upraszczała dostarczanie treści, wzmacniała SEO albo przekazywała Jankowi większą kontrolę nad dalszym rozwojem strony.
| Obszar | Przed | Po |
|---|---|---|
| Framework | TanStack Start | Astro |
| Renderowanie | Aplikacja kliencka i SSR | Statyczny HTML i wyspy |
| Hosting | Wcześniejsza konfiguracja | Cloudflare Workers |
| Struktura SEO | Kilka ogólnych stron | Usługi, grupy klientów, dzielnice i blog |
| Języki | Podstawowe tłumaczenia | Osobne URL-e PL/EN z hreflang |
| Wydajność | Wynik początkowy | 4 x 100 w PageSpeed |
| Zarządzanie | Zmiany przez wykonawcę | Rozwój przez właściciela z Codexem |
Strategia JavaScriptu: tylko tam, gdzie tworzy wartość
W Astro brak JavaScriptu po stronie przeglądarki jest punktem wyjścia, a nie dodatkową optymalizacją wykonywaną na końcu. Tekst, nawigacja, oferta, strony lokalne i artykuły docierają jako gotowy HTML. Użytkownik może od razu czytać treść, a robot wyszukiwarki nie musi uruchamiać aplikacji, aby ją zobaczyć.
Interaktywność dodałem selektywnie, w modelu wysp. Formularz kontaktowy i galeria certyfikatów otrzymują własny kod kliencki tylko wtedy, gdy jest potrzebny. Menu korzysta z niewielkiego, współdzielonego skryptu. Żaden z tych elementów nie wymusza hydratacji całej strony ani pobierania frameworka dla treści, która pozostaje statyczna.
- Treść bez JavaScriptu: najważniejsze informacje są dostępne natychmiast w HTML.
- Interaktywne wyspy: kod jest ładowany dla konkretnej funkcji, a nie dla całej witryny.
- Brak pełnej hydratacji: formularz, galeria i menu nie zamieniają dokumentu w ciężką aplikację kliencką.
- Prefetch po sygnale intencji: najechanie lub fokus na linku przygotowuje kolejną stronę przed kliknięciem.
Dzięki temu serwis zachowuje płynność kojarzoną z aplikacją, ale jego podstawą pozostaje lekki, odporny i łatwy do indeksowania dokument HTML.
Po 13 dniach mieliśmy już dowód, że kierunek działa
Poniższy zapis powstał 14 lipca 2026 roku, 13 dni po publikacji strony. Mobilny test PageSpeed Insights pokazał komplet wyników 100/100 dla wydajności, dostępności, dobrych praktyk i SEO. Jednocześnie lokalne frazy zaczęły pojawiać się na pierwszej stronie Google.

Na pierwszych pozycjach znalazły się między innymi zapytania "trener personalny Kliny", "trener personalny Dębniki", "trener personalny Skotniki", "trener personalny Kobierzyn", "trener personalny Czerwone Maki" i "trener personalny Borek Fałęcki". Fraza dotycząca kosztu treningu personalnego w Krakowie pojawiła się na drugiej stronie wyników. Jak na niespełna dwa tygodnie od startu, był to bardzo mocny sygnał, że architektura informacji, lokalne treści i fundamenty techniczne zaczęły działać razem.
Najważniejszy rezultat: Janek może rozwijać stronę sam
Nie chciałem stworzyć projektu, który po publikacji zacznie się starzeć. Przygotowałem dla Janka zasady i prompty do pracy z Claude Code oraz Codexem. Opisują one, jak uruchomić stronę lokalnie, jak wprowadzać zmiany, jak sprawdzić build i czego agent nie powinien robić. Dzięki temu Janek może dziś sam rozwijać ofertę i treści, pracując w bezpiecznych ramach.
To zmienia charakter współpracy. Nie jestem wąskim gardłem każdej korekty. Moja rola polegała na zbudowaniu kierunku, architektury i środowiska pracy, w którym wiedza Janka może być regularnie zamieniana w nowe treści i funkcje. Strona nie jest skończonym folderem reklamowym. Jest produktem, który właściciel potrafi dalej prowadzić.
Twój następny krok
Masz wiedzę, ale brakuje Ci systemu, który zamieni ją w działający produkt?
Zacznijmy od rozmowy. Ustalimy, co ma przynieść wynik teraz i jak zbudować podstawę, którą później możesz rozwijać samodzielnie.