Krzysztof Zdunkowski

Krzysztof Zdunkowski

Full-Stack Developer | Backend Specialist

Umiejętności

PHP
90%
Python
75%
MySQL
85%
Nginx
80%
JavaScript
80%
Vue.js
70%
Docker
75%
Redis
70%

Formy współpracy

  • Programista do projektu: wsparcie w tworzeniu wybranych modułów lub pełne wdrożenie nowych funkcjonalności.
  • Architekt systemu: projektowanie całej architektury (monolitu, mikroserwisów, integracji zewnętrznych) i wybór technologii.
  • Nowy system: budowanie od podstaw aplikacji webowych i backendów z uwzględnieniem skalowalności, bezpieczeństwa oraz łatwości utrzymania.
  • Istniejący system: stabilizacja, optymalizacja i wdrażanie lekkich praktyk w projektach z dużym długiem technologicznym.

Moje podejście

Lubię uporządkowane, dobrze prowadzone projekty, w których procesy i standardy są jasno określone. Jednocześnie mam bogate doświadczenie w ratowaniu projektów z dużym długiem technologicznym — potrafię szybko przeanalizować istniejący kod, dostosować się do panujących konwencji i wdrożyć praktyki usprawniające rozwój (np. refaktoryzację, automatyczne testy, CI/CD).

Jestem zwolennikiem lekkich rozwiązań, działających na minimalnej infrastrukturze (co przekłada się na niższe koszty utrzymania). W razie potrzeby wykorzystuję kontenery lub usługi chmurowe, ale tylko tam, gdzie realnie przynoszą wartość (skalowalność, prostota wdrożeń, bezpieczeństwo). Dzięki wszechstronnemu doświadczeniu umiem szybko ocenić, które elementy systemu można uprościć, a które wymagają dodatkowej stabilizacji.

Stwórzmy coś wspaniałego razem

Skontaktuj się
krzysztof@zdunkowski.pl
888 576 949

Technologie

PHP

PHP

Z PHP zacząłem swoją przygodę już od wersji 4.2, a dziś pracuję na najnowszych stabilnych wydaniach (8.4). Mam bardzo duże doświadczenie z tym językiem – realizowałem zarówno proste, jak i zaawansowane projekty, korzystając z rozmaitych frameworków między innymi: Laravel, Yii, KohanaPHP. W ramach tych realizacji nie ograniczałem się wyłącznie do pisania kodu: odpowiadałem też za dobór technologii, projektowanie architektury aplikacji i organizację bazowych założeń projektowych.

Ponadto mam duże doświadczenie – zarówno własnych rozwiązań od A do Z, jak i tych opartych na frameworkach, wykorzystując narzędzia debugujące czy profilujące (m.in. Xdebug). Dużo moich zadań prz różnych projektach polegało na optymalizacji rozwiązań, projektowanych jak i tych już istniejących. Przez wiele lat prowadziłem serwis iFotos – hosting zdjęć zbudowany na kilku serwerach dedykowanych z łączami 1 Gbit, wykorzystujący Nginx + PHP-FPM + XCache + MySQL. Pomimo ograniczonego sprzętu całość przy pełnym obciążeniu łącza generowała średnio 40 % wykorzystania CPU. Dzięki dobrze przemyślanej optymalizacji infrastruktura działała stabilnie aż do zmniejszenia ruchu i zawieszenia usługi wskutek zmiany potrzeb rynkowych. Jestem zwolennikiem lekkich rozwiązań i przemyślanego, łatwego w utrzymaniu kodu.

Python

Python

Z Pythonem zetknąłem się już na studiach, a pracę inżynierską w całości napisałem właśnie w tym języku. Choć nie mam bardzo bogatego doświadczenia komercyjnego, realizowałem kilka własnych projektów związanych z przetwarzaniem plików wideo, audio i zdjęć właśnie z Pythonem jako podstawowym rozwiązaniem. W różnych projektach produkcyjnych odpowiadałem za tworzenie skryptów do transformacji i analizy dużych zbiorów danych: grupowania, filtrowania czy masowej zmiany nazw oraz treści plików, czy rekordów w bazach danych, według skomplikowanych wzorców.

Dzięki wieloletniej praktyce w PHP doskonale rozumiem, jak zorganizować projekt tak, by Pythonowe rozwiązania bezproblemowo integrowały się z innymi warstwami – frontendem, mikroserwisami czy aplikacjami mobilnymi. W ramach mojego własnego systemu zabezpieczeń nieruchomości opartego na Raspberry Pi i WebSocketach projektowałem skomunikowane zdalnie interkomy, wykorzystujące szyfrowane połączenia i uwierzytelnianie tokenami JWT. Jest to jedno z wielu zawodowych doświadczeń które pozwoliły mi zgłębić architekturę rozproszonych rozwiązań IoT, a także skupić się na bezpieczeństwie, wydajności, łatwości utrzymania i rozwoju aplikacji.

JavaScript

JavaScript

Z JavaScriptem pracuję od wczesnych lat — jeszcze zanim powstało jQuery. Doskonale rozumiem wewnętrzne mechanizmy języka: model prototypowania, hoisting, event loop i asynchroniczność. Znam też typowe pułapki, takie jak powielanie funkcji na każdym obiekcie zamiast umieszczania ich na prototypie – w skali tysięcy elementów może to prowadzić do niepotrzebnego mnożenia setek linii kodu w pamięci przeglądarki.

W codziennej pracy korzystam z jQuery, a także mam praktyczne doświadczenie z nowoczesnymi frameworkami front-endowymi. Miałem okazję pisać zarówno „czysty” JavaScript, jak i rozbudowane, modułowe aplikacje SPA. Pracowałem też z Node.js (choć nie jest to moja ulubiona technologia), dzięki czemu rozumiem wyzwania pełnego stosu JS.

Efektem jest umiejętność tworzenia wydajnych, łatwych w utrzymaniu interfejsów, które minimalizują zużycie pamięci przeglądarki i maksymalizują responsywność aplikacji.

Vue.js

Vue.js

Vue.js to stosunkowo nowa dla mnie technologia, z którą szybko się polubiliśmy. Komercyjnie budowałem w Vue zarówno pojedyncze widoki, jak i bardziej rozbudowane komponenty – między innymi własny moduł wyświetlania tabeli z paginacją opartą o REST API (w tym obsługa nagłówków do paginacji i różne typy danych w kolumnach).

Doceniam przejrzystość podejścia opartego na pojedynczych plikach komponentów (.vue), reużywalność propsów i emitowanie zdarzeń oraz elastyczne sloty umożliwiające dostosowanie zachowania i wyglądu pod konkretne wymagania. Dzięki tym wzorcom tworzę czytelny, modularny kod, który łatwo rozszerzać i utrzymywać w dalszym rozwoju aplikacji.

MySQL

MySQL

Mam szerokie doświadczenie w projektowaniu i optymalizacji baz MySQL – od modelowania schematów i doboru typów danych, przez kreowanie indeksów (w tym covering indexes i GIS/JSON), po zaawansowane zarządzanie transakcjami: autocommit, manualny START/COMMIT/ROLLBACK oraz rozwiązywanie deadlocków przy różnych poziomach izolacji (READ COMMITTED, REPEATABLE READ). Korzystam z narzędzi takich jak mysqldump i phpMyAdmin do tworzenia backupów i przywracania danych, a także definiowania użytkowników, ról i precyzyjnych uprawnień. Znam zmiany i nowe funkcjonalności kolejnych wydań MySQL 5.x, 8.x i nowszych (12/13/14/15), potrafię projektować lekkie, ale skalowalne struktury, które służą produkcyjnym obciążeniom.

Docker

Docker

W projektach pracowałem z Dockerem przede wszystkim jako odbiorca gotowych konfiguracji (obrazy, Compose), dzięki czemu od razu mogłem uruchamiać pełne środowisko w jednym poleceniu. Rozumiem, jak skonstruowany jest Dockerfile, jak definiować sieci i wolumeny, a także jak w Compose skoordynować wiele usług (PHP-FPM, Nginx, Redis, MySQL). Znam też zasady optymalnego budowania obrazów, wieloetapowego builda i pracy z prywatnymi rejestrami kontenerów.

Nginx

Nginx

Od wersji 0.7 pracuję z Nginxem zarówno w niewielkich serwisach, jak i w dużych, rozproszonych środowiskach. W swoich projektach stawiam go na froncie ruchu HTTP(S), wykorzystując go jako reverse-proxy i bufor cache’ujący statyczne zasoby (CSS, JS, multimedia), co znacznie odciąża warstwę aplikacyjną. Konfigurowałem load-balancing (algorytmy least_conn, ip_hash), aby równomiernie rozprowadzać ruch między backendami, oraz ograniczenia ruchu (limit_req_zone, limit_conn_zone), które chronią serwery przed przeciążeniem i nagłymi atakami. Przygotowywałem konfigurację HTTP/2 oraz mechanizm http2_push_preload dla szybszego ładowania krytycznych zasobów. W projekcie iFotos wykorzystałem X-Accel-Redirect – PHP przygotowywało tylko metadane i licznik odsłon w cache, a sam plik wysyłał Nginx, co pozwoliło obsłużyć znacznie większą liczbę jednoczesnych pobrań przy minimalnym narzucie.

Redis

Redis

W wielu projektach wykorzystywałem Redis jako warstwę cache’ującą najbardziej obciążające zapytania i fragmenty danych. Dzięki temu znacząco skracałem czasy odpowiedzi aplikacji i odciążałem bazy danych, co zawsze przekładało się na lepszą skalowalność i stabilność całego systemu. Redis służył mi przede wszystkim jako szybka pamięć podręczna wyników zapytań oraz sesji, a odpowiednio dobrane wartości TTL pozwalały zachować świeżość danych przy jednoczesnym ograniczeniu zużycia pamięci.

Photoshop

Photoshop

Photoshopa znam od ponad 20 lat i operuję nim płynnie, więc jestem samowystarczalny w każdym etapie prac graficznych. W razie potrzeby precyzyjnie tnę layouty i wyodrębniam elementy graficzne – wraz z cieniami czy przejściami warstw – zastępując złożone efekty rozwiązaniami, które można wyeksportować jako samodzielne pliki z przezroczystym lub półprzezroczystym tłem. Przygotowuję i optymalizuję zdjęcia czy ikony (usuń zbędne metadane, dobór rozmiarów i kompresji), by każdy zasób ładował się możliwie najszybciej. Pracuję na najnowszej wersji Photoshopa, sięgając po narzędzia AI tylko tam, gdzie rzeczywiście przyspieszają i ułatwiają pracę – od automatycznej selekcji po inteligentny retusz.

Autodesk 3ds Max

3ds Max

Z 3ds Max zetknąłem się prawie 20 lat temu z potrzeby realizacji mojej pasji do gier komputerowych – marzyłem o tworzeniu własnych światów. W tym czasie opanowałem modelowanie obiektów i scen, ustawianie świateł pod kątem renderów fotorealistycznych, podstawy animacji oraz prostych symulacji cząsteczkowych. Przez kilka lat byłem głównym grafikiem 3D przy hobbystycznym projekcie moda „Mroczne Tajemnice” do gry Gothic I, gdzie odpowiadałem za całokształt assetów – od projektów koncepcyjnych po finalne tekstury i siatki poligonowe. Choć na co dzień nie pracuję teraz w 3ds Maxie, zdobyte wtedy umiejętności wykorzystuję nadal, projektując np. elementy do druku 3D lub przygotowując proste wizualizacje koncepcyjne. Dzięki temu moje kompetencje graficzne doskonale uzupełniają szeroki wachlarz umiejętności programistycznych i systemowych.

Laravel

Laravel

W Laravelu pracowałem nad bardzo różnorodnymi projektami – od niewielkich serwisów po rozbudowane aplikacje korporacyjne – zawsze dbając o czytelną architekturę i wysoką wydajność. Wykorzystywałem Blade do budowania elastycznych widoków, dokumentowałem REST API przy pomocy Swaggera, tworzyłem własne polecenia Artisan do automatyzacji zadań oraz zarządzałem kolejkami zadań (Queues) dla procesów asynchronicznych. Wdrażałem uwierzytelnianie oparte na JWT oraz pełną obsługę użytkowników (rejestracja, logowanie, reset hasła, potwierdzanie emaila) oraz cache’owałem najbardziej obciążające fragmenty danych w Redisie, co znacząco przyspieszało odpowiedzi i odciążało bazę. Dzięki temu zdobyłem szerokie doświadczenie w budowaniu skalowalnych, łatwych w utrzymaniu aplikacji, które sprawdzają się w rzeczywistych, często zmiennych warunkach biznesowych.

Yii2

Yii2

W Yii pracowałem przy wielu różnych projektach – od prostych aplikacji CRUD po zaawansowane systemy korporacyjne – zawsze stawiając na czytelność kodu i elastyczność architektury. Wykorzystywałem ActiveRecord do wygodnej pracy z bazą danych, pisałem migracje dla wersjonowania schematu, a dzięki Gii przyspieszałem tworzenie szkieletów modułów. Budowałem REST-owe API z paginacją i dokumentacją, implementowałem własne komponenty i widgety do wielokrotnego użytku oraz pisałem komendy konsolowe (Console Commands) do zadań automatyzujących procesy. Wdrażałem role i uprawnienia (RBAC) oraz cache’owałem często używane zapytania za pomocą Redis, co pomagało utrzymać niskie czasy odpowiedzi nawet przy dużym ruchu. Dzięki temu mam wszechstronne doświadczenie w tworzeniu skalowalnych, bezpiecznych i łatwych w utrzymaniu aplikacji w ekosystemie Yii.

Flask

Flask

Flask poznałem już w 2010 roku jako lekki i wydajny framework Pythona. W projektach buduję na nim REST-owe API organizując kod w modularnych blueprintach, zabezpieczając endpointy za pomocą JSON Web Tokenów i dokumentując je zgodnie ze standardem OpenAPI. Dodatkowo używam Flask-SocketIO do obsługi połączeń WebSocket ze zdalnymi urządzeniami (np. domofony IoT), co pozwala na szyfrowaną, dwukierunkową komunikację bez potrzeby nadawania sprzętom publicznego adresu IP i znacząco zwiększa odporność architektury na awarie. Migracje bazy danych realizuję z Flask-Migrate, a taka organizacja sprawdza się świetnie w systemach wymagających niskich opóźnień i skalowalnej wymiany danych w czasie rzeczywistym.

Raspberry Pi

Raspberry Pi

W projektach z Raspberry Pi łączyłem zarówno elektronikę, jak i oprogramowanie w jednym działającym prototypie. Sterowałem modułem kamery z podświetleniem podczerwonym do nocnych nagrań, wzmacniaczem z głośniczkami oraz mikrofonem, a także obsługiwałem klawiaturę matrycową 3×4 i niewielki wyświetlacz do interakcji z użytkownikiem. Całość zarządzałem w Pythonie, wykorzystując biblioteki GPIO do odczytu przycisków i sterowania wyjściami oraz Flask-SocketIO do zdalnej komunikacji. Dodatkowo integrowałem system z elementami automatyki (przekaźniki, sterowniki) i przygotowywałem obudowy w 3ds Max do wydruku na drukarce 3D, tak by wszystkie moduły idealnie do siebie pasowały. Choć na razie mam działające proof-of-concepty, dobrze rozumiem prototypowanie i szybkie łączenie sprzętu z kodem – kolejne funkcjonalności to już kwestia czasu i pomysłu.

Doświadczenie

08.2024 – 05.2025 Przerwa technologiczna
Po zakończeniu ostatniego projektu poświęciłem czas na gruntowne odświeżenie umiejętności: zgłębiałem nowe biblioteki Pythona do przetwarzania danych i WebSocketów, eksperymentowałem z architekturą mikroserwisów oraz tworzyłem własne prototypy rozproszonych aplikacji. Przeprowadziłem też benchmarki wydajnościowe i testy obciążeniowe, aby lepiej zrozumieć wzorce skalowalnych systemów.
06.2023 – 08.2024 Senior Backend & Full-Stack Developer
Opracowałem i utrzymuję kompleksowy panel admina (Vue 3 + Nuxt + TypeScript) oraz API-Admin w czystym PHP/Laravel. Zaprojektowałem system uprawnień, licencji i ról obejmujący setki różnych scenariuszy, przygotowałem pełną dokumentację Swagger i napisałem ponad 200 testów jednostkowych. Wdrożyłem także automatyzację CI/CD (GitLab CI), docker-compose i procesy release’ów, co skróciło czas wdrożenia nowych wersji z kilku godzin do kilkunastu minut. Regularnie mentoringowałem młodszych deweloperów i prowadziłem code review.
08.2022 – 05.2023 Senior Backend Developer
Projektowałem i rozwijałem backend w Laravelu, budując REST API z autogen[owanymi] dokumentami Swagger. Tworzyłem zaawansowane moduły do zarządzania kamerami w standardzie ONVIF, integrowałem urządzenia Modbus oraz optymalizowałem zapytania MySQL/MariaDB. Refaktoryzowałem istniejące moduły Node.js (PM2), dodając monitorowanie i alerty, co znacząco zwiększyło stabilność produkcji.
02.2020 – 07.2022 Senior Full-Stack Developer
Wykreowałem i rozwijałem wielomodułowy system do zarządzania projektami budowlanymi (framework Yii2, PHP 7.2, MsSQL), odpowiadając za end-to-end: od projektowania baz danych, przez paginację i reporty, po responsywne widoki i integrację z zewnętrznymi API. Napisałem kilkanaście własnych komponentów do tabel, filtrowania i paginacji, a także narzędzia do masowej migracji danych i generowania raportów PDF.
08.2016 – 01.2020 Senior Full-Stack Developer & Business Analyst
Stabilizowałem i rozwijałem systemy w PHP, wdrożyłem GIT i Continuous Delivery, a także zaprojektowałem algorytmy weryfikacji kandydatów (IRT w Pythonie). Migracje z PHP 5.4 do 7.2 oraz optymalizacje wydajnościowe poprawiły bezpieczeństwo i czas odpowiedzi aplikacji o ponad 30%.
08.2013 – 12.2017 Full-Stack Developer
Prowadziłem rozwój systemu w KohanaPHP – od konfiguracji serwerów, przez REST API dla partnerów, aż po landing pages i integrację płatności. Samodzielnie zarządzałem infrastrukturą Mercurial/OVH i optymalizowałem proces deploy’a.
10.2012 – 02.2013 Junior Full-Stack Developer
Adaptacja MediaWiki do potrzeb portalu, optymalizacja wyświetlania dużych ilości danych w czasie rzeczywistym, wdrożenie środowisk developerskich i produkcyjnych.
11.2008 – 06.2021 Owner & Lead Developer (CreaWeb / iFotos)
Przez 12+ lat samodzielnie prowadziłem analizę wymagań klientów, projektowanie i wdrożenie stron WWW, a także infrastrukturę hostingową (Nginx, PHP-FPM, XCache, MySQL). Optymalizowałem systemy przy pełnym obciążeniu łącza 1 Gbit, uzyskując średnio <40 % CPU, i rozwijałem REST API dla partnerów, landing pages oraz narzędzia marketingowe.