po co nam kolejny widget czatu

Widgetów czatu w internecie nie brakuje. I tak zrobiliśmy kolejny, bo te, które mieliśmy na prawdziwym produkcie, ciągle wchodziły nam w drogę. Tu masz całe „dlaczego”: cztery rzeczy, które nas wkurzały, co zbudowaliśmy zamiast nich i ile nas kosztuje każda decyzja.
w skrócie
Mieliśmy produkt, klientów i widget czatu w rogu strony. Potem inny. Potem jeszcze inny. Każdy pierwszego dnia robił, co trzeba. Po kilku tygodniach każdy znajdował nowy sposób, żeby nas wkurzyć.
Wszystkie działały. Tyle że były robione dla firm z działem supportu, osobnym narzędziem do supportu i osobną linijką w budżecie. My byliśmy dwiema osobami, które cały dzień siedzą na Slacku i shipują w weekendy. Te widgety ciągle chciały, żebyśmy zostali inną firmą.
Spisaliśmy więc, co nas gryzie, i z każdego punktu zrobiliśmy zasadę. Spookat to te zasady, zapisane w kodzie.
co nas wkurzało
strona zwalniała
Skrypt czatu ładował się na każdej podstronie, u każdego odwiedzającego. Większość z nich nigdy czatu nie otworzyła. I tak za niego płacili, bajtami i czasem głównego wątku, a razem z nimi płacił nasz wynik w Lighthouse. Spędzaliśmy wieczory na odchudzaniu obrazków, a narzędzie do supportu dokładało ten ciężar z powrotem.
kolejna apka do niańczenia
Każdy widget miał własny inbox. Ten inbox był kartą, której nikt nie trzymał otwartej. Wiadomości leżały tam godzinami, a cały zespół siedział na Slacku, jedną kartę obok. Osoba, która znała odpowiedź, zwykle nie była tą, która miała otwartą apkę od supportu.
rachunek karał za wzrost
Płaciło się za stanowisko. Żeby odpisać mógł ktoś, kto zna odpowiedź, trzeba było wejść w wyższy plan. Bot liczył sobie za każdą rozmowę, więc im lepiej działał, tym więcej kosztował. Oba modele każą ci płacić więcej za to, że dobrze robisz support. Dziwna rzecz do kasowania.
wyglądał jak z 2014
Okrągły bąbel w kolorze z innej dekady, na stronie, nad którą się napociliśmy. Jedyną opcją był color picker. Na telefonie bąbel zasłaniał nasze własne przyciski.
co zbudowaliśmy zamiast tego
nic się nie ładuje przed kliknięciem
Launcher to jeden mały plik, poniżej 4 kb po gzipie. Build się wywala, jeśli plik urośnie ponad to. Przed kliknięciem robi 0 requestów do naszego API i nie ustawia żadnych ciasteczek. Panel czatu, jego fonty i połączenie z naszym serwerem czekają na kliknięcie.
To ma swoją cenę i wolimy ją powiedzieć wprost. Pierwsze kliknięcie musi pobrać panel, więc otwiera się chwilę później niż widget, który załadował wszystko razem ze stroną. Uważamy, że tak jest dobrze. Preloading kosztuje każdego odwiedzającego. Kliknięcie kosztuje tylko tego, kto naprawdę chce pogadać.
odpisujesz na slacku albo discordzie
Każda rozmowa to wątek na Slacku albo post na forum na Discordzie. Odpisujesz w wątku, a odwiedzający czyta to w widgecie, zwykle po paru sekundach. Zaczniesz wiadomość od // i zostaje notatką wewnętrzną, której odwiedzający nie zobaczy.
Nikt nie musi trzymać otwartej karty od supportu, bo karta, którą i tak masz otwartą, jest twoim inboxem. Odpisać może cały kanał, a odwiedzający widzi prawdziwe imię, nie „Konsultant 3”.
Jest też inbox w dashboardzie, na dzień, w którym zechcesz osobnego ekranu. Synchronizuje się z wątkiem.
Cena jest taka, że opieramy się na dwóch platformach, których nie kontrolujemy. Dlatego każda rozmowa siedzi w naszej bazie, a wątek na Slacku czy Discordzie jest jej lustrem. Nigdy nie czytamy historii ze Slacka ani Discorda, żeby coś odbudować. Jak ktoś zarchiwizuje kanał, twoje czaty dalej są w Spookacie.
za stronę, nie za stanowisko
Jedna cena za stronę, od 19 zł miesięcznie na broke af. Nielimitowani członkowie zespołu, nielimitowane czaty. Każda kolejna strona na tym samym koncie jest 30% taniej, na każdym planie, bez rozmowy z handlowcem.
Strona z czterdziestoma osobami na kanale płaci tyle, co solo founder. Nie przeszkadza nam to. Cały sens był w tym, żeby przestać kasować ludzi za to, że pozwolili odpisać jeszcze jednemu koledze. Jak doszliśmy do „za stronę”, opowiemy w osobnym poście.
wygląda jak twoja strona
Masz 8 stylów, 12 fontów, dowolny kolor akcentu, lewo albo prawo, launcher z ikoną albo pigułkę z własnym tekstem. Każdy styl udaje jakiś rodzaj strony, które ludzie naprawdę shipują, na przykład domyślny shadcn albo ciemny terminal dev-toola. Masz agenta? Powiedz mu, żeby dopasował czat do strony. Ma narzędzia do ustawienia stylu, fontu i akcentu, a „opublikuj” i tak klika człowiek.
co wycięliśmy celowo
Niektórych rzeczy brakuje, bo tak zdecydowaliśmy, a nie dlatego, że zabrakło czasu.
Żadnego własnego bota. Na cool guy podpinasz własnego agenta AI przez webhooki, reply API albo MCP. Twój model, twój rachunek. Nie kasujemy za odpowiedź, bo to nie my ją generujemy.
Żadnego śledzenia. Żadnych ciasteczek, fingerprintów ani analityki w widgecie. Nigdy nie zapisujemy adresu IP. Co widzi strona odwiedzającego, rozpisaliśmy krok po kroku na /privacy.
Żadnego darmowego planu. Dostajesz 14 dni na własnej stronie, bez karty. Potem płacisz. To też dostanie osobny post, bo ludzie pytają.
Żadnego „skontaktuj się z działem sprzedaży”. Ceny są na /pricing. DPA to jedno kliknięcie, a program partnerski to przycisk w dashboardzie.
czemu produkt, a nie skrypt na boku
Też jesteśmy vibe koderami. Pierwszy pomysł to był wewnętrzny hack: mały widget, który wrzuca wiadomości na kanał na Slacku, zrobiony w jedno popołudnie. Pierwsza wersja robiła dokładnie to i świetnie działała na localhoście.
Potem zaczęła się lista. Odpowiedź z wątku na Slacku musi trafić do właściwego odwiedzającego, na właściwej karcie, po tym jak telefon dwa razy zgubił połączenie. Ktoś, kto zamknął kartę, potrzebuje odpowiedzi mailem. Boty znajdują widget i zasypują kanał o 3 w nocy. Slack ma rate limity i OAuth, Discord ma swoje. Czat potrzebuje dark mode, layoutu na telefon i kontrastu, który przechodzi. Ktoś musi kasować stare rozmowy, zanim przyjdzie mail w sprawie RODO, robić backupy i dostawać alert, kiedy coś padnie.
Nic z tego nie jest trudne samo w sobie. Razem to produkt, który nigdy nie przestaje wymagać uwagi. Skoro zrobiliśmy te nudne 90% dla siebie, nie było sensu trzymać tego tylko dla siebie. 19 zł miesięcznie za stronę to mniej niż tydzień czyjejkolwiek pracy, naszej też.
dla kogo to jest
Dla ludzi, którzy shipują. Dla vibe kodera, którego weekendowy projekt nagle ma userów z pytaniami. Dla małych zespołów, które i tak cały dzień siedzą na Slacku albo Discordzie. Dla freelancerów i agencji, które stawiają strony klientom i chcą je oddać w czystym stanie (szczegóły na /partners).
Jeśli masz dział supportu z własnym narzędziem, własnymi stanowiskami i własnymi raportami, pewnie masz już, czego potrzebujesz. Spookat jest dla wszystkich, którzy nie chcą czegoś takiego mieć.
gdzie jesteśmy dziś
Spookat jest w early access. Zaproszenia wychodzą małymi partiami, a agent już teraz może sam zarejestrować stronę, którą potem przejmuje człowiek. Publiczny launch jest 31 października. Zapisz się w early access, a ta cena zostaje twoja na zawsze.
Mierzymy to, co obiecujemy. Razem z tym postem opublikowaliśmy test obciążeniowy na naszym produkcyjnym serwerze. W kolejnych tygodniach tak samo zważymy inne widgety, z metodą i surowymi danymi na wierzchu, żebyś mógł sam porównać nasze liczby z ich liczbami.
Masz dość wkurzania się? Zobacz, jak to działa.