Przewodnik po 162 wypożyczalniach kajaków na 14 rzekach wokół Warszawy, oparty na mapie, z samoobsługowym panelem dla firm, płatnościami online i powiadomieniami push.
W promieniu 150 km od Warszawy działa ponad 150 wypożyczalni kajaków na kilkunastu rzekach. To w większości małe, rodzinne i sezonowe firmy. Informacje o nich są rozproszone po nieaktualnych stronach, profilach w mediach społecznościowych i numerach telefonów przekazywanych z ust do ust.
Kto planował weekend na wodzie, nie miał jednego miejsca, w którym porówna rzeki, znajdzie wypożyczalnię na wybranym odcinku i przed wyjazdem sprawdzi prognozę.
Celem było stworzenie podstawowego źródła wiedzy o spływach wokół Warszawy: na tyle przydatnego, by kajakarze do niego wracali, i na tyle wartościowego, by właściciele wypożyczalni chcieli płacić za widoczność. Projekt miał jasno określone ograniczenia:
Jeden serwis w trzech warstwach: publiczny przewodnik oparty na mapie dla kajakarzy, generowana warstwa SEO dla wyszukiwarek i asystentów AI oraz samoobsługowy panel, w którym firmy zarządzają swoją obecnością i kupują promocję.
162 pinezki na 14 rzekach i w 38 miejscowościach, każda z telefonem, stroną www i wizytówką firmy. Bezpośrednie linki prowadzą do każdej rzeki, miejscowości i wypożyczalni.
Kilkudniowa prognoza na stronie każdej rzeki i miejscowości, z prostą podpowiedzią, czy zabrać kurtkę przeciwdeszczową.
54 strony generowane z bazy, po jednej dla każdej rzeki i miejscowości, z danymi strukturalnymi, kartami do social mediów i plikiem llms.txt dla asystentów AI.
Samoobsługowe konta z aktywacją i resetem hasła przez e-mail. Właściciele sami zarządzają wizytówką, filmem i promocjami.
Stripe Checkout dla wizytówek i promocji. Płatność jest potwierdzana webhookiem, dodatkowo weryfikowana w Stripe po powrocie klienta, a rachunek trafia na konto firmy.
Kajakarze obserwują rzekę, miejscowość albo konkretną wypożyczalnię. Firmy płacą za dotarcie do nich, a dzienne i tygodniowe limity chronią subskrybentów przed spamem.
Strony publiczne są generowane jako statyczny HTML z jednej bazy SQLite, a panel obsługuje niewielkie API w czystym PHP. Nie ma frameworka ani zależności po stronie serwera. Serwis działa na tanim hostingu, ładuje się szybko i prawie nic nie kosztuje w utrzymaniu. Elementy, po które zwykle sięga się do bibliotek, takie jak szyfrowanie Web Push i podpisy VAPID, powstały od podstaw i zostały zweryfikowane na referencyjnych danych testowych ze standardu RFC 8291.
Serwis nie zapisuje ciasteczek, więc nie potrzebuje baneru zgody. Analityka działa w PostHog w regionie UE bez trwałych identyfikatorów, fonty są serwowane z własnego serwera, a filmy z YouTube ładują się dopiero po kliknięciu. Ochronę przed spamem zapewniają limity prób, ukryte pole-pułapka i pomiar czasu wypełnienia formularza zamiast zewnętrznej CAPTCHY. Zasady haseł są zgodne z NIST SP 800-63B.
Każda wypożyczalnia ma darmową pinezkę. Pełna wizytówka to jednorazowe 299 zł, bez abonamentu. Promocje są sprzedawane jako pojedyncze powiadomienia push i wyceniane według zasięgu: od 10 zł za dotarcie do obserwujących daną firmę do 100 zł za wszystkich subskrybentów, z dopłatą za link prowadzący poza serwis.
Edycja klasyczna ma własną typografię i paletę, w której każda para kolorów ma sprawdzony kontrast pod kątem a11y. Do tego cały serwis ma drugą, w pełni funkcjonalną skórkę, opisaną niżej.
Edycja 8-bit jest dostępna pod adresem /8bit/ i można ją włączyć z menu motywów. Pokazuje te same dane na żywo jako mapę świata z 8-bitowej gry RPG: rzeki są rysowane z prawdziwych współrzędnych, miejscowości to domki, wypożyczalnie to questy, a pogoda to growy HUD.
Napędza ją własny, mały silnik bez bibliotek, który renderuje sprite'y zapisane jako ASCII art do formatu SVG. Kroje pisma zostały dobrane na podstawie pomiarów: jeden z popularnych fontów pikselowych odpadł, bo nie obsługuje polskich znaków. Ścieżkę dźwiękową tworzą trzy utwory na licencjach Creative Commons z OpenGameArt, z podpisami autorów we wbudowanym odtwarzaczu.
Większość implementacji przejął Claude Code. Moja rola przesunęła się w stronę product ownera i architekta: wyznaczania kierunku, podejmowania kompromisów i weryfikowania efektów. Największą różnicę zrobiły trzy praktyki.
Bieżąca praca toczyła się w jednej sesji, z małymi i częstymi commitami. Workflowy z wieloma agentami były zarezerwowane na przeglądy. Adwersarialny przegląd systemu powiadomień z udziałem 45 agentów potwierdził 16 problemów, a wszystkie istotne zostały naprawione przed startem. Taka głębia ma swoją cenę: jeden przegląd tego typu potrafi zużyć całe pięciogodzinne okno limitu.
Kluczowe decyzje są zapisywane raz i przenoszone do każdej kolejnej sesji: brak zewnętrznej CAPTCHY, baza danych jako jedyne źródło prawdy, zakaz wysyłki maili systemowych do firm z katalogu.
Podczas jednego z testów błędna edycja konfiguracji przełączyła wysyłkę maili z trybu plikowego na prawdziwą, a zaproszenie trafiło do prawdziwej firmy - na szczęście była to zaprzyjaźniona firma moich kolegów Wincent Sport, która posiada przykładową wizytówkę w serwisie. Od tego czasu testy z prawdziwą pocztą idą wyłącznie na moje skrzynki, dane demo zawierają tylko konto administratora, a każda automatyczna zmiana konfiguracji jest weryfikowana po fakcie.
AI sprawia, że budowanie jest tanie, więc wartość przesuwa się w stronę osądu: co budować, którym danym ufać i gdzie postawić granicę.
Po zaindeksowaniu strony i walidacji modelu biznesowego przystąpię do skalowania produktu w oparciu o domenę splywykajakowe.eu. Ten sam silnik będzie napędzał ogólnopolski przewodnik po rzekach, jeziorach i kanałach we wszystkich 16 województwach.
Kolejne wyzwanie jest bardziej handlowe niż techniczne. Teraz trzeba dotrzeć do właścicieli wypożyczalni, którzy prowadzą biznes przez telefon, a nie w dashboardach, i pokazać im, że miejsce na mapie jest warte ich czasu i pieniędzy. Najlepszy moment na tę rozmowę to poza sezonem, kiedy właściciele planują kolejny rok.
Równolegle tworzony jest case study SEO dla wypożyczalni wincentsport.pl, który jest pierwszym partnerem kajakipodwarszawa.pl.