Realizacja · Własny produkt SaaS

Mutterbox — analiza opinii klientów z raportem PDF

Właściciel hotelu albo aquaparku ma pod obiektem kilka tysięcy opinii i żadnego sposobu, żeby dowiedzieć się z nich czegoś konkretnego. Średnia ocena nic nie mówi, a przeczytanie wszystkiego to tydzień pracy. Mutterbox czyta je za niego i zwraca listę powtarzalnych problemów — każdy z cytatami ze źródła, nie z podsumowania.

4140 opinii Korpus demonstracyjny
4 serwisy Źródła opinii
HTML, PDF, CSV Formaty raportu
multi-tenant Architektura

Skąd się wziął

Problem jest banalny do opisania i trudny do rozwiązania: opinie o obiekcie leżą w czterech różnych serwisach, w liczbie, której nikt nie przeczyta, i w formie, z której nie da się nic policzyć. Właściciel wie, że „coś jest nie tak z recepcją", ale nie wie, czy to trzy osoby, czy trzysta.

Pierwsze podejście zakładało prostą klasyfikację i wykres. Okazało się bezużyteczne — wykres pokazywał, że 18% opinii dotyczy obsługi, i nikt nie wiedział, co z tym zrobić. Wartość leży nie w liczbie, tylko w zdaniu, które klient naprawdę napisał. Dlatego każda karta problemu w raporcie nosi cytaty wycięte z oryginałów, a nie parafrazy.

Druga rzecz, która wyszła dopiero na prawdziwych danych: opinie z różnych serwisów opisują to samo innymi słowami. Zbudowanie wspólnego słownika okazało się większą częścią pracy niż sama analiza.

Co trzeba było rozwiązać

Cztery problemy, które wyznaczyły architekturę

Google nie oddaje historii opinii

Oficjalne API zwraca maksymalnie pięć pozycji. Pełny zbiór trzeba pobierać zewnętrznym aktorem, co znaczy: koszt na obiekt i format, którego nie kontrolujesz.

Analiza modelem kosztuje przy każdym przebiegu

Przy tysiącach opinii rachunek rośnie szybciej niż wartość. Zadania trafiają więc do różnych modeli: tani do klasyfikacji, mocniejszy tylko do syntezy i weryfikacji.

Dane jednego klienta nie mogą wyciec do drugiego

Przy produkcie wielofirmowym to nie jest funkcja, tylko warunek istnienia. Izolacja stoi na dwóch niezależnych warstwach, a nie na pamiętaniu o WHERE w zapytaniu.

Raport musi wyglądać jak dokument, nie jak ekran

Klient wysyła go dalej — zarządowi, załodze, właścicielowi. To znaczy PDF ze składem, a nie wydruk strony internetowej.

Mechanizm

Z czego to jest zbudowane

Bez kluczy API produkt działa w całości — na korpusie demonstracyjnym i analizie słownikowej. To ten sam kod, tylko inna implementacja za interfejsem.

Trzon

Symfony 7.4 i Doctrine

Konta, organizacje, role, zaproszenia, logowanie dwuskładnikowe, kolejka i harmonogram.

Analiza

Router zadań do modelu

Każde zadanie idzie do modelu dobranego pod koszt i trudność. Zejście na dostawcę zastępczego zapisuje się w logu, żeby nie dało się go przeoczyć.

Koszt

Koszt liczony przy każdym przebiegu

Rachunek za analizę widać w panelu od pierwszego dnia. Bez tego marża na raporcie jest zgadywana.

Wyjście

Raport HTML, PDF i CSV

Plus link do udostępnienia i eksport danych. Skład PDF w czystym PHP, bez zależności od przeglądarki na serwerze.

Sprzedaż

Stripe z kredytami i limitami

Bez skonfigurowanych płatności limity po prostu nie obowiązują — produkt nadal działa w całości.

Bezpieczeństwo

Dwie warstwy izolacji najemców

Filtr na poziomie zapytań i osobne sprawdzenie dostępu, plus automatyczny test przechodzący po wszystkich trasach.

Wnioski z projektu

Tryb demonstracyjny doklejony obok produktu to pułapka. Pierwsza wersja miała osobną ścieżkę „demo" i zaczęła się rozjeżdżać z prawdziwą po dwóch tygodniach. Teraz kod jest jeden, a zmienia się tylko implementacja za interfejsem — dzięki temu nie ma czegoś takiego jak „działa w demo, nie działa u klienta".

Największym błędem było zostawienie na witrynie zdań o wersji demonstracyjnej. Przez dłuższy czas pod każdą podstroną, łącznie z regulaminem, wisiał komunikat „wersja demonstracyjna". To jest zdanie, które mówi odwiedzającemu „nie kupuj tego jeszcze" — i mówiło je długo po tym, jak produkt był gotowy.

Karty przykładowe na landingu były nieproporcjonalne. Karta problemu miała około 650 pikseli wysokości i stała naprzeciwko akapitu o wysokości 200. Wzrok szedł do ilustracji zamiast do argumentu. Lekcja: element pokazowy ma pokazać kształt, a nie odtworzyć cały raport.

Do wzięcia u siebie

Cztery rzeczy, które przenoszę dalej

01

Policz koszt operacji od pierwszego dnia

Jeśli produkt wywołuje model językowy, koszt pojedynczego przebiegu musi być widoczny w panelu, zanim pojawi się pierwszy płacący klient. Inaczej marżę poznajesz z faktury na koniec miesiąca.

02

Zbuduj wersję działającą bez kluczy API

Nie jako demo obok produktu, tylko jako zastępnik za tym samym interfejsem. Skraca wdrożenie u nowej osoby do jednej komendy i wyłapuje błędy, które w trybie „prawdziwym" chowają się za kosztem.

03

Izolację danych oprzyj na dwóch warstwach

Jedna zawsze kiedyś zawiedzie, bo ktoś napisze zapytanie z pominięciem filtra. Do tego test, który przechodzi po wszystkich trasach i sprawdza, czy najemca widzi tylko swoje.

04

Wyczyść komunikaty rozwojowe, zanim ruszysz ze sprzedażą

Zdania o wersji demonstracyjnej, notatki dla siebie w podpisach ilustracji, teksty pisane językiem dokumentacji wewnętrznej. Odwiedzający czyta je dosłownie.

Budujesz produkt? Porozmawiajmy

Multi-tenant, koszty modeli, skład PDF bez przeglądarki na serwerze, płatności, które muszą dać się wyłączyć. Opisz, gdzie stoisz.

Umów rozmowę