Serwis treściowy plus jedna funkcja, która robi różnicę: mapa z dojazdem, terminarz albo media.
Katalog z mapą, serwis z rezerwacją terminów, strona z audio i ebookami.
Tu zaczyna się część, której nie da się kupić jako wtyczki. Mapa z liczeniem czasu dojazdu wykalibrowanym na realnych trasach, terminarz czytany z kalendarza po stronie serwera z płatnościami, albo odtwarzacz z miksem robionym przez serwer.
Każda z tych funkcji ma w środku decyzję, której model językowy sam nie podejmie — i właśnie ta decyzja odróżnia demo od czegoś, co działa przy stu użytkownikach.
W tym zakresie
01
Serwis treściowy z panelem
Strona, której treść zmieniasz sam: blog, katalog, wydarzenia, produkty. Panel to Strapi 5, front to Next.js.
Dwa osobne repozytoria połączone kontraktem OpenAPI. API publikuje statyczny plik kontraktu, front generuje z niego klienta i trzyma go u siebie w repozytorium.
Brzmi jak szczegół, a decyduje o spokoju: budowanie nie potrzebuje dostępu do API, więc jest deterministyczne, a każdą zmianę modelu treści widać jako zmianę w kodzie frontu — nie jako awarię na produkcji w niedzielę.
Co dostajesz
Panel z typami treści dopasowanymi do Twojej domeny, role i tokeny dostępu
Wgrywanie plików do własnego magazynu, podgląd, pola SEO przy każdym wpisie
Listy z filtrami i stronicowaniem, kategorie i tagi jako osobne strony
Sitemap i RSS aktualizowane automatycznie z treści
Co robi AI
Model treści z opisu domeny, komponenty listy i szczegółu, pola SEO, migracja danych przykładowych.
Gdzie potrzebny człowiek
Granice modelu (co jest relacją, a co komponentem), uprawnienia, wydajność zapytań, unikanie n+1, cache i jego unieważnianie.
post-daniela.eu — trzypoziomowy model treści: ośrodek, wydarzenie, turnus
02
Mapy, odległości i czas dojazdu
Mapa z punktami, liczenie odległości i czasu jazdy, sortowanie „najbliżej mnie” — bez opłat za tysiąc wyświetleń.
Haversine daje linię prostą, dwie własne krzywe zamieniają ją na kilometry drogą i minuty jazdy. Krzywe są wykalibrowane na 460 realnych trasach samochodowych od 400 m do 500 km. Mediana błędu czasu: 13,6 procent, na trasach spoza uczenia 13,5. Połowa szacunków mieści się w 6 minutach od wyniku prawdziwego routera.
Model językowy zaproponuje odpytywanie zewnętrznego API routingu przy każdym ruchu suwaka. To działa na demo i przestaje działać przy stu użytkownikach: dostawca blokuje ruch, strona zwalnia, a lokalizacja użytkownika wychodzi na zewnątrz. Nasze liczenie dzieje się w przeglądarce, więc lokalizacja czytelnika nigdzie nie wychodzi.
Co dostajesz
Mapa Leaflet z OpenStreetMap, bez kluczy do Google Maps
Odległość i czas dojazdu liczone w przeglądarce, ze znakiem „≈” i jawną informacją, że nie liczymy korków
Sortowanie po czasie dojazdu i „najbliższy punkt” bez odpytywania serwera przy każdym ruchu
Geokoder i router jako trasy serwerowe z barierami: jedno zapytanie na raz, odstęp, pamięć na powtórki, limit na adres IP
Skrypt kalibracyjny w repozytorium — wynik da się przeliczyć od nowa
Co robi AI
Pierwszy przebieg komponentów mapy, filtrowania i interfejsu.
Gdzie potrzebny człowiek
Kalibracja na prawdziwych trasach, bariery wobec dostawcy danych, filtr współrzędnych zerowych, dostępność pinezek i opóźnienie mapy do pierwszego malowania.
Wolne terminy czytane po stronie serwera, wybór terminu na stronie i płatność bez wychodzenia do zewnętrznego widgetu.
Użytkownik nie widzi zewnętrznego linku do kalendarza, tylko wolne terminy na stronie. Zapis wydarzenia przez konto serwisowe jest opcjonalny. Płatności Stripe z obsługą webhooka, model wydarzeń z terminami i opcjami (pokój, dodatki), potwierdzenia mailowe.
Co dostajesz
Terminarz czytany z kalendarza po stronie serwera
Model wydarzeń z terminami i opcjami: pokój, dodatki, limity miejsc
Płatności Stripe z obsługą webhooka i potwierdzeniami
Co robi AI
Komponenty terminarza i koszyka, pierwszy przebieg integracji.
Gdzie potrzebny człowiek
Spójność stanu przy równoległych rezerwacjach, obsługa webhooka, zgodność kwot i statusów.
Dowód: Płatności i integracja kalendarza są w kodzie repozytorium — pokazujemy je na rozmowie, bo z zewnątrz nie widać ich bez zakupu.
04
Funkcje medialne: audio, wideo, ebooki
Odtwarzacz z własnymi funkcjami, ebooki w wielu formatach, ciężkie pliki poza obrazem aplikacji.
W jednym z serwisów odtwarzacz pieśni pozwala regulować udział wokalu w pięciu krokach. Miks robi serwer: ffmpeg sumuje podkład z wokalem, skaluje sumę pod szczyt i wrzuca gotowy plik do magazynu. Nazwa pliku niesie skrót źródeł i przepisu, więc zmiana nagrania w panelu daje nowy plik, a stary cache przestaje być używany.
Dlaczego nie w przeglądarce: dźwięku miksowanego przez Web Audio nie da się wysłać na AirPlay, bo Safari nie zna `AudioContext.setSinkId`. Jeden element audio z gotowym plikiem gra wszędzie. Takich rzeczy nie ma w dokumentacji frameworka i model językowy sam ich nie sprawdzi.
Co dostajesz
Odtwarzacz z funkcjami pod treść, z miksem po stronie serwera i cache pod kluczem zależnym od źródeł
Generowanie ebooków w wielu formatach z jednego źródła
Ciężkie pliki w magazynie, poza obrazem aplikacji i poza repozytorium
Co robi AI
Interfejs odtwarzacza, konwersje formatów, pierwszy przebieg przetwarzania.
Gdzie potrzebny człowiek
Decyzje, których nie widać w dokumentacji: gdzie robić miks, jak kluczować cache, co trzymać poza obrazem.
Filtry, stan zapisany w adresie, stronicowanie, wyszukiwarka ze słownikiem synonimów.
Filtry po kategorii, lokalizacji i tagach, stan filtrów w adresie (link da się wysłać), stronicowanie albo doładowywanie, wyszukiwarka pełnotekstowa i słownik synonimów dla fraz, których użytkownik używa inaczej niż redakcja.
Pułapka, którą znamy z własnej awarii: trasa catch-all pod filtry cache’uje każdą permutację adresu, którą wymyśli crawler. U nas urosło to do 38 GB w 1,4 mln plików i położyło pięć usług. Dlatego w katalogu z automatu ustawiamy `noindex, follow` na widokach filtrowanych, listę dozwolonych wartości parametrów i limit tego, co w ogóle wchodzi do cache.
Co dostajesz
Filtry i sortowanie ze stanem w adresie
Wyszukiwarka pełnotekstowa ze słownikiem synonimów i skryptem sprawdzającym spójność reguł
Puste stany z sensowną podpowiedzią zamiast pustej listy
Formularz zgłoszenia wpisu do katalogu
Co robi AI
Komponenty listy, filtrów i wyszukiwarki, pierwszy słownik synonimów.
Gdzie potrzebny człowiek
Granice cache i indeksowania, lista dozwolonych wartości parametrów, wydajność zapytań przy rosnącym katalogu.
Praca nad szybkością mierzona narzędziem, z zapisem tego, co pomogło i co nie pomogło.
Pomiar tym samym silnikiem co PageSpeed, lokalnie, z flagami odcinającymi artefakt przeglądarki na Macu — bez nich pierwsze malowanie pada około 1,5 s później i cała analiza jest zmyślona. Mediana z kilku przebiegów, nie jeden wynik, bo pojedynczy przebieg mieści się w rozrzucie narzędzia.
Wynik z realnego projektu: telefon 81 → mediana 91 (rozrzut 87–92), waga strony 793 kB → 415 kB, fonty 166 kB → 105 kB i 10 plików → 5, dostępność 96 → 100 na telefonie i 92 → 100 na desktopie.
Co dostajesz
Raport z pomiarem przed i po, medianą z kilku przebiegów
Format AVIF, jakość obrazów dobrana pod nakładkę, własny subset fontów
Odłożenie ciężkich komponentów poniżej ekranu do pierwszego malowania
Sekcja „co sprawdzone i odrzucone” — razem z powodem
Co robi AI
Pierwszy przebieg optymalizacji i wykrywanie oczywistych strat.
Gdzie potrzebny człowiek
Pomiar, który mówi prawdę, i odrzucanie zmian, które na papierze wyglądają dobrze. Jedna taka „oszczędność 57 kB” dała CLS 0,22 i minus 11 punktów — cofnięta.
Dowód
toprawdziwe.pl — mediana 91 na telefonie, 415 kB wagi strony
Częste pytania
Ile funkcji mieści ten pakiet?
Jedna duża albo kilka mniejszych. Zakres ustalamy przy przeglądzie projektu, bo to on decyduje o nakładzie godzin.
Czy mapa kosztuje za wyświetlenia?
Nie. Używamy Leaflet i OpenStreetMap, więc nie ma opłat za tysiąc wyświetleń ani kluczy do Google Maps.
Pakiety
Ile to kosztuje?
Wyceniamy w godzinach, po rozmowie telefonicznej i przeglądzie projektu. Nasze ostatnie projekty zajęły od 15 do 45 godzin.