Applied AI · Automatyzacja · Integracje
Maciej Senderowski
Senior Software Engineer
const engineer = {
experience: "20 lat zamieniania problemów biznesowych w oprogramowanie",
focus: ["applied AI", "automatyzacja", "integracje"],
engineering: ["full-stack", "architektura systemów", "product engineering"],
business: ["13 lat prowadzenia firmy", "kontakt z klientem", "prowadzenie zespołu"],
dna: ["odpowiedzialność za całość", "rozwiązywanie problemów", "myślenie biznesowe"],
work: ["remote-first", "otwarty na hybrydę"]

Co robię
Oprogramowanie, które wykonuje realną pracę
Cztery obszary, w których pracuję. Każdy przykład poniżej pochodzi z systemu klienta albo z mojego własnego produktu.
Technologie
["Anthropic API", "OpenAI API", "Tool calling", "Structured output", "RAG", "Prompt engineering", "Cost control"]
Zastosowania
- Asystent kartoteki zdrowia, którego narzędzia działają na tokenie użytkownika, więc o dostępie do danych decydują polityki bazy, a nie prompt
- Konsultant osadzany na stronie klienta: ponumerowane źródła, jawna odmowa gdy źródła nie pokrywają pytania i instrukcje trzymane osobno od faktów, żeby nie dało się ich zacytować
- Odczyt wizyt weterynaryjnych i wyników badań prosto ze zdjęcia lub PDF-u do ustrukturyzowanych rekordów
- Warsztat generujący strategię marki: własny schemat wyjścia i dobrany model na każdym kroku, z zachowaniem wszystkich wersji
- Kampanie, posty i grafiki generowane względem tej strategii - dziedziczą jej ton i persony, zamiast być promptowane osobno
- Prospecting, w którym model planuje zapytania, przeszukuje sieć po kontakty, kwalifikuje firmy i pisze pierwszą wiadomość
- Koszty pod kontrolą, zanim stały się problemem: cennik per model, miesięczny sufit i log zużycia - dzięki niemu znalazłem błąd rozliczający najtańszy model według stawki najdroższego
- Masowe zmiany SEO sterowane modelem: dane strukturalne, bloki FAQ i brakujące opisy obrazków na kilkuset podstronach
Powiązane projekty
Technologie
["REST", "Webhooks", "OAuth 2.0", "Signature verification", "Idempotency", "Retries & backoff"]
Zastosowania
- Bramki płatności i systemy fakturowe za jednym rejestrem, z webhookami weryfikowanymi podpisem i reconcilerem na powiadomienie, które nie dotarło
- Dwukierunkowa synchronizacja między aplikacją a stroną WordPress każdego klienta, z kolejką, ochroną przed pętlą i identyfikatorami, które przeżywają ponowienie
- Obie strony integracji z danymi publicznymi: wystawianie zgodnego feedu dla rządowego harvestera i konsumowanie API tego samego rejestru, żeby zbadać, kto publikuje źle
- Wtyczka zamieniająca stronę WordPress w uwierzytelnione API, którym zewnętrzny panel steruje z zewnątrz - token porównywany w stałym czasie, 60 żądań na minutę na adres
- Systemy fakturowe i dostawcy punktów odbioru za jednym kontraktem każdy - wymiana dostawcy to nowa klasa, a nie przepisywanie zamówienia
- Wtyczka, którą organizacja instaluje u siebie sama i łączy własnym kluczem - od tej chwili adopcje synchronizują się w obie strony bez mojego udziału
Powiązane projekty
Technologie
["TypeScript", "Next.js", "React", "PostgreSQL", "Row Level Security", "Supabase", "PHP"]
Zastosowania
- Produkty doprowadzone od pierwszego commita do płacących klientów, ze schematem rozwijanym wersjonowanymi migracjami zamiast przebudowami
- Autoryzacja pilnowana w bazie, a nie w kodzie klienta - błąd w interfejsie nie poszerzy dostępu
- Jedna wspólna warstwa tożsamości i rozliczeń dla rodziny aplikacji - jedno konto działa we wszystkich
- Komercyjne wtyczki na jednym szkielecie: wspólny autoloader, serwer licencji i własny kanał aktualizacji
- Własny checkout zamiast ciężkiego stosu e-commerce, bo sprzedaż produktu cyfrowego to ułamek tego, co robi sklep - reszta jest kosztem utrzymania i polem do błędów
- MVP doprowadzone od pustego repozytorium do wdrożonego produktu z kontami i panelem administratora w jeden dzień
Powiązane projekty
Technologie
["Cron & schedulers", "Event-driven workflows", "Web scraping & ETL", "Idempotent sync", "Resumable jobs"]
Zastosowania
- Ustawowy obowiązek publikacji cen realizowany codziennie do rejestru rządowego, generowany i wysyłany bez otwierania arkusza
- Migracja starego sklepu do WooCommerce przez scraping katalogu, odtworzenie produktów wariantowych i dostarczenie narzędzi naprawczych razem z importem
- Długie zadania dzielone na wznawialne porcje ze stanem w bazie - timeout kosztuje jedną porcję, a nie cały przebieg
- Płatność, faktura i klucz licencyjny wydawane na jednym webhooku, idempotentnie - powtórzone powiadomienie nie obciąża drugi raz, a zamówienie domyka się bez człowieka
- Wpłaty cykliczne i odnowienia subskrypcji chodzące same, razem z fakturą po każdym udanym pobraniu
- Licencja przechodząca sama przez stany aktywna → karencja → tylko odczyt, z beaconem pokazującym, które instalacje jeszcze żyją
- Kolejka synchronizacji adopcji na metadanych wpisów: paczki, konfigurowalny harmonogram i ekran z listą tego, co się jeszcze nie zsynchronizowało
- Trzy konfigurowalne zadania dzienne generujące pliki z danymi otwartymi, a każda zmiana ceny trafia do historii sama
- Operacje masowe na kilkuset podstronach jako zadania asynchroniczne, o które panel dopytuje, zamiast żądania trzymanego aż zabije je brama
- Przypomnienia o dawkach leków liczone w strefie czasowej opiekuna i wysyłane bez udziału człowieka
- Katalogi produktów uzupełniane scrapingiem, więc sklep startuje z realnymi danymi, a nie z pustą bazą
- Monitor 404 zamieniający zepsute odnośniki na przekierowania, zamiast czekać, aż ktoś je zgłosi
Jak buduję
Od problemu biznesowego do działającego produktu
Zawsze te same siedem kroków. AI jest krokiem szóstym, nie pierwszym - i o tę kolejność tu chodzi.
01
Zrozumieć problem biznesowy
Przed jakąkolwiek decyzją techniczną: ile to dziś kosztuje, kogo boli i jak wygląda „rozwiązane” w liczbach.
Dlaczego warto ze mną pracować
Z czego możesz mnie rozliczyć
- 01
Najpierw problem biznesowy
Przez 13 lat prowadziłem firmę softwarową i jednocześnie pisałem kod. Nikt nie przynosił mi gotowej specyfikacji - najpierw musiałem zrozumieć problem, koszt i oczekiwany efekt. Jeśli wystarczy arkusz, powiem to wprost.
RRS Deweloper wziął się z ustawowego obowiązku klienta: te same ceny mieszkań przepisywane w cztery miejsca, a każde to okazja do opublikowania błędnej liczby. Wtyczka publikuje je dziś z jednego źródła.
- 02
Szybkie MVP, myślenie produkcyjne
Pomysł potrafię szybko zamienić w działające MVP, nie myląc prototypu ze skończonym produktem. Buduję też systemy, które mają stać na produkcji latami - z wydaniami, integracjami, bezpieczeństwem i utrzymaniem.
DlaStrzelca: do egzaminu na patent strzelecki przygotowywała jedna płatna aplikacja i nic poza nią. Od pustego repozytorium do wdrożonego produktu z kontami, bazą pytań i panelem w jeden dzień. MostIn poszedł dalej w konkursowe 24 godziny na HackYeah - 39 stron, 39 tabel i wyszukiwanie, które podaje stronę, z której cytuje.
- 03
AI tam, gdzie się broni
AI pozwala mi budować szybciej, ale w produktach dokładam je tylko tam, gdzie daje realną wartość. Problemy deterministyczne zostają deterministyczne, a LLM bierze te fragmenty, na które zwykły kod nie wystarcza.
W Vegvisie model napędza jedną funkcję: asystentkę Azę. Odczytuje wizytę u weterynarza albo wyniki badań ze zdjęcia prosto do kartoteki i odpowiada na pytania, wołając narzędzia tylko do odczytu na tokenie użytkownika. Kartoteki, adopcje i synchronizacja działają na zwykłym kodzie.
- 04
Buduję pod awarię, nie pod demo
Ponowienia, idempotencja, walidacja, uzgadnianie i kontrola dostępu są częścią projektu. System ma zachowywać się poprawnie, gdy API przestaje odpowiadać, webhook przychodzi dwa razy albo coś pada w nocy.
RRS SmartSell przyjmuje płatności od trzech operatorów: powiadomienie wysłane dwa razy nie obciąży klienta dwukrotnie ani nie zdubluje faktury, a to, które nie dotrze, zostaje uzgodnione bez zgłaszania reklamacji.
Wybrane projekty
Systemy, które zaprojektowałem i wdrożyłem
Każdy z nich zaprojektowałem i zbudowałem sam. Karta otwiera się w problem, architekturę i decyzje, które za tym stoją.
6 projektów
Zapytaj moje CV
Wypytaj moje doświadczenie wprost
Świadomie zbudowane bez modelu językowego. Odpowiedzi składane są z kurowanej bazy wiedzy, więc nie ma tu czego zmyślić - a w CV jedna halucynacja kosztuje rozmowę.
Doświadczenie
Na co poszły lata od 2006
Ostatnie role w całości, wcześniejsze skrócone.
- Zbudowałem agentów wołających narzędzia na realnych systemach biznesowych, z zakresem wyznaczonym przez polityki bazy, a nie przez prompt
- Autoryzację umieściłem w bazie, nie w kodzie klienta - RLS na każdej tabeli, a narzędzia AI wołane na tokenie użytkownika
- Zbudowałem kontrolę kosztów AI zanim była potrzebna: cennik per model, miesięczny sufit wydatków i log zużycia
- TypeScript
- Next.js
- Anthropic API
- OpenAI API
- Supabase
- PostgreSQL
- Buduję i utrzymuję portfolio komercyjnych wtyczek WordPress, każdą z licencjonowaniem, własnym kanałem aktualizacji i dyscypliną wydań
- Zbudowałem rodzinę produktów SaaS na wspólnej warstwie tożsamości i rozliczeń - jedno konto działa w każdym z nich
- Zintegrowałem systemy zewnętrzne, których używają klienci: Stripe, PayU, Przelewy24, wFirma, Fakturownia, inFakt, KSeF, punkty odbioru InPost i Apaczka oraz rejestr dane.gov.pl
- Zaprojektowałem wtyczkę, którą organizacja instaluje u siebie sama i łączy z platformą własnym kluczem - działa m.in. w KTOZ Kraków i Fundacji MEDOR
- Rozwijam schemat żywego produktu wersjonowanymi migracjami - setki kolejnych kroków bez zrzucania bazy
- Od początku budowałem strony klientów własnoręcznie, a dołączających programistów uczyłem tego sam, zamiast tylko nimi zarządzać
- Obok kodu prowadziłem sprzedaż i kluczowych klientów - stąd nawyk zaczynania od problemu biznesowego
- PHP
- JavaScript
- TypeScript
- MySQL
- PostgreSQL
- WordPress plugin development
- Roots Bedrock
- REST
- Git
- Reprezentuję fundację, pozyskuję środki na działalność statutową i zarządzam jej działaniem
- To stąd biorą się wymagania produktu - jestem swoim najbardziej wymagającym użytkownikiem
- Prowadziłem sprzedaż oraz zarządzałem zespołem i jego projektami
- Prowadziłem webinary i pracowałem nad rozwojem marki agencji
- Wybrany do kierowania organizacją krajową i reprezentowania jej na wydarzeniach międzynarodowych
Grafik
OTCF / 4F07.2015 - 01.2016Projektowanie graficzne i DTP - druk, materiały wielkoformatowe, e-commerce, eventy i kampanie reklamowe.
Programista & Grafik
MK Group04.2014 - 07.2014Projektowanie i programowanie stron internetowych oraz grafika i materiały cyfrowe.
Grafik DTP
Artpress04.2013 - 11.2013Projektowanie graficzne, DTP i tworzenie stron, a obok tego identyfikacja marek, marketing i kontakt z klientami.
- Napisałem własny CMS i wdrażałem go u klientów; postawione na nim strony działają do dziś, lata później
- Zbudowałem pierwszą wersję eAdopcje: strony z panelem zarządzania adopcjami dla kilkunastu fundacji i schronisk, z kontami użytkowników i kartotekami zwierząt - jeszcze zanim pojawiła się responsywność
- Dzięki temu tysiące psów znalazło nowe domy
Technologie
Co znam i jak dobrze
Zero procentów i zero pasków postępu - to wymyślone liczby. Zamiast nich każda pozycja ma poziom dowodu, łącznie z lukami.
Mapa dowodów
Wybierz poziom, żeby przefiltrować listę poniżej.
35 technologii
Języki
- TypeScript · Mocny
- PHP · Mocny
Komercyjne wtyczki WordPress na 8.1+, strict types, PSR-4
- SQL · Mocny
Frontend
- React · Mocny
- Next.js · Mocny
Backend
- Node.js · Mocny
- REST API design · Mocny
- Deno · Roboczy
Edge Functions Supabase na produkcji - TypeScript na runtimie Deno
Bazy danych
- PostgreSQL · Mocny
- Supabase · Mocny
Postgres, Auth, Storage, Edge Functions - i RLS na każdej tabeli
- Row Level Security · Mocny
Autoryzacja pilnowana w bazie, nie w kodzie klienta
- Vector databases · Roboczy
pgvector w Postgresie zamiast osobnej usługi wektorowej: embedding leży obok wiersza, który opisuje, więc nie ma drugiego magazynu do synchronizowania ani drugiego rachunku
- Hybrid search · Roboczy
W MostIn fragmenty dokumentów łączą ranking wektorowy i pełnotekstowy metodą RRF. Przy innowacjach RRF przegrał na długich opisach, więc zastąpiły go średnia ważona i osobne wyszukiwanie po rzadkich słowach, sprawdzone na realnym scenariuszu: z ósmego miejsca na pierwsze
API i integracje
- REST · Mocny
- Webhooks · Mocny
Weryfikacja podpisu, idempotencja i reconciler na wypadek nieodebranego zdarzenia
- OAuth 2.0 · Mocny
- Authentication & authorization · Mocny
Logowanie dwuskładnikowe, tokeny API porównywane w stałym czasie, polityki po stronie bazy
- Two-way system sync · Mocny
Kolejka, ochrona przed pętlą, stabilne identyfikatory przy ponowieniach, tryb sandbox
- Open data (OpenStreetMap, city datasets) · Roboczy
Dwa źródła połączone w Odkrywamy Kraków: przystanki z otwartych danych miasta, toalety i woda pitna z OpenStreetMap, czytane przez Overpass z przerwami, ponawianiem, serwerem zapasowym i cache, więc cały raport odtwarza się od zera. Zmierzenie, czego dane nie udźwigną, było równie ważne - tag wheelchair pokrywał 9,5% obiektów puli, więc lukę uzupełniają dziś ankiety graczy na miejscu
Płatności i fakturowanie
- Stripe · Mocny
AI
- Anthropic API · Mocny
Tool use ograniczony politykami bazy, nie promptem
- AI agents · Mocny
Wywoływanie narzędzi na realnych systemach, z zakresem wyznaczonym przez polityki bazy
- Tool calling · Roboczy
Własne narzędzia w asystencie Vegvisa w pętli tool_use → tool_result, z dostępem do danych ograniczonym przez RLS na poziomie użytkownika
- Structured outputs · Roboczy
Wymuszony JSON Schema w trasach API opartych na LLM, z jawną obsługą odmowy modelu i odpowiedzi o złym kształcie
- AI-assisted development · Mocny
Trwałe instrukcje projektowe w plikach CLAUDE.md, globalne komendy wielokrotnego użytku i hook, który odmawia zapisu do kopii wtyczki i wskazuje źródło. Z założenia zawiesza się otwarcie: hook ma zapobiegać pomyłce, a nie blokować pracę, gdy sam się zepsuje
- RAG · Roboczy
Dwa produkty. Konsultant RedAgenta: wyszukanie leksykalne przed każdą turą, cytowania weryfikowane po stronie serwera, odmowa poniżej progu trafności. MostIn: PDF, DOCX i paczki ZIP cięte na fragmenty z zakresami stron, więc odpowiedź podaje dokument i stronę, z której pochodzi
- LLM cost control · Mocny
Cennik per model, miesięczny sufit wydatków, log zużycia
- Embeddings · Roboczy
Per fragment, nie per dokument, więc odpowiedź może wskazać akapit, którego użyła. Przeliczane ponownie tylko tam, gdzie zmienił się skrót treści, co sprowadza kolejny import całej biblioteki do groszy
- MCP · Roboczy
Teraz własny serwer, nie tylko podpięty cudzy: dwanaście narzędzi do wysyłki motywów WordPressa i pracy na produkcyjnym MySQL przez SSH. Nic destrukcyjnego nie dzieje się na słowo modelu - narzędzie zwraca plan, a wykonanie wymaga PIN-u wpisanego w oknie Windows, którego model nie widzi. Sekrety leżą w sejfie otwieranym tym PIN-em, bo agent działa na moim koncie i inaczej przeczytałby każdy plik, z którym by się sprawdzał
Automatyzacja
- Cron & schedulers · Mocny
- Event-driven workflows · Mocny
- Idempotent sync · Mocny
Ponowny przebieg nie zduplikuje ani nie cofnie zamkniętego rekordu
WordPress
- WordPress plugin development · Mocny
Komercyjne wtyczki z licencjonowaniem, kanałem aktualizacji i dyscypliną wydań
Infrastruktura
- Git · Mocny
- CI/CD · Roboczy
GitHub Actions na każdym repozytorium wtyczki, wołające jedną wspólną akcję, żeby logika nie leżała w kopii na repozytorium. Wyłącznie bramka składni - bez zestawu testów i bez etapu wdrożenia
Rekrutujesz? Odezwij się.
Napisz, czego szukacie - odpowiem konkretnie, czy to rola dla mnie. Jeśli nie jestem właściwą osobą, powiem to wprost.
Kraków, Polska · CET (UTC+1) · Dostępny od zaraz · B2B