Portfolio projektów IT — Piotr Cenkier
Portfolio

Moje projekty

Zawodowo od 15 lat zajmuję się technologiami telco i IT. Na co dzień projektuję i wdrażam rozwiązania chmurowe oparte na platformach Play Cloud i Scaleway — infrastruktura, bezpieczeństwo, managed services dla firm z całej Polski. Ale technologia to też moja pasja i hobby, i nie poprzestaje tylko na tym.

Poniższe projekty to rzeczy które zbudowałem obok — z ciekawości, z potrzeby, albo dlatego że odpowiedniego narzędzia po prostu nie było na rynku. Mieszanka systemów produkcyjnych działających dla klientów, własnych narzędzi których używam codziennie i eksperymentów które stały się czymś poważniejszym niż planowałem.

01

Wieloagentowa platforma orkiestracji AI

MCP AI Orchestrator

Platforma powstała z potrzeby zarządzania rosnącą liczbą modeli AI używanych w codziennej pracy — Claude, Gemini, Ollama i innych. Zamiast przełączać się między osobnymi interfejsami, MCP Orchestrator agreguje wszystkie modele w jednym miejscu i automatycznie dobiera odpowiedni do zadania: szybkie pytania trafiają do Gemini Flash (odpowiedź w ~1s), złożone analizy kodu do Claude Opus, prywatne dane do lokalnego Ollama — bez wychodzenia poza własny serwer.

Kluczową funkcją jest integracja z n8n — platforma może uruchamiać i orkiestrować całe przepływy automatyzacji, łącząc AI z zewnętrznymi serwisami (Gmail, Google Drive, Sheets, webhooks). Bot Telegram pozwala wydawać polecenia agentom bezpośrednio z telefonu. Panel React daje podgląd historii rozmów, zużycia modeli i aktywnych workflow.

Architektura oparta na Model Context Protocol (MCP) sprawia, że dodanie nowego modelu lub narzędzia wymaga jednej konfiguracji — reszta działa automatycznie.

Node.js React TypeScript MCP SDK n8n Claude API Gemini Ollama
02

Strona internetowa Kancelarii Radcy Prawnego — cenkier.pl

Web Development · SEO

Projekt zbudowany na Astro SSG — wszystkie strony generowane są statycznie przy buildzie, co przekłada się bezpośrednio na wyniki w Google PageSpeed i monitorach Core Web Vitals. Strona uzyskuje wyniki w zakresie 90–97/100 zarówno na desktop jak i mobile w kategoriach Performance, Accessibility, Best Practices i SEO.

Mechanizmy które to umożliwiają: zero zbędnego JavaScript na stronach treściowych, self-hosted czcionki eliminujące opóźnienia zewnętrznych CDN, kompresja WebP dla grafik, HTTP/2 z agresywnym cache-control i preloadem krytycznych zasobów.

Widoczność w wyszukiwarkach budowana jest przez kilka warstw technicznych. Każda podstrona ma unikalne meta title i description napisane pod konkretne frazy kluczowe. Sekcje FAQ z rozbudowanymi pytaniami i odpowiedziami targetują frazy długoogonowe — zapytania które użytkownicy wpisują jako pełne pytania. Całość wzmocniona jest przez kompletny zestaw JSON-LD schemas: Article z ImageObject i dateModified (wymagane przez Google Rich Snippets), FAQPage, BreadcrumbList, Service i Person. Sitemap obejmuje 188 URL, RSS feed eksportuje 75+ artykułów, plik llms.txt optymalizuje widoczność w modelach językowych. Hreflang pl/en/x-default obsługuje ruch międzynarodowy.

Astro Contentful CMS PHP API GitHub Actions JSON-LD Core Web Vitals
03

Autonomiczny monitoring SEO

SEO Intelligence Hub

System działa całą dobę bez ingerencji człowieka: zbiera, analizuje i raportuje — zanim właściciel serwisu zdąży zauważyć problem.

Zakres monitorowanych danych obejmuje pozycje fraz kluczowych w czasie (wykrywanie nagłych spadków i wzrostów), wskaźniki indeksowania (ile stron widzi Google, które są wykluczone i dlaczego), Core Web Vitals mierzone w terenie (dane z Chrome User Experience Report), profil linków przychodzących i zmiany w nim, oraz strukturę techniczną — błędy 4xx/5xx, problemy z canonicalem, duplikaty treści, brakujące meta tagi.

Warstwa AI generuje konkretne sugestie poprawy na podstawie zebranych danych: wskazuje które frazy kluczowe są w strefie pozycji 4–10 i wymagają niewielkiego impulsu żeby przeskoczyć na pierwszą stronę, które strony mają dobry ruch ale słaby CTR (problem z meta title/description), gdzie konkurencja zyskuje widoczność i na jakich frazach. Sugestie są priorytetyzowane według potencjalnego wpływu — system mówi co zrobić najpierw.

Integracje: Google Search Console (kliknięcia, wyświetlenia, pozycje), Google Analytics (zachowanie użytkowników, konwersje), zewnętrzne API do analizy linków. Raporty generowane automatycznie w zdefiniowanych cyklach trafiają do klienta bez jego udziału.

Node.js React PostgreSQL Docker Google Search Console API Google Analytics API AI
04

Centrum automatyzacji sprzedaży B2B z AI

Agentic CRM

Każdy handlowiec pracujący w modelu B2B zna ten cykl: znaleźć firmę która może być zainteresowana, ustalić kto decyduje o zakupach, dotrzeć do tej osoby na LinkedIn, napisać wiadomość która nie wygląda jak masowy spam, poczekać, wysłać follow-up, zanotować odpowiedź, zaplanować kolejny kontakt. Przy stu firmach tygodniowo to kilkanaście godzin pracy, z których większość jest powtarzalna.

System przejmuje każdy z tych kroków. Moduł odkrywania firm przeszukuje dostępne źródła i buduje listę potencjalnych klientów według zdefiniowanych kryteriów: branża, wielkość firmy, lokalizacja, technologie które używają. Dla każdej firmy identyfikuje właściwe osoby kontaktowe — nie tylko kogokolwiek, ale decydentów i osoby wpływowe w procesie zakupowym.

Rozszerzenie Chrome działa w tle podczas przeglądania LinkedIn: automatycznie przechwytuje profile, wiadomości i informacje o firmach i synchronizuje je z bazą bez ręcznego kopiowania. Agenci AI (lokalne modele Ollama — dane nie opuszczają serwera) analizują profil każdej firmy i generują spersonalizowaną pierwszą wiadomość: nawiązującą do konkretnych aspektów ich działalności, nie szablon z podmienioną nazwą. System planuje sekwencję follow-upów i przypomina o kolejnym kroku w odpowiednim momencie.

Baza przechowuje pełną historię każdej relacji: kiedy był kontakt, co powiedziano, jaka była odpowiedź, co planowane dalej. Handlowiec rano otwiera panel i widzi listę zadań na dziś — system zdecydował już co wymaga uwagi i w jakiej kolejności.

Node.js React CockroachDB Ollama Chrome Extension Google Sheets API
05

Voice & Video Studio AI

Lokalne studio audio/wideo z AI — open source

Projekt zaczął się od prostego pytania: czy można zbudować lektora który brzmi naturalnie i działa całkowicie lokalnie, bez abonamentu w zewnętrznym serwisie i bez wysyłania tekstu na zewnętrzne serwery?

Odpowiedź to pełne studio audio/wideo zamknięte w jednym interfejsie. Lektor z dostępem do 300+ głosów Microsoft Neural działa bez GPU i bez internetu, ale to tylko punkt startowy. Klonowanie głosu (Chatterbox Turbo dla angielskiego, Chatterbox Multilingual dla polskiego) odtwarza charakterystyczną barwę i sposób mówienia na podstawie kilkunastu sekund nagrania próbki — sklonowany głos działa we wszystkich modułach. Audiobooki generowane z EPUB lub TXT przechodzą przez mastering ACX (−18 LUFS, EBU R128) i wychodzą gotowe do publikacji.

Wideo generowane jest z opisu tekstowego przez AnimateDiff (6 GB VRAM), WAN 2.1 (8 GB) lub CogVideoX-5B (16 GB). Animacja lip-sync ze zdjęcia (EchoMimic lub SadTalker) synchronizuje ruch ust z wygenerowaną mową. Transkrypcja z diaryzacją (WhisperX) rozpoznaje kto mówi kiedy. MusicGen generuje podkłady muzyczne z opisu słownego. Edytor wideo obsługuje trim, crop, zmianę prędkości i podmianę audio — wszystko przez ffmpeg bez zewnętrznych serwisów.

Katalog 22+ modeli AI z auto-konfiguracją do sprzętu: system wykrywa VRAM i dobiera optymalne modele dla każdej kategorii. Projekt dostępny jako open source na licencji MIT.

FastAPI Python React Chatterbox TTS XTTS-v2 WhisperX AnimateDiff WAN 2.1 MusicGen Demucs FFmpeg Ollama
06

AI Query Runner

Masowe zapytania do AI — Excel → odpowiedzi → Excel

Automatyzacja powtarzalnych zapytań do modeli AI zwykle oznacza albo ręczne przeklikiwanie interfejsów przeglądarkowych, albo pisanie dedykowanych skryptów dla każdego dostawcy z osobna. AI Query Runner rozwiązuje to inaczej — wczytujesz plik Excel z listą pytań, wybierasz serwis, klikasz Uruchom. Program przechodzi przez każdy wiersz, wysyła zapytanie i wpisuje odpowiedź z powrotem do tego samego pliku.

Narzędzie obsługuje dwa tryby pracy. Tryb przeglądarkowy steruje Chromium przez Playwright i działa z każdym serwisem który wymaga zalogowania: Gemini, Claude, Perplexity, Copilot, Mistral, DeepSeek. Tryb API trafia bezpośrednio do modelu przez HTTPS — szybciej i bez okna przeglądarki: Gemini API, OpenRouter (dostęp do 300+ modeli), Groq, xAI/Grok, lokalne modele przez Ollama i dowolny endpoint kompatybilny z OpenAI. Wyszukiwarki DuckDuckGo i Google Custom Search uzupełniają zestaw o możliwość zbierania danych z sieci.

Panel webowy zarządza całym procesem: harmonogram pracy, limity dzienne, historia zadań z pobieraniem wyników. Generator zadań pozwala opisać intencję jednym zdaniem — AI przygotowuje gotową listę promptów. Tryb JSON automatycznie rozbija odpowiedzi na kolumny Excela. Projekt dostępny w dwóch wersjach: standardowej (Node.js) i portable — skompilowanej do jednego archiwum ZIP, działającej bez żadnej instalacji.

Node.js TypeScript Playwright Bun Express ExcelJS OpenRouter Ollama
07

Memory AI

Persistent memory dla modeli LLM

Każda rozmowa z modelem AI zaczyna się od zera. Model nie pamięta że wolisz zwięzłe odpowiedzi, że pracujesz w określonym stacku technologicznym, że tydzień temu podjęliście konkretną decyzję architektoniczną i że nie trzeba do niej wracać. To nie jest problem jednej rozmowy — to strukturalne ograniczenie wszystkich obecnych modeli językowych. Memory AI powstał żeby to zmienić.

System działa jako warstwa między modelem a historią: każde ważne zdarzenie, decyzja lub preferencja zapisywane są jako wspomnienie z kontekstem i datą. Embeddingi generowane lokalnym modelem (Ollama) pozwalają na semantyczne wyszukiwanie — model może zapytać "co wiem o tym projekcie" i dostać istotne fakty, nie listę słów kluczowych. Redis przyspiesza najczęściej potrzebne dane. Auto-distylacja po zakończeniu sesji analizuje całą rozmowę i autonomicznie wyciąga wnioski warte zapamiętania.

Protokół MCP sprawia że system działa z każdym modelem który go obsługuje: Claude, Gemini, własny agent n8n. Dashboard React pozwala przeglądać, edytować i usuwać wspomnienia — pełna kontrola nad tym co model "wie".

Projekt udostępniam jako open source na licencji MIT — może być podstawą własnej implementacji persistent memory dla dowolnego agenta AI.

Node.js TypeScript React PostgreSQL pgvector Redis Ollama MCP SDK
08

SEO Marketing Hub

All-in-One platforma SaaS: SEO + marketing AI

Problem który rozwiązuje ta platforma jest prozaiczny: tworzenie treści na potrzeby SEO i marketingu to praca która nigdy się nie kończy. Artykuły, posty, newslettery, opisy — każdy kanał wymaga regularnej publikacji, każda publikacja wymaga researchu, pisania, korekty i ręcznego wklejania do kolejnego narzędzia. Przy kilku serwisach jednocześnie to pełnoetatowa praca.

SEO Marketing Hub agreguje cały ten proces w jednym miejscu. Zamiast przeskakiwać między Google Search Console, narzędziem do monitoringu pozycji, edytorem tekstu i panelem CMS — wszystko dostępne z jednego ekranu. Moduł AI Visibility mierzy coś czego tradycyjne narzędzia SEO jeszcze nie śledzą: jak często dany serwis pojawia się w odpowiedziach modeli językowych (ChatGPT, Gemini, Perplexity). To nowa forma widoczności która staje się coraz ważniejsza.

Pipeline treści wygląda tak: system identyfikuje tematy z potencjałem (luki w treści konkurencji, trendy, słabe pozycje własnych fraz), zleca research przez Google i RSS, generuje artykuł przez LangChain z uwzględnieniem zasad SEO, proponuje tytuł i meta opis, po akceptacji publikuje bezpośrednio do podłączonego CMS i rozsyła w skonfigurowanych kanałach. Jeden klik zamiast godziny pracy.

Architektura multi-site pozwala zarządzać nieograniczoną liczbą serwisów z osobnymi ustawieniami API, kontami Google, SMTP i kanałami dystrybucji — z jednego panelu z selektorem serwisu. Interfejs dostępny w trzech językach: polskim, angielskim i niemieckim.

Node.js React Docker LangChain Google APIs OAuth2 PostgreSQL
09

Automatyzacja procesu szukania pracy z AI

Rekrutacja — AI Job Application Autopilot

Szukanie pracy to w praktyce powtarzalna, żmudna robota: codzienne przeglądanie dziesiątek ofert na kilku portalach naraz, ręczne dopasowywanie CV i listu motywacyjnego pod każdą z osobna, wypełnianie tych samych formularzy w kółko. System powstał żeby przejąć tę część procesu i zostawić kandydatowi tylko decyzje, które faktycznie wymagają człowieka.

Profil kandydata budowany jest automatycznie z importu CV (PDF/DOCX) lub LinkedIn — model AI wyciąga doświadczenie, umiejętności i wykształcenie. Codzienny scraping przeszukuje kilka największych polskich portali (nofluffjobs.com, justjoin.it, pracuj.pl, bulldogjob.pl, theprotocol.it, solid.jobs), deduplikuje oferty po unikalnym odcisku i ocenia dopasowanie do profilu przez embeddingi pgvector połączone z re-rankingiem LLM. Dla każdej wybranej oferty system generuje osobne, spersonalizowane CV i list motywacyjny — nie jeden uniwersalny szablon, tylko treść odwołującą się do konkretnych wymagań z ogłoszenia, przechodzącą przez deterministyczne walidatory jakości i krytyka LLM przed wysyłką.

Wysyłka zgłoszeń działa w trzech trybach ostrożności: hybrydowym (auto tam gdzie bezpiecznie, pauza i jedno kliknięcie tam gdzie strona wymaga weryfikacji), pełnym autopilocie i trybie tylko-przygotowania z ręcznym zatwierdzeniem. Uniwersalny form-filler oparty na Playwright wypełnia formularze aplikacyjne na stronach portali; gdy pojawi się CAPTCHA czy Cloudflare Turnstile, system świadomie nie próbuje tego obchodzić — zatrzymuje się i pokazuje podgląd na żywo, czekając na jedno kliknięcie użytkownika. Kanban statusów pilnuje, żeby nigdy nie doszło do duplikatu zgłoszenia na tę samą ofertę.

Całość działa self-hosted — dane kandydata nigdy nie opuszczają własnego serwera, a wybór modelu AI jest w pełni konfigurowalny: od płatnych (OpenAI, Anthropic, Google) po całkowicie lokalną i darmową Ollamę, gdy priorytetem jest prywatność. Hasła i klucze API szyfrowane są AES-256-GCM. Cotygodniowy mailowy digest podsumowuje najlepsze nowe dopasowania, żeby nie trzeba było samodzielnie sprawdzać panelu codziennie.

NestJS React TypeScript Playwright PostgreSQL pgvector BullMQ Prisma Docker OpenAI / Claude / Gemini Ollama
10

Komercyjny agent głosowy i tekstowy z Hybrid RAG

agentRAG — Voice & Text AI Agent Platform

Firmy wdrażające bota AI zwykle kończą z dwoma osobnymi systemami: jednym na stronie, drugim na infolinii — inne prompty, inna wiedza, inne odpowiedzi na to samo pytanie zadane innym kanałem. Klient to zauważa i traci zaufanie. agentRAG powstał, żeby to wyeliminować u źródła: jest tylko jeden "mózg" agenta, który myśli identycznie niezależnie od tego, czy rozmówca dzwoni, czy pisze na czacie.

Cała logika — wyszukiwanie w firmowej bazie wiedzy, budowa odpowiedzi, decyzje o działaniu — mieszka w jednym miejscu. Kanał głosowy i kanał tekstowy to tylko różne "usta" tego samego agenta: telefonia i rozmowa głosowa w przeglądarce obsługiwane są przez self-hosted silnik streamingowy z rozpoznawaniem i syntezą mowy w czasie rzeczywistym, włącznie z klonowaniem głosu marki klienta z krótkiej próbki nagrania, a tekst trafia równolegle na stronę WWW, Slacka, Telegrama, Teams, WhatsApp, Messengera, Discorda, e-mail i dowolne narzędzie korzystające z API kompatybilnego z OpenAI. Dobór modelu językowego jest automatyczny — system w pierwszej kolejności korzysta z lokalnie hostowanego modelu, a przy obciążeniu płynnie przełącza się na zasoby w chmurze, żeby rozmowa nigdy nie czekała.

Agent nie tylko odpowiada — potrafi też działać. Prawdziwe wywoływanie narzędzi przez model (nie proste dopasowanie słów kluczowych) pozwala mu sięgać po dowolny system firmy klienta skonfigurowany z poziomu panelu — CRM, system zgłoszeń, dowolny webhook — i przygotowywać gotowe dokumenty w trakcie rozmowy. Przy wrażliwych prośbach agent może najpierw poprosić o potwierdzenie tożsamości, z limitem prób i pełnym rejestrem zdarzeń do audytu.

Platforma jest projektowana pod model white-label: każdy klient dostaje własną, niezależnie konfigurowalną osobowość agenta — ton wypowiedzi, granice tematyczne, zasady przekazywania rozmowy do człowieka — oraz odseparowaną, zgodną z RODO przestrzeń danych z konfigurowalną retencją. Wszystkim zarządza się z jednego panelu operacyjnego, w którym podgląd rozmowy wygląda dokładnie tak, jak u klienta końcowego.

Node.js TypeScript Python LiveKit Qdrant PostgreSQL Redis BullMQ React Fastify Ollama RunPod
11

Anonimizator dokumentów prawniczych

Anonimizator Dokumentów — lokalna aplikacja Windows

Prawnik, który chce udostępnić pismo — do publikacji, na szkolenie, do konsultacji z kimś spoza sprawy — staje przed tym samym problemem za każdym razem: ręczne czarnienie danych osobowych w PDF-ie czy Wordzie jest żmudne, łatwo coś przeoczyć, a nazwiska i numery potrafią się chować w nagłówkach, stopkach, przypisach czy historii zmian dokumentu, których nikt już nie czyta przed wysłaniem dalej. Aplikacja powstała, żeby ten proces zautomatyzować — w pełni lokalnie, bez wysyłania treści dokumentu gdziekolwiek.

Narzędzie przyjmuje dowolny format wejściowy — PDF z tekstem, zeskanowany PDF, DOCX, DOC, ODT, TXT, obraz skanu — i zwraca dokument z podmienionymi danymi wrażliwymi, zachowując czytelność i kontekst prawny: ta sama osoba w różnych miejscach pisma dostaje ten sam numer etykiety (np. "Osoba 1"), różne osoby różne numery, więc widać kto jest kim, mimo że żadnych prawdziwych danych już tam nie ma. Detekcja łączy kilka niezależnych warstw zamiast polegać na jednym modelu: regexy z sumą kontrolną dla PESEL/NIP/REGON/KRS/IBAN/numerów ksiąg wieczystych, gazetteery zbudowane z pełnych oficjalnych rejestrów publicznych, wzorce kontekstowe rozpoznające role prawne (powód, pozwany, notariusz, pełnomocnik), model NER spaCy oraz drugi przebieg literalny wyłapujący odmienione formy już znalezionych nazwisk. Przed zapisem plik przechodzi obowiązkowy re-skan "leak" całego pakietu dokumentu — zapis jest blokowany, jeśli jakikolwiek zwalidowany identyfikator przetrwał w dowolnej jego części.

Cały pipeline działa offline, bez GPU i bez żadnych preinstalowanych zależności — dystrybuowany jako jeden instalator Windows ze skrótem na pulpicie, dla użytkownika bez wiedzy technicznej. Projekt open source na licencji MIT.

Python spaCy Tesseract OCR pypdfium2 lxml CustomTkinter PyInstaller Inno Setup
12

Omnius — autonomiczny silnik produkcji wideo

Orkiestrator długich materiałów eksperckich na YouTube

Prowadzenie eksperckiego kanału na YouTube (chmura, AI, cyberbezpieczeństwo) w formacie 10-20 minutowych materiałów wymaga tego samego cyklu przy każdym odcinku: research, sprawdzenie faktów, scenariusz, nagranie lub synteza głosu, montaż, dobór miniatur i opisu SEO, wersje skrócone pod Shorts. Omnius powstał, żeby ten cały cykl prowadzić automatycznie, od pomysłu do gotowego pliku wideo.

System składa się z czterech usług spiętych w jeden stos: silnik treści zarządza źródłami (blog, LinkedIn, GitHub) i publikacją przez YouTube Data API, silnik mediów odpowiada za syntezę mowy, rozpoznawanie mowy i generowanie awatara, silnik przeglądarkowy zbiera b-roll i materiały researchowe przez automatyzację Playwright, a orkiestrator spina to wszystko w jeden pipeline: fact-checking bez trybu obejścia (materiał z niepotwierdzonym faktem nigdy nie trafia do renderu), planowanie scen, generowanie syntetycznych sekwencji terminala, kompozycja sceny w ffmpeg z napisami, na końcu automatyczne rozdziały, miniatury A/B i wersje na Shorts/Reels.

Twarde zasady bezpieczeństwa wpisane w architekturę: żadnych prawdziwych zrzutów terminala czy kodu z prywatnych repozytoriów (tylko fikcyjne, syntetyczne sesje), automatyczne oznaczenie treści syntetycznej/zmienionej przy publikacji, i zero furtki omijającej weryfikację faktów. Projekt prywatny, rozwijany na własny kanał.

Python FastAPI Node.js Playwright ffmpeg Docker Compose Prisma React
13

Ej Aj dla Twojej babci — strona i sklep z ebookiem

ejajdlababci.pl — sklep z płatnościami online

Wydanie własnego ebooka to nie tylko napisanie treści — to też strona, na której ktoś może go realnie kupić, zapłacić i pobrać, bez pośrednika w postaci cudzej platformy sprzedażowej. ejajdlababci.pl to pełna strona produktowa dla ebooka "Ej Aj dla Twojej babci": strona główna, blog, sekcja aktualności oraz wbudowany sklep z własną obsługą płatności.

Sklep prowadzi klienta przez cały proces samodzielnie: wybór produktu, płatność przez Tpay, automatyczne wystawienie rachunku (PDF generowany po stronie serwera), wysyłka linku do pobrania na e-mail i zapis zamówienia w bazie. W okresie przedsprzedaży płatność jest przyjmowana od razu, a dostawa pliku następuje dopiero w dniu premiery — z osobną tabelą cenową obsługującą różne progi cenowe w czasie (cena przedpremierowa vs. regularna) bez zmian w kodzie, tylko w konfiguracji produktu.

Każdy pobrany plik dostaje niewidoczny znak wodny z danymi kupującego wpisanymi w metadane dokumentu — zabezpieczenie przed nieautoryzowanym rozpowszechnianiem, niewidoczne dla czytelnika, możliwe do zweryfikowania w razie potrzeby. Dostęp do pobrania jest czasowy i wielorazowy (token ważny 30 dni), a nie jednorazowy link — żeby kupujący mógł pobrać plik ponownie na innym urządzeniu bez pisania do supportu. Całość wdrożona jako w pełni automatyczny deploy: push do repozytorium buduje stronę i wgrywa ją razem z API na serwer produkcyjny.

Astro React Tailwind PHP MySQL Tpay TCPDF

Masz pomysł na projekt?

Chętnie porozmawiam — bezpłatna konsultacja, bez zobowiązań.

Skontaktuj się