Polski rynek paliw biomasowych — pellet drzewny, zrębka, trociny — ma skalę liczoną w miliardach złotych obrotu rocznie. Mimo tej wielkości handel pozostaje rozproszony: setki małych dostawców regionalnych, dziesiątki sklepów internetowych prowadzonych przez producentów, nieformalne grupy w mediach społecznościowych. Brakowało centralnego miejsca, w którym kupujący mógłby porównać oferty z całego kraju według ujednoliconych parametrów technicznych — klasy, kaloryczności, wilgotności, certyfikacji. Zbudowaliśmy je. Cztery wertykały, jedna baza danych, monorepo Next.js 15.
- Klient: Green Fuel Trading sp. z o.o.
- Branża: Paliwa biomasowe — pellet drzewny, zrębka, trociny
- Zakres: strategia, design, deweloperstwo, SEO, integracje (płatności, OAuth, transactional email)
- Stos: Next.js 15 · React 19 · TypeScript · Tailwind v4 · PostgreSQL (Neon) · Vercel · PayU · MapLibre · Resend · GA4
- Wynik: 4 serwisy produkcyjne live · 120+ artykułów SEO · 200+ stron lokalnych · CWV w zielonej strefie
Wyzwanie — agregacja rozproszonego rynku według wspólnych norm
Klient potrzebował platformy, która agreguje ofertę z całego kraju, prezentuje parametry zgodne z polskimi normami (PN‑EN ISO 17225‑2:2021‑10) oraz obowiązującym rozporządzeniem (Dz.U. 2025 poz. 618 dla pelletu klasy A1/A2), i obsługuje pełną ścieżkę zakupową — od wyszukania, przez zapytanie ofertowe i negocjację, po płatność online.
Dodatkowo: cztery odrębne wertykały (biomasa ogólnie, pellet, zrębka, trociny) miały działać jako osobne marki z własną tożsamością wizualną i pozycjonowaniem SEO, ale opierać się na wspólnej bazie danych i wspólnym koncie sprzedawcy. Jedno konto producenta, jedna oferta — wiele wertykałów, w których może się pokazać.
Zakres prac — 8 etapów
- Strategia i pozycjonowanie — analiza rynku, definicja czterech wertykałów, mapa konkurencji.
- Tożsamość wizualna — brandbook każdej z marek, system kolorystyczny, logotypy (sygnet + pełna forma).
- Architektura informacji — projekty UX/UI dla mobile i desktop, prototypy interakcji.
- Implementacja frontendowa — Next.js 15 App Router, React 19, Tailwind CSS v4, system designu w pakiecie współdzielonym.
- Backend i baza danych — schemat Postgres, ORM‑free SQL przez Neon serverless, migracje idempotentne.
- Integracje — uwierzytelnianie (Google OAuth + JWT), płatności (PayU), poczta transakcyjna (Resend), analityka (GA4 + Consent Mode v2).
- Treści i SEO — 120+ artykułów blogowych w czterech wertykalach, 200+ stron lokalnych generowanych z bazy danych.
- Wdrożenie, testy, optymalizacja — cztery osobne projekty na Vercel, ciągłe wdrażanie, optymalizacja Core Web Vitals.
Główne funkcjonalności
Dla kupującego
- Wyszukiwarka ofert z filtrowaniem po kategorii, województwie, klasie jakości i parametrach,
- Interaktywna mapa Polski z 16 województwami i geolokalizowanymi ofertami,
- Karta produktu z pełną specyfikacją techniczną oraz tabelą wymagań prawnych dla danej klasy,
- Alerty cenowe z modalem rozpoznającym województwo na podstawie kodu pocztowego,
- Zapytanie ofertowe (RFQ) z routingiem na skrzynkę sprzedawcy,
- Czat wbudowany w platformę,
- Płatności online: BLIK, karty Visa i Mastercard, szybkie przelewy, Google Pay, Apple Pay.
Dla sprzedawcy
- Rejestracja konta firmowego z weryfikacją NIP, REGON, statusu VAT,
- Kreator ofert z polami branżowymi specyficznymi dla każdej kategorii paliwa,
- Panel zarządzania ofertami i zapytaniami,
- Czat z kupującymi,
- Dashboard z historią aktywności.
Dla administratora
- Pełen panel moderacji ofert, sprzedawców i kont,
- Kolejka blogowa współdzielona między czterema serwisami,
- Statystyki i metryki w czasie rzeczywistym.
Wyzwania techniczne i sposób ich rozwiązania
Cztery domeny, jedna baza danych
Każdy z czterech serwisów ma własną tożsamość wizualną, osobny zestaw treści blogowych i osobny canonical URL, ale dzieli z pozostałymi wspólną bazę użytkowników, sprzedawców i ofert. Rozwiązaliśmy to przez monorepo z czterema aplikacjami Next.js i wspólnym pakietem UI (ui-core), który zawiera komponenty, typy domenowe i logikę bazodanową. Każda aplikacja deployowana jest osobno na Vercel z własną domeną, ale wszystkie korzystają z tej samej instancji Neon Postgres. Dyskryminacja kategorii (pellet / zrębka / trociny / biomasa) odbywa się na poziomie zapytań SQL i routing per domena.
Programmatic SEO na 200+ stronach
Generujemy automatycznie strony lokalne dla każdej kombinacji województwa, kategorii paliwa i wertykalu. Każda strona ma unikalny tytuł, opis, listę ofert dostępnych w danej lokalizacji, średnie ceny rynkowe i mapę. Treść jest unikalna (nie szablonowa) dzięki dynamicznym danym z bazy. Strony są generowane statycznie z fallbackiem ISR dla świeżo dodanych ofert. Bez tego mechanizmu pozyskanie ruchu wyszukiwarkowego wymagałoby ręcznego pisania 200+ stron i utrzymywania ich aktualności.
Mapa interaktywna z setkami markerów
MapLibre GL JS jako silnik renderowania map wektorowych (open source, brak vendor lock‑in), CARTO jako dostawca mapy bazowej, GeoJSON granic województw jako warstwa nakładana, klasteryzacja markerów przy większej liczbie ofert. Wszystko zoptymalizowane pod mobile — mapa działa płynnie na ekranie 320 px.
Compliance prawno‑jakościowy
W maju 2025 roku weszło w życie rozporządzenie Ministra Klimatu i Środowiska określające wymagania jakościowe dla pelletu drzewnego w obrocie. Każda karta produktu pelletu zawiera pełną tabelę 12 parametrów wymaganych przez rozporządzenie z wyróżnieniem klasy A1 vs A2, plus odwołanie do polskiej normy PN‑EN ISO 17225‑2:2021‑10. Wszystkie wartości są edytowalne z poziomu panelu sprzedawcy.
Płatności online zgodne z PSD2
Integracja PayU REST API (OpenPayU 2.1): uwierzytelnianie OAuth2 z cache'owaniem tokenu, generowanie zamówień, weryfikacja podpisu IPN (MD5 sender check w stałym czasie), persistencja stanu płatności w bazie danych z pełnym śladem audytowym (raw notification w polu JSONB). 3D Secure 2 i Strong Customer Authentication po stronie PayU, my obsługujemy tylko stan zamówienia i komunikację z klientem.
Wydajność i dostępność
Core Web Vitals w zielonej strefie na wszystkich kluczowych stronach:
- LCP poniżej 2,5 s,
- INP poniżej 200 ms,
- CLS poniżej 0,1.
Web Vitals monitorowane są w czasie rzeczywistym poprzez własną tabelę zdarzeń serwerowych. Pełna zgodność z WCAG na poziomie AA, focus rings, skip linki, semantyczny HTML.


