Backend
- PHP 8+
- Symfony 7 (Messenger, Doctrine)
- Laravel
- REST APIs
- RabbitMQ
- legacy Symfony 3.4
Did every framework upgrade of my system myself: from Symfony 5.3 / PHP 8.0 to Symfony 7.4 / PHP 8.5.
Solutions architect and technical leader
For 15 years I have been turning business problems into systems that keep growing for years. I start by understanding the domain, fit the architecture to the scale and to the team, then lead people through building it — to production and beyond.
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()));
}
}Backend is where I go deepest, but I deliver whole features — from the domain model to the deployment config.
Did every framework upgrade of my system myself: from Symfony 5.3 / PHP 8.0 to Symfony 7.4 / PHP 8.5.
Designed a DDD/CQRS workflow engine from scratch and co-designed a monolith-to-36-microservices migration.
For the last 18 months I have delivered the frontend of my features in the admin panel; my own products I build in Next.js.
30+ databases in a microservice architecture, every service owning its database and its own copy of the data.
Introduced Behat as the team’s testing standard — the suite has grown to 2,300+ scenarios.
I write the Kubernetes definitions with the feature — a change ships with its deployment config in the same pull request.
Brought Claude Code into the team’s daily flow: skills for the Jira → branch → pull request → review cycle.
Languages: Polish (native), English B2 — day-to-day written technical communication, calls with US clients
The most interesting problems I have solved. No company names — what matters is what I did and how.
The HR workflow engine of a SaaS onboarding platform — pre-boarding, onboarding and offboarding for ~170 client applications.
My role: architect and main author
Result: 7,000+ commits and 2,300+ Behat scenarios; a six-person team develops it today.
Features built on language models — for the platform’s clients and for the company’s employees.
My role: designer and builder
An ad-buying platform for third-party advertising networks that crashed daily at 50k daily active users.
My role: tech lead
Result: From 50k to 3 million daily active users.
The same SaaS platform — client HR teams model their own processes in it without engineering work.
My role: data model designer
A product team of 8–10 engineers.
My role: initiator and tool author
Result: The team adopted the skills as its standard way of working.
An employee onboarding and engagement PWA for a Polish client.
My role: team lead
VibeAudit Audits of apps built with AI
Paweł Maj — I created this service and run every audit myself.
Lovable, Bolt, Replit, Cursor, Claude Code — they get an app live fast, but nobody looks at where the database sits, who can see the secrets, or whether the login can be bypassed. I review the code and infrastructure against 85 checkpoints in 8 areas, based on OWASP Top 10 and ASVS.
Every finding is verified in the code before it goes into the report. You pay for a senior’s judgement: what actually affects you, what is dangerous today and what can wait.
Fixed price from 599 PLN, agreed before work starts.
See the offer on vibeaudit.plThe service and its site are in Polish, for clients in Poland.

A project, a role, an audit or just a question — I usually reply the same day.