Kraków / zdalnie

Marcin RapaczSenior Frontend Developer / AI Engineer

Frontend developer, sześć lat przy jednym produkcie. Od 2026 głównie aplikacje, w których pracuje AI.

Zaczynałem od edytorów w Reakcie, potem była platforma e-commerce, gdzie jedna baza kodu obsługiwała sklepy wielu marek. Od maja buduję frontend platformy rekrutacyjnej dla klienta z branży HR i odpowiadam za jakość jej wyszukiwarki kandydatów, która rozumie opisane wymagania i układa z nich ranking, zamiast szukać słów kluczowych w CV.

Coraz częściej wychodzę poza sam frontend — piszę backend, a projekty doprowadzam aż do wdrożenia na serwerze.

LinkedIn ↗

Pełne doświadczenie i case studies są w CV

komercyjnego doświadczenia, w tym sześć lat w jednej firmie produktowej, gdzie realizowałem głównie projekty i rozwiązania frontendowe
6,5 roku

komercyjnego doświadczenia, w tym sześć lat w jednej firmie produktowej, gdzie realizowałem głównie projekty i rozwiązania frontendowe

czat i wyszukiwanie po treści własnych dokumentów, wdrożone w StoryForge: autor pyta o swoją książkę, a odpowiedź opiera się wyłącznie na jej treści, więc system podpowiada zamiast zmyślać i nie pisze za niego
RAG

czat i wyszukiwanie po treści własnych dokumentów, wdrożone w StoryForge: autor pyta o swoją książkę, a odpowiedź opiera się wyłącznie na jej treści, więc system podpowiada zamiast zmyślać i nie pisze za niego

frameworka frontendowego na żywych produktach, bez zatrzymywania sprzedaży — także wtedy, gdy migracja oznaczała pełny redesign
Migracje

frameworka frontendowego na żywych produktach, bez zatrzymywania sprzedaży — także wtedy, gdy migracja oznaczała pełny redesign

wprowadza gotową książkę z PDF do StoryForge: dzieli ją na rozdziały, streszcza je i wyciąga postacie, miejsca i wątki, żeby autor od razu pracował nad tekstem zamiast go przepisywać
Agent AI

wprowadza gotową książkę z PDF do StoryForge: dzieli ją na rozdziały, streszcza je i wyciąga postacie, miejsca i wątki, żeby autor od razu pracował nad tekstem zamiast go przepisywać

01Projekty

klient z branży HR (NDA) · od 05.2026

Platforma rekrutacyjna

Rekruter opisuje zwykłym zdaniem, kogo szuka, a system przeszukuje bazę kilku tysięcy CV. Cały nowy frontend zbudowałem od zera. Backend i baza wektorowa już działały, kiedy wszedłem do projektu — pracuję na nich i odpowiadam za poprawę jakości wyszukiwania. Zacząłem od zbudowania sposobu pomiaru, bo bez niego nie dało się powiedzieć, czy kolejna wersja jest lepsza od poprzedniej. Pomiar pokazał, że ta sama umiejętność bywała zapisana w bazie na ponad półtora tysiąca sposobów, więc wynik zależał od tego, jak ktoś ją wpisał.

Z logów, które wyszukiwarka zbierała od początku, powstał potem benchmark odwzorowujący realny ruch — a na nim, w izolacji od produkcji, druga wersja silnika wyszukiwania.

Naprawa danych podniosła zgodność kolejności z niezależną oceną z 2% do 52%, a przebudowany silnik układa na benchmarku listę bliżej raportu AI w 22 ogłoszeniach wobec 2 (zgodność kolejności 70% wobec 35%).

Przeczytaj case study →
  • Nuxt 4
  • TypeScript
  • Strapi
  • Gemini
  • Qdrant

projekt własny · 2026

StoryForge

Aplikacja dla osób piszących książki — edytor z historią wersji, czat, analiza stylu, import z PDF. To nie generator, który pisze książkę za autora: to wsparcie w pracy nad własnym tekstem — można o coś zapytać, skonsultować pomysł, zaczerpnąć inspiracji, a system zna treść książki i odpowiada na jej podstawie. Prowadzę ją od pierwszego commita po utrzymanie na produkcji.

Zadania AI idą przez kolejkę w bazie, więc awaria po stronie modelu nie blokuje zapisu tekstu, a kredyt wraca użytkownikowi, jeśli odpowiedź się nie zacznie. Analiza stylu celowo nie używa AI: to zwykły algorytm, więc nic nie kosztuje i za każdym razem daje ten sam wynik. Istniejącą książkę importuje osobny agent (LangGraph), który wykrywa rozdziały w kodzie, a model dostaje głos tylko wtedy, gdy konwencji jest kilka; zamiast paska postępu autor czyta, co agent właśnie robi, a nieudany import zwraca kredyty.

Zobacz demo ↗
  • Next.js 16
  • Strapi 5
  • FastAPI
  • LangGraph
  • Qdrant
  • RAG

narzędzie wewnętrzne klienta · druga wersja · 2026

Pozyskiwanie leadów B2B

Druga wersja narzędzia do pozyskiwania kontaktów B2B dla klienta z branży HR, napisana od nowa; pierwsza była agentem z bramką LLM przed wysyłką, druga przenosi ciężar na weryfikowalne fakty. Zamiast kupować kontakty, system buduje własną bazę: zbiera ogłoszenia o pracę z historią podbić i płatnych wyróżnień, dociąga profile pracodawców, a model z dostępem do wyszukiwarki uzupełnia to, czego w ogłoszeniu nie ma — wielkość firmy, przynależność do dużej organizacji, telefon, stronę. Model wypowiada się raz, w typowanej odpowiedzi z zakazem zgadywania; o tym, czy firma jest w targecie, decyduje już zwykła reguła na faktach.

Żaden fakt od modelu nie trafia do człowieka bez potwierdzenia z niezależnego źródła: najpierw strona firmy i państwowy rejestr, bo są darmowe, dopiero potem płatne Google Places z podwójnym potwierdzeniem tożsamości. Każdy fakt nosi swoje pochodzenie i status, każde wywołanie modelu ma zapisany koszt, a limity dostawców pilnowane są w kodzie. Na końcu jest lista firm z potwierdzonym numerem — dzwoni człowiek. Ponad 300 testów offline, w tym atrapa modelu.

W bazie ok. 1,3 tys. firm; 83% firm w targecie ma telefon potwierdzony niezależnym źródłem (684 z 825).

Zobacz case study →
  • Python
  • Pydantic AI
  • Gemini
  • FastAPI
  • PostgreSQL
  • Docker

strona firmowa · zlecenie freelance · 09.2026

Folstar — mikroperforacja.pl

Strona firmowa rodzinnego producenta opakowań foliowych i hurtowni słodyczy spod Krakowa, przebudowana od nowa na Next.js 16 i React 19. Zlecenie prowadziłem bezpośrednio z klientem, bez pośredników: zakres, treść i SEO, wdrożenie i utrzymanie — wszystko, czego mała firma potrzebuje od jednej osoby. Rozwiązania dobrałem do jej skali: zamiast headless CMS-a z poprzedniej wersji treść w kodzie, bo przy kilkunastu produktach to mniej usług do utrzymania i zero zależności od zewnętrznego dostawcy.

Zdjęcie produktu płynie z karty na liście do okna szczegółów, a zdjęcie kategorii ze strony głównej do nagłówka podstrony (View Transitions); przy ograniczeniu animacji w systemie przejścia znikają. Analytics i mapa Google ładują się dopiero po zgodzie, firma trafia do wyszukiwarek jako LocalBusiness, a wdrożenie to obraz Dockera za Traefikiem z pipeline'em GitLab CI.

Zobacz stronę ↗
  • Next.js 16
  • React 19
  • Tailwind 4
  • View Transitions
  • Docker / CI
Strona główna mikroperforacja.pl: nagłówek ze zdjęciem słodyczy i rolek folii, pod nim pasek zaufania

platforma e-commerce SaaS · zespół produktowy · 2020–2026

Printbox

Dwie role w tym czasie. Zaczynałem od redesignów mobilnych wersji edytorów foto-produktów w Reakcie. Potem przeszedłem do zespołu, który budował headless frontend platformy sklepowej na Shopware, od pierwszego dema do produkcji, i to była już jedna ciągła praca: wdrożenia klientów szły równolegle z architekturą, na której stały. Jedna baza kodu obsługiwała sklepy w kilku wariantach, od konfiguracji w panelu po pełny redesign.

Codziennie oznaczało to zwykłą pracę frontendową w miejscu, gdzie błąd widzi kilkadziesiąt sklepów naraz. Płatności Stripe i Adyen, dostawy InPost i GLS w ścieżce zakupowej, wielojęzyczność, Core Web Vitals, wycieki pamięci. I rozmowy: z backendem codziennie, z produktem przed zadaniem, a z nowymi osobami w zespole jako nieformalny mentor od architektury i produktu.

Osadziłem w sklepach flagowy edytor napisany w Reakcie — dwa routery, które musiały się dogadać, działające przyciski wstecz i dalej, języki przełączane w locie. Własny prerender na Cloudflare Workers dla ścieżek renderowanych po stronie klienta zastąpił zewnętrzną subskrypcję.

Migracja z Nuxt 2 na Nuxt 3 szła na żywym produkcie, klient po kliencie, bez zatrzymywania sprzedaży. Przy niej współtworzyłem architekturę, na której platforma stoi do dziś, i odpowiadałem za jej implementację: wspólny core, personalizacje klientów w osobnych warstwach i konfiguracja czytana w trakcie działania, więc zmiana ustawień w panelu nie wymaga przebudowy aplikacji. Najważniejszy klient platformy, amerykańska sieć retail, dostał przy tej okazji pełny redesign, logowanie SSO i nową bramkę płatności. Przez te lata przeszło przeze mnie kilkanaście wdrożeń i redesignów, prosto z Figmy, a przy pilotażu dla globalnego producenta elektroniki przygotowałem większość frontendu.

Jeden obraz Dockera zamiast builda dla każdego klienta: z 1,4 GB do 55 MB, a aktualizacja wszystkich sklepów zajmuje minuty zamiast godzin, niezależnie od tego, ilu ich jest.

  • React
  • Vue / Nuxt 2 i 3
  • Shopware
  • Turborepo
  • Redis
  • Stripe / Adyen
  • Cloudflare Workers

02Jak pracuję

Praca w zespole

W zespole e-commerce pracowaliśmy w pełnym rytmie: daily, planowania, demo, retro. Zmiany szły przez ticket, branch i merge request, więc każdą oglądał ktoś jeszcze przed scaleniem. Wspólny kod z innymi frontendowcami, konflikty do rozwiązania, na co dzień ustalenia z backendem, testerami i customer success.

Odpowiedzialność za zadanie

Powierzone zadanie biorę w całości: od zrozumienia problemu po działające wdrożenie. Zwykle wystarczy mi cel — kolejność kroków i rozwiązania po drodze ustalam sam. Wcześniej dogrywam szczegóły i czasem proponuję inne podejście, które mniejszym kosztem daje ten sam efekt.

Kod pisany z AI

Piszę z Claude Code, a każda funkcja przechodzi u mnie ten sam cykl: analiza i plan, implementacja w TDD z subagentami do zadań cząstkowych, testy i benchmarki, wdrożenie przez CI/CD. Kod, który z tego wychodzi, czytam i poprawiam jak cudzy na review, zanim trafi do repozytorium. Przy takim tempie powstaje więcej kodu niż kiedyś, więc tym bardziej zapisuję w commitach i notatkach, dlaczego coś wygląda tak, a nie inaczej.

Testy tam, gdzie błąd jest cichy

Najgorsze błędy nie wywalają aplikacji, tylko przesuwają liczby albo zmieniają kolejność wyników i wyglądają wiarygodnie. Właśnie takie miejsca staram się pokrywać testami najgęściej. Reszta też jest sprawdzana, proporcjonalnie do tego, co może pójść nie tak.

Design system i Figma

Zaczynam od tokenów kolorów, odstępów i zaokrągleń trzymanych w jednym miejscu, a powtarzające się układy zbieram do wspólnych komponentów. Widoki wdrażam pixel-perfect z Figmy, a pierwszy szkic komponentu ściągam z projektu przez serwer MCP Figmy, zamiast przepisywać wartości ręcznie.

Wydajność to nie osobny etap

Core Web Vitals, rozmiar paczki i zachowanie na słabym łączu sprawdzam przy okazji funkcji, którą akurat robię. Po stronie danych to zwykle te same rzeczy: zbić kilka zapytań do jednego, scachować to, co nie zmienia się co minutę, i oddać na front tylko te pola, które widok naprawdę wyświetla.

03Czym się zajmuję

Frontend i backend

  • aplikacje od nowego repozytorium i praca w kodzie, który zastałem
  • architektura frontendu, biblioteka komponentów, renderowanie po stronie serwera, wydajność
  • integracje: płatności, dostawy, CMS, logowanie, cudze API
  • warstwa serwerowa pod frontend: API, autoryzacja, middleware, kolejki zadań
  • Docker, pipeline CI/CD i wdrożenie na serwer
  • Vue
  • Nuxt 4
  • React
  • Next.js
  • TypeScript
  • Tailwind
  • Node
  • Strapi
  • PostgreSQL
  • Docker

AI w produkcie

  • wyszukiwanie po znaczeniu i czat odpowiadający na podstawie własnych dokumentów
  • klasyfikacja i wyciąganie danych z tekstu bez struktury
  • podpowiedzi i asystenci wbudowani w interfejs aplikacji
  • pomiar jakości wyników i pilnowanie kosztu zapytań
  • praca z modelami różnych dostawców przez API
  • RAG
  • embeddingi
  • Qdrant
  • Gemini
  • LLM-as-judge

Agenty AI

  • model prowadzi przebieg: wybiera, ocenia i odrzuca, a nie tylko generuje tekst
  • narzędzia po jego stronie: wyszukiwanie, zapytania do zewnętrznych API, zapis do bazy
  • progi jakości — brak dobrego wyniku kończy krok, zamiast przepuszczać byle co
  • ręczne procesy i integracje między systemami, które nie były projektowane do rozmowy ze sobą
  • kolejki zadań, ponawianie, limity kosztów, a na końcu akceptacja człowieka
  • Python
  • FastAPI
  • Gemini
  • PostgreSQL
  • Docker

Kontakt

Kraków albo zdalnie. Pracuję po polsku i po angielsku. Napisz, jeśli chcesz pogadać o współpracy albo dopytać o którykolwiek z projektów.

Realizuję również mniejsze projekty.

Używam Google Analytics, żeby wiedzieć, jak korzystasz z tej strony i co poprawić. Skrypty analityczne załadują się dopiero po Twojej zgodzie. Polityka prywatności

Napisz do mnie

Zostaw wiadomość — zwykle odpowiadam w ciągu jednego dnia roboczego.