Wpisy bonusowe: jedna karta, jedna bramka, zero niespodzianek
Niedawno opisywaliśmy przebudowę newsfeeda: serwer wysyła dane, a karty składa przeglądarka. Obiecaliśmy wtedy, że ten sam model wejdzie w kolejne zakątki platformy — i właśnie wszedł w pierwszy z nich: kanał Bonusy na stronach fanpage'y.
Wpisy bonusowe to miejsce, gdzie twórcy dzielą się kulisami pracy, szkicami i materiałami dla subskrybentów. Do tej pory ich lista na fanpage'u była składana po stronie serwera, osobnym kodem niż karty w feedzie. Dwie implementacje tej samej karty to dwa miejsca na błędy — i faktycznie, każda miała swoje. Teraz karta wpisu bonusowego istnieje w jednym egzemplarzu: ta sama w feedzie i na fanpage'u, karmiona czystymi danymi.
Po drodze uporządkowaliśmy coś ważniejszego niż wygląd: zasady dostępu. Dotąd o tym, czy widzisz treść wpisu, decydowały dwa różne fragmenty kodu — jeden na kartach, drugi na stronie wpisu — i potrafiły się nie zgadzać. Karta mówiła „masz dostęp", strona mówiła „wykup subskrypcję". Teraz decyzja zapada w jednym miejscu, wszędzie tak samo, i jest szczodrzejsza: subskrybent wyższego progu automatycznie czyta wszystko z progów niższych, a posiadacz progu wskazanego przy płatnym wpisie czyta go bez dodatkowej opłaty — tak, jak podpowiada intuicja.
Sporo drobnic przestało uwierać przy okazji. Niezalogowany gość przeglądający fanpage widzi darmowe wpisy zamiast błędu strony. Bogato sformatowana treść wygląda na stronie wpisu tak samo jak na karcie. Przycisk zakupu naprawdę kupuje. A zaplanowane wpisy — nowość, o którą prosili twórcy planujący premiery — publikują się same o wyznaczonej godzinie, bez pamiętania o ręcznym klik.
Od strony bezpieczeństwa domknęliśmy szczelinę, zanim ktokolwiek zdążył jej użyć: dane listy wpisów niosły więcej, niż strona pokazywała — łącznie z adresami plików z płatnych wpisów. Teraz do przeglądarki jedzie dokładnie to, co masz prawo zobaczyć, ani bajta więcej.
Fundament „dane zamiast HTML" obejmuje już dwa duże obszary platformy. Kolejne — z tą samą zasadą: jedna karta, jeden kontrakt danych, żadnych bliźniaczych implementacji.