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.

Dawid Walter

Łódź · 5+ lat komercyjnie · backend w Javie

Dawid Walter

Java Developer · AI agents & automation

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.

Przewiń, a kamera oprowadzi po pracowni

01 · O mnie

Dawid Walter, zdjęcie portretowe

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.

Warsztat

  • Java 25 / Spring Boot
  • AWS
  • Hibernate / JPA / JDBC
  • JUnit 5 / Mockito / TDD
  • Selenium
  • PostgreSQL / MySQL
  • Kafka / Avro
  • Elasticsearch
  • REST / GraphQL Federation
  • Linux / Docker / Kubernetes
  • Grafana / Prometheus
  • Angular / TypeScript
  • Claude Code

Architektura: DDD, heksagonalna, CQRS, MVC · SOLID, KISS, DRY, YAGNI

02 · Auvica

Własna firma: od lutownicy po sklep internetowy

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

  1. 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.
  2. 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.

  3. 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.

  4. 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.

  5. Auvica (UK)

    Założyciel i właściciel · 10.2015 – 06.2021

    Ręcznie robione kable audio. Więcej wyżej ↑

Kursy i certyfikaty

  • AWS Certified Cloud Practitioner03.2023
  • 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.

  1. PlanowanieZadania i zależności w Beads, trackerze opartym na grafie.
  2. ImplementacjaAgent pisze kod ze skillami Claude Code i wspólną bazą wiedzy, którą dla agentów buduję.
  3. TestyZmiana musi przejść testy, zanim pójdzie dalej.
  4. 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 sklepu

Silnik sklepu, który da się uruchomić

Panel admina Basketo: pulpit z informacją, że 6 paczek czeka na wysłanie, i listą skrótów klawiszowych.
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 · checkout

Siedem kroków, jedna transakcja

  1. Czyta koszyk
  2. Znajduje lub rejestruje kupującego
  3. Wycenia z dostawą
  4. Odkłada towar
  5. Składa zamówienie
  6. Zapisuje należność
  7. Zamyka koszyk

Dopiero potem, poza transakcją, sklep prosi bramkę płatności o link.

POST /api/carts                  open a basket
POST /api/carts/{id}/lines       put something in it
POST /api/checkout               basket → order, a link to pay
GET  /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 · zwroty

Zwrot: decyzja raz, wypłata raz

Lista zamówień w panelu Basketo ze statusami: opłacone, wysłane, częściowo zwrócone, anulowane.
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ści

Pieniądze, których zamówienie nie może przyjąć, wracają same

Dashboard Grafany z metrykami biznesowymi sklepu: zamówienia, zwroty, płatności niepotwierdzone przez bramkę, odrzucone wpłaty.
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ść

Obserwowalność bez danych osobowych

Dashboard Grafany: uptime, zapytania na sekundę, średni czas odpowiedzi według route’ów, błędy i ostrzeżenia w logach.
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 rezerwacji

Rezerwacje hotelowe z asystentem AI

Strona demo hotelu „Pod Latarnią” w Ustce z wyszukiwarką wolnych pokoi.
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.

  • Java 21
  • Spring Boot 3
  • PostgreSQL
  • Flyway
  • Testcontainers
  • OpenAPI
Hotelero · asystent

„Zapytaj o pobyt”

Okno asystenta „Zapytaj o pobyt” na stronie hotelu z przykładowymi pytaniami gościa.
Asystent gościa na stronie hotelu.

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 · architektura

Wiele hoteli w jednej bazie, każdy widzi tylko swoje

Ekran logowania do panelu właściciela Hotelero: „Dzień dobry”.
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.

← → klawiatura · przeciągnij · kliknij strzałki

Po godzinach: snakeNg, mała gra (snakeng.bieda.it, kod).