Problem
Każdy handlowiec budował oferty po swojemu — w Wordzie, w Excelu, w mailu — wyciągając produkty z tego dokumentu dostawcy, który akurat miał pod ręką. Nie było jednego katalogu, więc ten sam produkt za każdym razem pojawiał się inaczej wyceniony i opisany.
Marże liczono ręcznie i łatwo było się pomylić, a gotowe dokumenty rzadko pasowały do brandingu firmy. Złożenie jednej oferty było wolne, podatne na błędy i niemożliwe do utrzymania spójnie w całym zespole.
Co zbudowałem
Aplikację webową (Next.js, App Router, TypeScript) z przeszukiwalnym katalogiem produktów zasilanym adapterami nad kilkoma API dostawców, znormalizowanym do jednego wspólnego kształtu. Na wierzchu prowadzony kreator ofert: brief, wybór produktów, a potem dwa lub trzy wycenione scenariusze, które klient może porównać obok siebie.
Wycena idzie przez kaskadowy silnik marży działający na trzech poziomach — oferta, scenariusz i linia — jako procent albo stała kwota, z kosztem wewnętrznym trzymanym poza widokiem dla klienta. Gotowa oferta renderuje się do brandowanego PDF przez headless Chromium, więc każda wycena wychodzi tak samo wyglądająca. Silnik marży i mappery dostawców są pokryte testami jednostkowymi, a całość dostarczana jest jako obraz Dockera.
Stack
Next.js · TypeScript · React · Prisma · PostgreSQL · Tailwind · shadcn/ui · Playwright · Vitest · Docker
Demo na żywo — zanonimizowany przykładowy katalog, ten sam prowadzony przepływ i silnik marży co w dostarczonej aplikacji. Działa w całości w Twojej przeglądarce.