Tło strony to miniaturowa, trójwymiarowa pracownia programisty: biurko z trzema monitorami, małe roboty-agenci przenoszące karteczki z zadaniami, stanowisko lutownicze z kablami audio, tablica korkowa, półka z książkami, okno na wieczorną Łódź i uchylone drzwi.
Buduję backend dla fintechu, zarządzania wydatkami oraz planowania spotkań i współpracy wideo. Na co dzień pracuję z zespołem agentów AI, a każdy ich wynik przechodzi moje review.
Java developer z Łodzi, który lubi trudne problemy
Od ponad pięciu lat komercyjnie buduję systemy backendowe: dla fintechu, zarządzania wydatkami oraz planowania spotkań i współpracy wideo. Lubię rozwiązywać trudne problemy, projektować czyste, modułowe architektury i integrować zewnętrzne systemy.
Czytam książki, chodzę na konferencje i meetupy, a tym, czego się nauczę, dzielę się na prezentacjach wewnętrznych, dla zespołu i dla całej organizacji.
Od 2015 do 2021 roku prowadziłem w Wielkiej Brytanii Auvica, markę ręcznie robionych kabli audio. Jako założyciel i właściciel odpowiadałem za produkcję, kontrolę jakości, sprzedaż i wejście na nowe rynki.
Sam zbudowałem stronę firmy i sklep internetowy, utrzymywałem hosting i całą infrastrukturę IT, przygotowywałem materiały marketingowe.
Z tamtych lat został mi zmysł biznesowy: patrzę na oprogramowanie jak na produkt, od A do Z.
Okres
10.2015 – 06.2021
Rola
Założyciel i właściciel
Gdzie
Wielka Brytania
03 · Kariera
Ścieżka przypięta do korka
Boldare · klient: Doodle
Software Engineer (Java) · od 09.2025
Platforma planowania spotkań i współpracy wideo: Java 25, Spring Boot 4, GraphQL, Kafka/Avro, PostgreSQL, AWS, Kubernetes.
Zbudowałem od zera mikroserwis wideo i jestem jednym z głównych kontrybutorów: heksagonalny, modularny monolit DDD z projekcjami CQRS i outboxem.
Prowadziłem funkcję dostępu gości w 6 repozytoriach.
Śledzenie obecności z eksportem CSV i idempotentny pipeline transkrypcja → PDF.
Integracja kalendarza uczelnianego (OData) jako nowego dostawcy kalendarza.
Baza wiedzy i skille Claude Code dla agentów AI, koordynacja wielu agentów przez tracker Beads; prezentacje dla zespołu i całej organizacji.
Goji – Euroclear Group
Software Engineer (Java) · 05.2023 – 09.2025
Fintechowa platforma inwestycyjna w Javie 21 i Spring Boot. Integracja z systemem weryfikacji KYC, prowadzenie migracji mikroserwisów z Dagger i Dropwizard na Spring Boot, aktualizacja MySQL.
Version 1
Java Developer · 03.2022 – 05.2023
Mikroserwisy REST na AWS, interfejs złożonych zapytań w Elasticsearch, PostgreSQL o dużym wolumenie, migracja do Javy 17.
Webexpenses
Junior Software Developer · 01.2021 – 03.2022
Bezpieczne serwisy aplikacji do zarządzania wydatkami, integracja skanowania paragonów, REST API, archiwizacja w AWS Glacier.
Wdrażanie aplikacji w Kubernetes – wKontenerach.pl01.2024
Java Developer Bootcamp – Kodilla2019 – 2020
04 · AI i agenci
AI przyspiesza. Za wynik odpowiadam ja.
Na co dzień pracuję z kilkoma agentami naraz. Na biurku obok widać, jak to wygląda: karteczka z zadaniem wędruje od planowania przez implementację i testy aż do mojego review.
PlanowanieZadania i zależności w Beads, trackerze opartym na grafie.
ImplementacjaAgent pisze kod ze skillami Claude Code i wspólną bazą wiedzy, którą dla agentów buduję.
TestyZmiana musi przejść testy, zanim pójdzie dalej.
Review człowiekaKażdy wynik agenta przechodzi moje review, z naciskiem na dobre praktyki i jakość.
Lubię automatyzację i wdrażam asystentów AI. Przykład: asystent LLM w Hotelero, który pomaga gościom zarezerwować pokój i zaplanować cały pobyt. Zobacz w projektach →
Najedź na robota na biurku, żeby poznać jego rolę.
05 · Projekty
Dwa silniki, które napisałem sam
Przełóż talię strzałkami, klawiszami ← → albo przeciągnięciem. Ten sam kadr pojawia się na monitorze w pracowni.
1 / 8
Basketo · silnik sklepu01
Silnik sklepu, który da się uruchomić
Panel admina: „6 paczek czeka na wysłanie” i skróty klawiszowe.
Ma towar, ustala ceny, pilnuje stanów, przyjmuje pieniądze, oddaje je, kiedy musi, i potrafi potem dokładnie powiedzieć, gdzie poszły.
Napisany samodzielnie: jedna aplikacja zbudowana wokół archetypów oprogramowania, API bez frontendu. Wokół silnika: panel admina, demo sklepu i landing.
Java 25
Spring Boot 4.1
PostgreSQL 17
Liquibase
Testcontainers
Basketo · checkout02
Siedem kroków, jedna transakcja
Czyta koszyk
Znajduje lub rejestruje kupującego
Wycenia z dostawą
Odkłada towar
Składa zamówienie
Zapisuje należność
Zamyka koszyk
Dopiero potem, poza transakcją, sklep prosi bramkę płatności o link.
POST /api/carts open a basketPOST /api/carts/{id}/lines put something in itPOST /api/checkout basket → order, a link to payGET /api/order-access/{token}what happened to it
Towar odkładany według polityki: przy dodaniu do koszyka, przy checkoucie albo wcale. Domyślnie czeka na koszyk 30 minut.
Basketo · zwroty03
Zwrot: decyzja raz, wypłata raz
Zamówienia ze statusami: opłacone, wysłane, częściowo zwrócone, anulowane.
Decyzja o zwrocie to jedna transakcja w czterech modułach: księgi, płatność, zamówienie i magazyn. Jeśli którykolwiek odmówi, nie wydarzyło się nic.
Do bramki zwrot wysyła dispatcher po commicie, z kluczem idempotencji, więc zwrot wysłany dwa razy zostaje wypłacony raz. Zwrot, którego operator teraz nie przyjmie, czeka coraz dłużej, aż do raz na dobę, ale nigdy nie jest porzucany.
Basketo · płatności04
Pieniądze, których zamówienie nie może przyjąć, wracają same
Metryki biznesowe: zamówienia, zwroty, płatności niepotwierdzone przez bramkę.
Przelewy24 i Tpay. Wpłata spóźniona, za mała, za duża albo w innej walucie zostaje odrzucona i automatycznie zwrócona. Gdy powiadomienie operatora nie dociera, sklep sam pyta, jak stoi płatność.
Ustawienia są sprawdzane przy starcie: jeśli sklep nie może czegoś dotrzymać, nie wstaje i mówi, które ustawienie zawiodło.
Basketo · obserwowalność05
Obserwowalność bez danych osobowych
JVM, HTTP i baza: czasy odpowiedzi według route’ów.
Metryki w Prometheusie, logi w JSON z numerem zamówienia, a każdy request ma swój X-Request-Id, także w wątkach, którym przekazuje pracę.
Do logów nie trafia nic osobowego, czego pilnuje scenariusz testowy. Najczęstsze odczyty mają w buildzie budżet zapytań SQL, który nie rośnie razem ze stroną.
Hotelero · silnik rezerwacji06
Rezerwacje hotelowe z asystentem AI
Hotel demo „Pod Latarnią” w Ustce, z wyszukiwarką pokoi.
Autorski silnik rezerwacji. Asystent LLM pomaga gościom zarezerwować pokój i zaplanować cały pobyt ze wszystkimi usługami hotelu, a właścicielowi zarządzać hotelem w panelu admina.
Asystent gościa używa tylko narzędzi do odczytu: get_property, list_rooms, check_availability. Widzi to, co publiczne API pokazuje każdemu, nigdy rezerwację ani gościa.
Asystent właściciela w panelu ma miesięczny budżet na obiekt i limit wiadomości.
Hotelero · architektura08
Wiele hoteli w jednej bazie, każdy widzi tylko swoje
Panel właściciela obiektu.
Multi-tenant na PostgreSQL Row-Level Security: aplikacja łączy się użytkownikiem bez BYPASSRLS, więc izolacja działa zawsze. DDD i architektura heksagonalna.
Kontrakt OpenAPI jest źródłem prawdy, a testy sprawdzają odpowiedzi backendu względem niego. Dynamiczne ceny: sezony, dni tygodnia, liczba gości i maski promocji.