1.  [HostGrade.pl](/) ›
2.  Metodologia

# Nasza metodologia

Opisujemy krok po kroku, skąd pochodzą ceny na HostGrade.pl, jak liczymy całkowity koszt posiadania i jak pilnujemy, żeby ranking wynikał wyłącznie z danych — nie z umów afiliacyjnych.

## 1\. Źródła danych cenowych

Ceny, parametry techniczne i warunki odnowienia pobieramy wyłącznie z publicznych, weryfikowalnych materiałów dostawców. Nie bazujemy na relacjach z BOK, emailach marketingowych ani oświadczeniach handlowców.

-   • **Oficjalne cenniki:** publicznie dostępne strony z cenami dostawcy (strona główna, strona produktu, strona planu).
-   • **Regulaminy i dokumenty prawne:** regulamin usług, cennik załącznikowy, polityka odnowień. Linkujemy do konkretnego dokumentu, gdy go cytujemy.
-   • **Dane po zalogowaniu:** wyłącznie tam, gdzie dostęp nie wymaga zakupu (panel klienta testowego, strefa partnerska). Zawsze zapisujemy datę weryfikacji.
-   • **Wewnętrzny zapis:** każdy dostawca ma plik `docs/providers/{slug}/provider.json` z kompletem danych, metadanymi scrapingu (`source_url`, `scraped_at`, `scraper_script`) i historią zmian.
-   • **Cykl weryfikacji:** co najmniej raz na 30 dni, a dla planów aktywnie promowanych częściej. Stan bazy: czerwiec 2026.

## 2\. Obliczanie całkowitego kosztu (TCO)

„Cena hostingu" na reklamach dostawców oznacza zwykle pierwszy okres z rabatem. Realny wydatek obejmuje także odnowienia. Dlatego porównujemy plany w horyzoncie dwuletnim:

TCO\_2lata = cena\_startowa + (cena\_odnowienia × liczba\_okresów\_w\_2\_latach)

Liczba okresów zależy od trybu rozliczeń planu (miesięczny, roczny, dwuletni). Promocja zwykle dotyczy wyłącznie pierwszej fakturacji, więc każde kolejne odnowienie liczymy po cenie cennikowej.

**Przykład:** Plan rozliczany rocznie z pierwszym rokiem za 37,50 zł i odnowieniem 399 zł/rok daje TCO\_2lata = 37,50 + (399 × 1) = 436,50 zł. Dla porównania „reklamowa" cena sugerowała 37,50 zł — realny koszt jest ponad 11× wyższy.

Wyliczenie można sprawdzić samodzielnie w [kalkulatorze TCO](/kalkulator/). Wartości podajemy brutto (z VAT) zgodnie z polskim standardem konsumenckim; w widoku planu można przełączyć na netto.

## 3\. Dyrektywa Omnibus — najniższa cena z 30 dni

Dyrektywa Omnibus (UE 2019/2161) wymaga, aby przy każdym komunikacie o obniżce pokazywać najniższą cenę z 30 dni przed promocją. Na HostGrade.pl realizujemy to po stronie danych, nie po stronie sloganów reklamowych:

-   • **Dzienne pomiary cen** planu zapisujemy w tabeli `price_history` z datą i źródłem.
-   • **Przy promocji** obok aktualnej ceny pokazujemy najniższą cenę z ostatnich 30 dni — to referencja prawna, nie cena „fikcyjna" z cennika.
-   • **Brak kompletu danych** (nowy plan, nowy dostawca poniżej 30 dni w bazie) oznaczamy wprost — zamiast zmyślać pokazujemy _„Zbieramy historię cen"_.
-   • **Uczciwy breakdown:** jeśli łączymy promocję dostawcy z naszym kodem rabatowym, rozbijamy oba składniki („promocja -X% + kod -Y% = do -Z%"), żeby czytelnik widział, skąd wynik.

## 4\. Dodatkowe koszty

Regulaminy i cenniki zawierają pozycje, które rzadko pojawiają się w komunikatach marketingowych, a które potrafią istotnie zmienić rachunek. Każdą taką pozycję zapisujemy w tabeli `hidden_costs` z kategorią, kwotą (jeśli jest znana) i linkiem do źródła.

-   • **Opłata aktywacyjna (setup fee):** jednorazowy koszt uruchomienia usługi, trzymany w kolumnie `setup_fee_pln`.
-   • **Odnowienie domeny:** zwykle liczone osobno od odnowienia hostingu i często droższe niż rok promocyjny.
-   • **SSL, backup, migracja:** niektóre plany mają te elementy w cenie, inne doliczają je jako dodatek — zapisujemy stan faktyczny.
-   • **Przekroczenie zasobów:** limit transferu, limit I/O, limit inode, overage w planach pay-as-you-go.
-   • **Kary umowne i rabaty wycofane:** warunki, w których rabat wygasa (np. brak automatycznego odnowienia, rezygnacja w trakcie okresu).

## 5\. Ranking — jak go liczymy

Ranking na HostGrade.pl jest w pełni algorytmiczny i deterministyczny: dla tych samych danych wejściowych silnik zawsze wypluje tę samą kolejność. Źródło (plik `packages/data-access/src/scoring/`) jest publiczne w naszym repozytorium — każdy może go przeczytać, przetestować i zgłosić błąd.

### 5.1. Sortowanie domyślne

W widoku listy hostingu/domen/VPS/SSL domyślne sortowanie to **TCO przez dwa lata rosnąco**. Im niższy realny koszt dwuletni (pierwszy rok + odnowienie), tym wyżej plan. Przełączniki "pokaż droższe najpierw", "po ocenie klientów" i inne — zmieniają wyłącznie kolejność wyświetlania, nie samą ocenę.

### 5.2. Cztery komponenty scoringu

Kiedy użytkownik wybierze konkretny use case (np. hosting pod WordPress albo sklep WooCommerce), silnik liczy cztery niezależne komponenty w skali 0–100, każdy odpowiada za inny aspekt oferty.

Komponent

Co mierzy

Wchodzi do rankingu?

Cena (priceScore)

Znormalizowane TCO\_2Y + kara za dużą różnicę między ceną startową a ceną odnowienia (powyżej 2,5× — 5 pkt, 3,5× — 10 pkt, 5× — 15 pkt).

Tak — **40 %**

Dopasowanie (featureScore)

Czy plan ma funkcje pod wybrany use case: backup, SSL, WordPress, LiteSpeed, Redis, staging itp. Wagi są różne dla "hosting pod WordPress" niż dla "VPS".

Tak — **60 %**

Wydajność (performanceScore)

Typ dysku (NVMe → SSD → HDD), LiteSpeed, Redis, a dla VPS dodatkowo RAM i CPU.

Nie (kontekst dla tagów opisowych). Wejdzie, gdy będziemy mieć telemetrię TTFB z 30 dni.

Jakość danych (dataQualityScore)

Start 100 pkt, kary za braki: TCO (−30), cena odnowienia (−20), typ dysku (−10), brak oceny (−5), 3+ pustych flag (−10), dane starsze niż 90 dni (−15).

Nie (metryka wewnętrzna, pilnuje żebyśmy nie ukrywali luk w danych).

### 5.3. Wynik zbiorczy (composite)

Dla widoków z use case (WordPress / sklep / VPS) liczymy wynik zbiorczy po prostym wzorze:

```
composite = featureScore × 0,60 + priceScore × 0,40
```

Dominuje dopasowanie do use case'u (60 %), bo inaczej najtańsza oferta zawsze wygrywała niezależnie od tego, czy naprawdę pasuje do potrzeb użytkownika. W widokach ogólnych ("Hosting", "Najtańsze hostingi") wracamy do czystego TCO rosnąco — composite nie jest używany.

### 5.4. Oceny literowe (A/B/C/D)

**Aktualnie NIE publikujemy** ocen literowych na stronach ofert. Dopóki nie mamy pełnego, audytowalnego breakdown'u "dlaczego plan dostał A" (telemetria TTFB, uptime, zweryfikowane SLA), wolimy nie nadawać takich ocen niż nadawać je arbitralnie. Kiedy będziemy gotowi, pojawi się tu osobna sekcja z progami i przykładem breakdown'u — do momentu, aż to się stanie, ranking opiera się wyłącznie na twardych danych opisanych powyżej.

### 5.5. Audyt i wersjonowanie

Każda zmiana wagi w silniku wymaga podbicia pola `WEIGHTS_VERSION` w `constants.ts`. Każdy przeliczony ranking jest snapshot'owany do tabeli `scoring_breakdown` razem z numerem wersji wag — dzięki temu możemy odpowiedzieć na pytanie typu "dlaczego plan X był 3. w marcu, a 5. w kwietniu" z dokładnością do jednego komponentu.

**Co algorytm ignoruje, z zasady:**

-   Flaga `affiliate_enabled` dostawcy — nie wchodzi do żadnej funkcji scoringowej. Jest test regresyjny, który sprawdza, że pole nie zostało przypadkiem dołączone.
-   Ręczny boost ani redakcyjny wybór "planu miesiąca" — nie istnieje.
-   Wysokość prowizji, jaką otrzymujemy od dostawcy — nie wpływa ani na ranking, ani na badge'e typu "Najtańszy".

## 5a. Statystyka rynkowa (kalkulator oszczędności)

Kalkulator oszczędności na [/kalkulator](/kalkulator/) pokazuje medianę, najtańszą i najdroższą ofertę dla wybranego segmentu (hosting / VPS / domena / SSL) po zastosowaniu Twoich filtrów. Każdy filtr jest bramką danych — zmiana suwaka RAM przelicza medianę od zera, nie ukrywa tylko kart.

-   • **Koszt\_24:** suma opłaty początkowej, przedłużeń mieszczących się w horyzoncie 24 miesięcy oraz jednorazowej opłaty aktywacyjnej. Gdy dostawca wymaga przedpłaty dłuższej niż horyzont, naliczamy rzeczywiste obciążenie na checkout (penalizacja prepay).
-   • **Trimming IQR (Tukey 1.5, dwustronny):** odrzucamy oferty leżące powyżej Q₃ + 1,5·IQR oraz poniżej Q₁ − 1,5·IQR. R-7 percentyl (NIST / Excel PERCENTILE). Obydwie strony są przycinane — tani promo bait też zniekształca medianę.
-   • **Ważenie dostawców:** grupujemy plany po `provider_id` i bierzemy medianę Koszt\_24 per dostawca. Jeden dostawca = jeden punkt danych, dzięki czemu provider z 7 planami nie dominuje mediany rynku.
-   • **Minimalna próba:** 3 oferty po oczyszczeniu. Jeżeli filtry zwęzą pulę poniżej tego progu, widget oszczędności znika, a komunikat prosi o rozluźnienie kryteriów (uczciwa porażka zamiast zmyślanej mediany).
-   • **Cache dzienny:** najpopularniejsze kombinacje (segment × tier × region) precompute'ujemy raz dziennie do tabeli `market_stats` (SCD Type 2, retencja 90 dni). Własne filtry użytkownika liczymy w locie i zapisujemy write-through.
-   • **Wersja polityki:** `IQR_POLICY_VERSION = 1`. Każda zmiana algorytmu (fence multiplier, metoda percentyla, reguła ważenia) wymaga równoczesnego bumpu stałej, aktualizacji tej sekcji oraz nowego hasza SHA-256 w golden teście `market-stats-golden.test.ts`.

## 5b. Oszczędność na stronie głównej (widget budżetu)

Widget _„Ile zyskasz"_ na [stronie głównej](/) liczy oszczędność vs. medianę konkurencji w oparciu o **miesięczne ceny odnowienia**, nie TCO mieszane z promocją. Zmieniasz suwak budżetu → kwota oszczędności przelicza się na żywo, 24-miesięczny horyzont.

-   • **Wzór:** `oszczędność = max(0, (mediana_odnowienia_mies − Twój_budżet_mies) × 24)`. Ujemna różnica (budżet powyżej mediany) klamruje się do zera — nigdy nie pokazujemy „ujemnych oszczędności".
-   • **Źródło danych:** pole `renewal_price_pln` z tabeli `pricing`, podzielone przez `billing_period_months`. Każda cena ma audytowalne pochodzenie — `source_url` i `scraped_at` (zgodnie z zasadą data provenance z sekcji 6).
-   • **Dlaczego odnowienie, nie TCO promo+renewal:** cena odnowienia to stabilny, długoterminowy koszt po wygaśnięciu promocji — to, co naprawdę zapłacisz w drugim roku. Porównywanie odnowienie-do-odnowienia jest obronne prawnie pod dyrektywą Omnibus: mediana to obiektywny benchmark rynkowy, a nie redakcyjny werdykt.
-   • **Horyzont 24 miesiące:** zgodny z polityką serwisu TCO = 2 lata. Ten sam okres pojawia się w kalkulatorze, w etykietach planów i w oficjalnej metodologii sekcji 5a.
-   • **Tier filtering:** mediana jest liczona wyłącznie w obrębie tej samej klasy zasobowej (MICRO / STANDARD / PREMIUM dla hostingu, POLSKA / GLOBALNA dla domen), żeby nie mieszać ofert Micro z Enterprise. Minimalna próba: **3 oferty** po tier-filtering i IQR-trimming (sekcja 5a); poniżej tego progu widget wyświetla statyczną wartość z ostatniego cache zamiast obliczać na niewystarczających danych.
-   • **Brak redakcyjnego boostu:** widget nie faworyzuje partnerów afiliacyjnych — „najtańsza oferta w Twoim zakresie" wskazuje plan z najniższą ceną odnowienia w tier, niezależnie od tego, czy jest to partner handlowy. Gwarancję tę utrzymuje test `no-editorial-boost.test.ts`.
-   • **Implementacja:** funkcja `computeRenewalBasedSavings` w `apps/web/src/utils/savings-formula.ts` jest czysta (brak side effects), pokryta testem jednostkowym (14 przypadków, w tym boundary, NaN, ujemne, zerowy horyzont i dane real-world).

## 5c. Wzrosty cen (prepay, VAT netto/brutto)

-   • **Wymagana przedpłata (prepay):** część dostawców publikuje cenę miesięczną, ale na checkout wymaga wpłaty 24 miesięcy z góry. Plan z prepay\_required = 24 miesiące na 12-miesięcznym horyzoncie kosztuje Cię _initial × (24 / okres\_rozliczeniowy)_, a nie _12 × opłata\_miesięczna_. W kalkulatorze plan z takim wzrostem ceny ma czerwony badge "Wymaga przedpłaty za N mies."
-   • **Opłata aktywacyjna (setup fee):** jednorazowe naliczenie na starcie. Zawsze doliczamy ją do kosztu pierwszego roku; karta planu wyświetla adnotację "Zawiera jednorazową opłatę aktywacyjną: X zł", żeby prezentacja była uczciwa nawet gdy suma przebija medianę.
-   • **Netto/brutto konsystencja:** wszystkie ceny w puli statystycznej są w _netto_. Każdy wiersz ma flagę `price_is_netto_in_source`; silnik rzuca twardy błąd, gdy otrzyma plan z flagą `false` — zamiast cicho policzyć medianę mieszaną. Zadanie seed-a: znormalizować brutto → netto przez `stripVat()`.

## 6\. Linki partnerskie — ujawnianie

Serwis utrzymujemy dzięki prowizjom afiliacyjnym. Zgodnie z wytycznymi UOKiK każdy link, który może wygenerować prowizję, jest oznaczony **#reklama** — etykieta pojawia się przy przycisku lub bezpośrednio w tekście.

-   • **Atrybuty HTML:** każdy link afiliacyjny ma `rel="sponsored nofollow noopener"`, zgodnie z wytycznymi Google.
-   • **Cookie afiliacyjne:** zapisywane u dostawcy dopiero po kliknięciu linku — zgodnie z RODO i zasadą minimalizacji danych.
-   • **Prowizja a ranking:** prowizja, którą otrzymujemy, nie wpływa na pozycję planu w rankingu. Weryfikuje to osobna reguła w bazie kodu i test regresyjny.

## 7\. Poprawki i zgłoszenia błędów

Dane się starzeją, dostawcy zmieniają cenniki w trakcie tygodnia, a regulaminy bywają aktualizowane bez notyfikacji. Jeżeli widzisz rozbieżność między naszą stroną a stroną dostawcy — zgłoś nam to:

-   • **Kontakt:** [kontakt@hostgrade.pl](mailto:kontakt@hostgrade.pl) — opisz plan, link do naszej strony i link do strony dostawcy.
-   • **Priorytet:** zgłoszenia dotyczące błędnej ceny lub błędnych warunków odnowienia weryfikujemy w ciągu 48 godzin. Pozostałe zgłoszenia (opis, parametry) obsługujemy w kolejce tygodniowej.
-   • **Ślad zmian:** każda korekta ceny odnotowana jest w `price_history` z datą i źródłem — historia pozostaje pełna, nawet gdy bieżąca wartość się zmienia.

## 8\. Czego nie robimy

-   × **Nie przyjmujemy opłat za pozycję.** Nie sprzedajemy miejsc w TOP 3, nie oferujemy pakietów „boost", nie zgadzamy się na „artykuł sponsorowany z oceną".
-   × **Nie ufamy cenom reklamowanym bez weryfikacji regulaminu.** Jeśli baner mówi „od 1 zł", a regulamin nakłada 24-miesięczną umowę z odnowieniem po cenie cennikowej — liczymy regulamin, nie baner.
-   × **Nie używamy subiektywnych superlatywów** w opisach planów. Zamiast „rewelacyjny", „bezkonkurencyjny", „rekomendowany przez ekspertów" podajemy twardą liczbę — cenę, TCO, parametr techniczny.
-   × **Nie zmyślamy dat weryfikacji.** Data „ostatnia weryfikacja" pochodzi z rzeczywistego pola w bazie, nie jest stałą tekstową.

## Dowiedz się więcej

-   [O nas — zespół i misja
    
    Kim jesteśmy, dlaczego powstał HostGrade.pl i jak finansujemy serwis.
    
    ](/o-nas)
-   [Kalkulator TCO
    
    Policz realny dwuletni koszt dowolnego planu hostingowego.
    
    ](/kalkulator)
-   [Transparentność
    
    Szczegółowy opis modelu biznesowego i compliance z dyrektywą Omnibus.
    
    ](/transparentnosc)
-   [Zgłoś błąd w danych
    
    Widzisz rozbieżność? Napisz — weryfikujemy krytyczne błędy w 48h.
    
    ](/kontakt)