Skills

Experience

Areas I have worked in

  • E-commerce
  • Marketplaces
  • Multistore
  • Warehousing & logistics
  • Multi-tenant SaaS
  • Reservation systems
  • HR
  • Internal systems

Frontend

  • Next.js 16+
  • React
  • TypeScript 7
  • TanStack
  • Tailwind CSS
  • Technical SEO

Alongside Next.js, I want to use:

  • React Native

Deprecated

  • Bootstrap
  • Materialize
  • Twig
  • Smarty
  • Latte
  • jQuery

Data and integrations

  • PostgreSQL
  • Redis
  • RabbitMQ
  • Elasticsearch
  • MongoDB
  • SQLite
  • Mercure

Deprecated

  • MySQL
  • MariaDB

Testing and code quality

  • PHPUnit 13
  • PHPStan Max
  • PHPStan Strict Rules
  • CodeSniffer
  • Slevomat Coding Standard
  • ECS
  • Deptrac
  • Playwright
  • Chrome DevTools MCP

Security

Application security

  • SQL Injection
  • XSS
  • CSRF
  • UUID
  • Input validation
  • Secure password handling
  • Rate limiting

Identity & access

  • OAuth 2.0
  • OIDC
  • JWT
  • RBAC

Web and transport security

  • CSP
  • HTTPS / TLS
  • Let’s Encrypt

Email infrastructure

  • SPF
  • DKIM
  • DMARC

Development principles

  • SOLID
  • KISS
  • DRY
  • YAGNI
  • PSR
  • Clean Architecture
  • DDD
  • Hexagonal Architecture
  • Dependency Injection
  • Design Patterns

Deprecated

  • Controller → Facade → Service

AI and tools

AI-assisted development

  • ChatGPT
  • Codex
  • Claude
  • OpenCode
  • Ollama
  • Kimi
  • Cursor
  • Custom skills
  • MCP
  • Agent workflow design

Development tools

  • PhpStorm
  • DataGrip
  • Postman
  • Elasticvue
  • RedisInsight
  • CopyQ

Previously used

  • Visual Studio Code
  • Adminer
  • phpMyAdmin

Development and deployment

Core experience

  • Linux
  • tmux
  • Docker
  • Traefik
  • nginx
  • Git
  • Git Worktrees
  • Composer
  • Make
  • SSH
  • PuTTY
  • FileZilla
  • CI/CD
  • Domain and DNS management
  • Email deliverability

Build and frontend environment

  • Turborepo
  • npm
  • Yarn

Team collaboration

  • Jira
  • Slack
  • Microsoft Teams
  • Azure DevOps

Previously used

  • Windows
  • WSL
  • Apache
  • .htaccess
  • XAMPP
  • WAMP
  • SVN
  • Trello
  • WinSCP
  • Total Commander

CMS and publishing systems

  • Custom solutions

Deprecated

  • PHP-Fusion
  • phpBB
  • WordPress
  • Joomla
  • PrestaShop

Other

Deprecated

  • AMX Mod X
  • Pawn
  • SourceMod
  • SourcePawn

Experience

PHP experience

PHP is my primary working language. Since 2007, I have used it to build and evolve e-commerce, internal systems, APIs, and integration services.

  • PHP 5 → PHP 8.5+
  • Nette
  • Symfony
  • E-commerce
  • APIs and integrations

Practical highlights

Today: PHP 8 and Symfony

Modern backends, APIs, and integrations with a focus on sustainable architecture, testing, and static analysis.

Amiatex in PHP 7

Co-creating a custom multistore e-commerce solution for multiple stores, domains, languages, currencies, and marketplace integrations.

Nette at Sportisimo

Team development of an internal system for store staff and stock movement on PDA scanners.

PHP 5 and custom solutions

I started with a competition website, custom websites, and applications without a framework. I gradually began using libraries and packages for recurring tasks.

Open the full PHP experience

Experience

Symfony experience

Symfony is my primary PHP framework. I use it to build current backends, APIs, and integration services that can evolve safely over the long term.

  • Symfony 8.1
  • Symfony Console
  • Doctrine
  • Profiler
  • REST API

Practical highlights

Today: my primary PHP framework

I use Symfony for current backends, APIs, and integration services, with a focus on long-term maintainability.

A custom API platform

When building an API platform, I did not hesitate and chose Symfony as the natural foundation for the whole solution.

Components in independent projects

I gradually started using Symfony Console, Doctrine, and other libraries outside PrestaShop as well.

The beginning in PrestaShop

PrestaShop gave me daily hands-on experience with Symfony ecosystem tools and their practical use.

Open the full Symfony experience

Experience

Nette experience

Nette was an important part of my professional development: from early projects with Dibi and Tracy, through client applications, to daily development work at Sportisimo.

  • Nette
  • Dibi
  • Tracy
  • Latte
  • PHP

Practical highlights

Today: Symfony is my preference

For new PHP projects, I now choose Symfony for its broader ecosystem and larger international community.

Nette as the foundation at Sportisimo

At Sportisimo, Nette was the application foundation and central to my daily e-commerce development work.

Client applications

I encountered Nette while developing and maintaining client applications, learning its conventions in real projects.

Dibi and Tracy in personal projects

Before working more extensively with Nette, I used its well-known tools for database work and debugging in personal projects.

Open the full Nette experience

Way of working

Application architecture

I do not choose architecture by the name of a pattern, but by the complexity of the problem. The goal is clear boundaries, safe changes, and a solution proportionate to the application.

  • Clean Architecture
  • DDD
  • Hexagonal Architecture
  • Dependency Injection
  • SOLID

How I think about architecture

UI, Application, Domain, and Infrastructure boundaries

For more complex parts, I separate inputs, use cases, business rules, and technical details so a change does not flow through the entire system.

Ports and adapters for the outside world

Application logic depends on its own interface; a database, queue, or external API is its concrete adapter.

Transactions at the use case

I keep a transaction boundary where an application performs one related business operation, not randomly inside an infrastructure detail.

Pragmatism before dogma

When complexity does not justify more layers, I stay with a simpler Controller → Service → Doctrine solution.

Open the full architecture detail

Experience

API and integrations

I do not see an API integration as a few endpoints. It is a reliable flow of data between systems — from the business requirement through failure states to operational traceability.

  • REST API
  • OpenAPI / Swagger
  • Marketplaces
  • Import and export
  • RabbitMQ

Practical highlights

The full data flow, not just an endpoint

When designing an integration, I consider the business meaning of the data, system responsibilities, failures, and the ability to trace every step.

E-commerce and marketplace integrations

Orders, inventory, products, and external sales channels need consistent and repeatable processing.

Resilience to failures

I work with pagination, rate limiting, idempotency, retries, and clear failure states.

Contract and operations

I complement REST and OpenAPI with external API authentication, logging, and monitoring of unsuccessful synchronisations.

Open the full API and integrations detail

Experience

Testing and code quality

I do not treat code quality as the last step before delivery. Tests, static analysis, and architectural checks give me fast feedback throughout development.

  • PHPUnit 13
  • PHPStan Max
  • PHPStan Strict Rules
  • ECS
  • Deptrac

Practical highlights

Unit tests for rules and edge cases

I use them where I want fast, isolated verification of domain logic, value objects, or application decisions.

Integration tests at real boundaries

They complement unit tests where cooperation with a database, Redis, a queue, or the HTTP layer matters.

Static and architectural checks

PHPStan, coding standards, and Deptrac protect types, readability, and intended boundaries between application parts.

Checks matched to the change

Before merging or deploying, the checks relevant to the change should pass — not every tool needs to run thoughtlessly every time.

Open the full testing and code quality detail

Experience

Databases and data design

I do not see a database as an application’s storage alone. A well-designed schema, data integrity, and predictable queries are the foundation of a stable system.

  • PostgreSQL
  • Doctrine
  • MySQL
  • MariaDB
  • SQLite

Practical highlights

Relational design and data integrity

I address relationships, constraints, and transactions in the design itself so the application does not rely only on assumptions in code.

PostgreSQL today, MySQL and MariaDB earlier

I use PostgreSQL most often today; experience with MySQL and MariaDB helps me understand the practical differences between database platforms.

ORM and focused SQL

I use Doctrine where it makes work with the model clearer. For specific or performance-sensitive queries, I choose more direct SQL.

Performance and large data volumes

I address indexes, N+1 queries, pagination, batch processing, and migrations so an application remains readable and operationally manageable.

Open the full database detail

Domain expertise

E-commerce and marketplaces

E-commerce is not just a catalogue and a cart. I develop solutions over the long term where products, pricing, inventory, orders, multiple sales channels, and daily operations meet.

  • E-commerce
  • Marketplaces
  • Multistore
  • Warehousing & logistics
  • Integrations

Practical experience

Products, variants, pricing, and currencies

A catalogue needs to support different variants, pricing rules, and multiple currencies while remaining understandable for both administration and sales channels.

Inventory, reservations, and availability

Availability is not just a number next to a product: it affects reservations, orders, fulfilment, and synchronisation with other systems.

Multistore and marketplaces

One administration can serve multiple stores, domains, languages, currencies, and external marketplace channels.

Long-term operations

A solution also needs to deal with returns, claims, matching external states, and failures that become visible only in production.

Open the full e-commerce detail

Way of working

AI-assisted development

AI speeds up research, design, and well-bounded implementation for me. Responsibility for the brief, architecture, security, and result always remains mine.

  • Custom skills
  • MCP
  • Agent workflows
  • PHPStan
  • CI

How I work with AI

Context before generation

The agent receives the goal, change boundaries, project rules, existing conventions, and a concrete verification method.

Work split into verifiable steps

I separately ask it to explore the problem, propose an approach, implement a small part, and then verify the result.

Custom instructions, skills, and MCP

I describe recurring workflows and safe tool connections explicitly so the outcome remains consistent and traceable.

Review and automated checks

I read generated code, compare it with the brief, and verify it with tests, PHPStan, standards, and CI — I do not accept AI output blindly.

Open the full AI-assisted development detail

Request a call

I will call you on the next working day between 9:00 and 17:00.

You can also call me directly.

+420 605 181 728

Leave your phone number and send a callback request.

By sending, you agree to processing your data in order to handle your request.