Paweł Maj

Paweł Maj

Architekt rozwiązań i technical leader

Od 15 lat zamieniam problemy biznesowe w systemy, które da się rozwijać latami. Zaczynam od zrozumienia domeny, dobieram architekturę do skali i do zespołu, a potem prowadzę ludzi przez jej wdrożenie — aż do produkcji i dalej.

  • 15 lat doświadczenia
  • technical leader
  • praca zdalna
StartOnboardingHandler.php
final class StartOnboardingHandler
{
    public function __construct(
        private ProcessRepository $processes,
        private MessageBusInterface $bus,
    ) {}

    public function __invoke(StartOnboarding $command): void
    {
        $process = Process::start(
            $command->employeeId,
            $command->template,
        );

        $this->processes->save($process);
        $this->bus->dispatch(new ProcessStarted($process->id()));
    }
}

Umiejętności

Najgłębiej wchodzę w backend, ale dowożę całe funkcje — od modelu domeny po konfigurację wdrożenia.

Backend

  • PHP 8+
  • Symfony 7 (Messenger, Doctrine)
  • Laravel
  • REST API
  • RabbitMQ
  • legacy Symfony 3.4

Wszystkie aktualizacje frameworka w swoim systemie zrobiłem sam: od Symfony 5.3 / PHP 8.0 do Symfony 7.4 / PHP 8.5.

Architektura

  • DDD
  • CQRS
  • Event Sourcing
  • Event Storming
  • modularny monolit
  • mikroserwisy
  • SOLID
  • TDD

Zaprojektowałem silnik procesów na DDD i CQRS od zera i współprojektowałem migrację monolitu do 36 mikroserwisów.

Frontend

  • React 18
  • Next.js
  • TypeScript
  • React Hook Form

Od półtora roku dowożę frontend swoich funkcji w panelu administracyjnym; własne produkty buduję w Next.js.

Bazy danych

  • PostgreSQL
  • MySQL
  • MongoDB
  • Redis
  • Elasticsearch
  • Doctrine
  • Prisma

W architekturze mikroserwisów ponad 30 baz: każda usługa z własną bazą i własną kopią danych.

Testy i jakość

  • Behat
  • PHPUnit
  • PHPStan
  • PHPArkitect
  • PHP CS Fixer
  • ESLint
  • Jest

Wprowadziłem Behat jako standard testowania w zespole — zestaw urósł do ponad 2300 scenariuszy.

Infrastruktura i CI/CD

  • Kubernetes (manifesty, kubectl, k9s)
  • Docker
  • Azure (AKS)
  • AWS (ECS/EKS, RDS, Lambda)
  • OVH
  • Bitbucket Pipelines
  • GitHub Actions
  • GitLab CI

Definicje Kubernetes dopisuję razem z funkcją — zmiana wychodzi z konfiguracją wdrożenia w jednym pull requeście.

Programowanie z AI

  • Claude Code
  • Codex
  • własne skille
  • integracje MCP
  • refaktoryzacja i testy z AI

Wprowadziłem Claude Code do pracy zespołu: skille do cyklu Jira → branch → pull request → review.

Języki: polski (ojczysty), angielski B2 — codzienna komunikacja techniczna, rozmowy z klientami z USA

Case study

Najciekawsze problemy, które rozwiązywałem. Bez nazw firm — liczy się, co i jak zrobiłem.

Modularny monolit na DDD i CQRS

Silnik procesów HR w platformie SaaS do onboardingu pracowników — preboarding, onboarding i offboarding dla około 170 aplikacji klientów.

Moja rola: architekt i główny autor

  • Zaprojektowałem system od pustego repozytorium jako modularny monolit: moduły z własną domeną, granice i warstwy pilnowane automatycznie przez PHPArkitect.
  • Rozdzieliłem zapis od odczytu (CQRS) i zbudowałem mechanizm asynchronicznych command handlerów — ciężkie operacje idą przez kolejkę, a nie blokują żądań użytkownika.
  • Zaplanowane akcje, terminy, przypomnienia i alerty działają jako zdarzenia domenowe, więc nowe kroki procesu dodaje się bez ruszania istniejących.
  • Behat jako standard testowania każdej funkcji; system przeszedł wszystkie aktualizacje od Symfony 5.3 / PHP 8.0 do Symfony 7.4 / PHP 8.5.

Efekt: Ponad 7000 commitów i 2300+ scenariuszy Behat; system rozwija dziś sześcioosobowy zespół.

  • DDD
  • CQRS
  • Symfony Messenger
  • RabbitMQ
  • PHPArkitect
  • Behat

AI jako usługa w produkcie

Funkcje oparte na modelach językowych — dla klientów platformy i dla pracowników firmy.

Moja rola: projektant i wykonawca

  • Funkcja generowania pytań do ankiet na podstawie materiałów dostarczonych przez klienta: wgrywasz dokumenty, dostajesz gotowy zestaw pytań do przejrzenia.
  • Wewnętrzny chatbot z wiedzą z firmowego wiki — każdy pracownik może zadać pytanie i dostać odpowiedź opartą na dokumentacji firmy.
  • Serwer MCP otwierający API platformy dla asystentów AI: tokeny access i refresh wydawane per klient, przełącznik w panelu administratora.
  • OpenAI
  • LLM
  • chatbot
  • MCP
  • Symfony

Z monolitu do 36 mikroserwisów

Platforma zakupu reklam w zewnętrznych sieciach reklamowych, która codziennie padała przy 50 tys. aktywnych użytkowników dziennie.

Moja rola: tech lead

  • Razem z CTO zaprojektowałem migrację monolitu w Laravelu do 36 autonomicznych usług (PHP, Java, Python); mój zespół odpowiadał za 16.
  • Komunikacja asynchroniczna przez RabbitMQ, każda usługa z własną bazą i własną kopią danych; synchroniczne API tylko tam, gdzie chodziło o pieniądze.
  • Około 120 instancji i ponad 30 baz: Elasticsearch do dopasowań, MongoDB do statystyk, Redis, ELK.
  • Byłem jednym z sześciu tech leadów, gdy zespół rósł z 6 do 30 osób.

Efekt: Z 50 tys. do 3 milionów aktywnych użytkowników dziennie.

  • mikroserwisy
  • event-driven
  • RabbitMQ
  • Elasticsearch
  • MongoDB
  • Redis

Platforma, którą klient konfiguruje sam

Ta sama platforma SaaS — działy HR klientów modelują w niej własne procesy bez udziału programistów.

Moja rola: projektant modelu danych

  • Model danych dla pól i formularzy własnych, raportów, reguł dostępu do dokumentów, segmentów pracowników, wydarzeń i spotkań.
  • Integracje, na których stoi biznes: rozliczenia w Stripe (subskrypcje, linki płatności, webhooki), HubSpot CRM, wysyłka SMS.
  • Frontend tych funkcji w panelu administracyjnym na React 18 i TypeScript.
  • modelowanie danych
  • Stripe
  • HubSpot
  • webhooki
  • React

Programowanie z AI w zespole

Zespół produktowy 8–10 inżynierów.

Moja rola: inicjator i autor narzędzi

  • Przyniosłem Claude Code do codziennej pracy zespołu.
  • Napisałem skille do cyklu Jira → branch → pull request → review.
  • Współtworzyłem dokumentację CLAUDE.md dla modułów, żeby agent znał reguły architektury i testów.

Efekt: Zespół przyjął skille jako standard pracy.

  • Claude Code
  • skille
  • CLAUDE.md
  • code review

Zespół i CI/CD od zera

Aplikacja PWA do onboardingu i zaangażowania pracowników dla polskiego klienta.

Moja rola: lider zespołu

  • Prowadziłem zespół dwóch backendowców, frontendowca i testera; backend w Symfony, frontend w React.
  • Zbudowałem CI/CD w Bitbucket Pipelines: build, PHPUnit, PHPStan i PHP CS Fixer przy każdym commicie.
  • Wdrożenie na serwery dedykowane tylko po zielonym pipelinie.
  • przywództwo
  • CI/CD
  • Bitbucket Pipelines
  • PHPStan
  • PWA

Pracowałem też nad

  • systemem śledzenia wynajmu maszyn budowlanych dla klienta z USA (frontend)
  • systemami wspierającymi procesy windykacyjne (tech lead)
  • systemami do pośrednictwa w sprzedaży kredytów i ubezpieczeń
  • usługami dla szkół jazdy, konfiguratorem diet i grami dla dzieci na Androida
  • oprogramowaniem miejskich kiosków informacyjnych

VibeAudit Audyt aplikacji zbudowanych z AI

Paweł Maj — Jestem twórcą tej usługi i osobiście prowadzę każdy audyt.

Twoja aplikacja powstała w kilka dni. Sprawdzam ją, zanim zrobi to ktoś inny.

Lovable, Bolt, Replit, Cursor, Claude Code — z nimi aplikacja powstaje szybko, ale nikt nie patrzy, gdzie leży baza, kto widzi sekrety i czy logowanie da się obejść. Przeglądam kod i infrastrukturę według 85 punktów kontrolnych w 8 obszarach, opartych na OWASP Top 10 i ASVS.

Każde znalezisko sprawdzam w kodzie, zanim trafi do raportu. Płacisz za ocenę seniora: co naprawdę Cię dotyczy, co jest groźne dziś, a co może poczekać.

W cenie audytu

  • raport po polsku w HTML i PDF
  • 30-minutowa rozmowa o wynikach
  • jeden retest w ciągu 30 dni
  • przykładowy pipeline CI/CD dla Twojego repozytorium

Stała cena od 599 zł, ustalona przed startem.

Zobacz ofertę na vibeaudit.pl
Szkic aplikacji: przeglądarka, serwer i baza danych pod lupą

Kontakt

Projekt, praca, audyt albo po prostu pytanie — odpisuję zwykle tego samego dnia.

kontakt@pmaj.pl
Telefon
+48 515 558 789
LinkedIn
linkedin.com/in/majpawel
Gdzie
Wrocław, pracuję zdalnie