[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"technology-pl-php":3,"technology-projects-pl-php":36,"mdc-mct8lg-key":234},{"id":4,"title":5,"category":6,"content":7,"description":8,"extension":9,"faq":10,"icon":17,"links":18,"meta":24,"projects":25,"since":32,"stem":33,"updated":34,"__hash__":35},"technologies_pl\u002Fpl\u002Ftechnologies\u002Fphp.yml","PHP","backend","PHP to mój główny język programowania po stronie serwera. Mam ponad osiem lat doświadczenia komercyjnego z Laravel, Symfony i WordPress, gdy odpowiada on potrzebom projektu. Obecnie pracuję z PHP 8.x; wcześniejsze doświadczenie obejmuje również starsze wersje języka.\n\n## Gdzie korzystam z PHP\n\nLaravel obsługuje projekty takie jak VetSpace, DigiPulse i NetPostPanel. Moja praca komercyjna z Symfony obejmuje platformę sprzedaży biletów na Formula 1, MotoGP, EICMA i EuroLeague. Zajmuję się składaniem zamówień, kontami użytkowników, narzędziami administracyjnymi i integracjami.\n\n## Na czym się skupiam\n\n- **Logika biznesowa** — zrozumiałe procesy rezerwacji, subskrypcji i zamówień.\n- **API i płatności** — walidacja, uprawnienia oraz niezawodna obsługa odpowiedzi zewnętrznych usług.\n- **Utrzymanie** — automatyczne testy i analiza statyczna wspierające rozwój istniejącego kodu.\n\n## Wybór środowiska wykonawczego\n\nPHP-FPM sprawdza się przy typowej obsłudze żądań. Długotrwałe procesy, w tym aplikacje uruchamiane przez Octane i FrankenPHP, wymagają innego podejścia do stanu i pamięci. Dobieram środowisko do aplikacji i sprawdzam wyniki przy reprezentatywnym obciążeniu. Sam język czy framework nie gwarantuje wydajności.\n","Programowanie w PHP, Laravel i Symfony: aplikacje SaaS, sprzedaż biletów, integracje płatności i API z myślą o dalszym rozwoju.","yml",[11,14],{"label":12,"content":13},"Z którymi wersjami PHP pracujesz?","Obecnie pracuję z PHP 8.x. Przy aktualizacji starszej aplikacji sprawdzam wymagania frameworka i zależności oraz testuję zachowanie, na które wpływa zmiana wersji.",{"label":15,"content":16},"Jak wybierasz między Laravel a Symfony?","Uwzględniam istniejący kod, doświadczenie zespołu, integracje i wymagania utrzymaniowe. Oba nadają się do wieloletniego rozwoju: Laravel wykorzystuję we własnych produktach SaaS, a Symfony w komercyjnej sprzedaży biletów.","i-simple-icons-php",[19],{"label":20,"to":21,"color":22,"icon":23},"php.net","https:\u002F\u002Fwww.php.net","neutral","i-heroicons-arrow-top-right-on-square",{},[26,27,28,29,30,31],"vetspace","digipulse","digispace","netpostpanel","vetcard","digispace-studio","2017","pl\u002Ftechnologies\u002Fphp","2026-09-20","b50Ixw7Bu4EM-3bL9unxNvKkevXbkclhkKWa2R4hmdw",[37,85,122,159,189,213],{"id":38,"title":39,"content":40,"date":41,"description":42,"extension":9,"featured":43,"image":44,"links":45,"meta":60,"stack":61,"stem":80,"tags":81,"url":48,"__hash__":84},"projects_pl\u002Fpl\u002Fprojects\u002Fvetspace.yml","VetSpace","Dwustronna platforma weterynaryjna — katalog SEO klinik i CRM oparty na subskrypcji z wizytami i rekordami pacjentów. Publiczny katalog klinik zbudowany pod kątem pozyskiwania klientów przez SEO oraz CRM oparty na subskrypcji (wizyty, rekordy pacjentów) jako osobne aplikacje Vue\u002FNuxt na jednym API Laravel. Architektura database-per-tenant, subskrypcje Stripe przez Cashier, GraphQL + REST oraz analiza wizyt wspomagana AI przez dedykowany mikroserwis w Go.\n\n## Kluczowe funkcje\n\n- **Dwustronny lejek** - katalog SEO pozyskuje kliniki, a CRM w subskrypcji (wizyty, rekordy pacjentów) je utrzymuje\n- **Prawdziwa izolacja tenantów** - database-per-tenant trzyma dane każdej kliniki osobno, a eksport\u002Fusuwanie GDPR to operacja na bazie\n- **Dwa interfejsy API** - GraphQL dla złożonych zapytań katalogu, REST dla CRM — jedna baza kodu Laravel\n- **Billing od ręki** - subskrypcje Stripe przez Cashier: triale, zmiany planów, dunning\n- **AI tam, gdzie pomaga** - analizę wizyt wykonuje dedykowany mikroserwis w Go, nie obciążając głównego API\n\n## Stos technologiczny\n\n- **Backend**: Laravel (API)\n- **Frontend**: Vue\u002FNuxt (osobne aplikacje)\n- **Architektura**: Multi-tenancy database-per-tenant\n- **Płatności**: Stripe przez Cashier\n- **API**: GraphQL + REST\n- **AI**: Mikroserwis Go do analizy wizyt\n","2026-09-19","Dwustronna platforma weterynaryjna — katalog SEO klinik i CRM oparty na subskrypcji z wizytami i rekordami pacjentów",true,"\u002Fhero\u002Fvetspace.avif",[46,50,54,57],{"label":47,"to":48,"color":49,"icon":23},"Live Demo","https:\u002F\u002Fvetspace.pro","primary",{"label":51,"to":52,"color":22,"icon":53},"Przegląd API","https:\u002F\u002Fgithub.com\u002FYurij2015\u002Fvetspace-api","i-simple-icons-github",{"label":55,"to":56,"color":22,"icon":53},"Przegląd frontendu","https:\u002F\u002Fgithub.com\u002FYurij2015\u002Fvetspace-frontend",{"label":58,"to":59,"color":22,"icon":53},"Przegląd VetCard","https:\u002F\u002Fgithub.com\u002FYurij2015\u002Fvetspace-vetcard",{},[62,65,68,71,74,77],{"name":63,"icon":64},"Laravel","i-simple-icons-laravel",{"name":66,"icon":67},"Vue","i-simple-icons-vuedotjs",{"name":69,"icon":70},"Nuxt","i-simple-icons-nuxtdotjs",{"name":72,"icon":73},"Stripe","i-simple-icons-stripe",{"name":75,"icon":76},"GraphQL","i-simple-icons-graphql",{"name":78,"icon":79},"AI","i-heroicons-sparkles","pl\u002Fprojects\u002Fvetspace",[82,63,66,83,72,78],"SaaS","Multi-tenant","xvJ2gsG93A4aTrZYPgp4UuQdQsPe-Ae8ups9tasKAD8",{"id":86,"title":87,"content":88,"date":89,"description":90,"extension":9,"featured":43,"image":91,"links":92,"meta":98,"stack":99,"stem":117,"tags":118,"url":94,"__hash__":121},"projects_pl\u002Fpl\u002Fprojects\u002Fdigipulse.yml","DigiPulse","SaaS do monitorowania dostępności — sprawdzanie co 60 sekund, śledzenie wygaśnięcia SSL, powiadomienia przez Telegram i email. Panel administracyjny i podstawowy backend zbudowane na Laravel (Octane, websockety Reverb) i Filament, a silnik monitorujący to osobny serwis w Go. Integracja logowania Google OAuth i Cloudflare Turnstile. Zawiera serwer MCP, który udostępnia dane monitoringu bezpośrednio asystentom AI. Self-hosted na Proxmox.\n\n## Kluczowe funkcje\n\n- **Dedykowany silnik w Go** - sprawdzanie dostępności wykonuje osobny serwis w Go, więc ciągłe odpytywanie co 60 sekund nie spowalnia aplikacji Laravel\n- **Dashboard w czasie rzeczywistym** - websockety Reverb przesyłają zmiany statusu do UI na żywo, bez odświeżania\n- **Octane + Filament** - Laravel rezydentny w pamięci z pełnym panelem administracyjnym dla monitorów, kontaktów i reguł alertów\n- **Serwer MCP** - monitory i incydenty dostępne dla asystentów AI (Claude, Cursor) przez Model Context Protocol\n- **Google OAuth + Turnstile** - logowanie bez hasła i ochrona przed botami na formularzach publicznych\n- **Self-hosted** - wdrożone na własnym homelab Proxmox, którym zarządzam end-to-end\n\n## Stos technologiczny\n\n- **Backend**: Laravel (Octane, websockety Reverb)\n- **Panel administracyjny**: Filament\n- **Silnik monitorujący**: Go (osobny serwis)\n- **Baza danych**: PostgreSQL\n- **Integracja AI**: Serwer MCP\n- **Infrastruktura**: Self-hosted na Proxmox\n","2026-04-17","SaaS do monitorowania dostępności: architektura event-driven — Laravel (Octane, Reverb) i Filament wysyłają zadania przez Redis do lekkiego workera w Go; serwer MCP udostępnia dane monitoringu asystentom AI; powiadomienia Telegram\u002Fe-mail","\u002Fhero\u002Fdigipulse.avif",[93,95],{"label":47,"to":94,"color":49,"icon":23},"https:\u002F\u002Fdigipulse.cloud",{"label":96,"to":97,"color":22,"icon":53},"GitHub","https:\u002F\u002Fgithub.com\u002FYurij2015\u002Fdigipulse-backend",{},[100,101,104,107,110,113,114],{"name":63,"icon":64},{"name":102,"icon":103},"Filament","i-simple-icons-filament",{"name":105,"icon":106},"Go","i-simple-icons-go",{"name":108,"icon":109},"PostgreSQL","i-simple-icons-postgresql",{"name":111,"icon":112},"Redis","i-simple-icons-redis",{"name":66,"icon":67},{"name":115,"icon":116},"MCP","i-heroicons-cpu-chip","pl\u002Fprojects\u002Fdigipulse",[82,63,105,119,115,111,120],"Monitoring","Event-driven","GqA86kRO7Vh1dUrEBwiAh6SARuOescZleItqed4Wz8M",{"id":123,"title":124,"content":125,"date":126,"description":127,"extension":9,"featured":43,"image":128,"links":129,"meta":134,"stack":135,"stem":154,"tags":155,"url":131,"__hash__":158},"projects_pl\u002Fpl\u002Fprojects\u002Fdigispace.yml","DigiSpace","Produkcyjna strona digispace.pro — publiczny serwis agencji, panel administracyjny i autorski CMS w jednej aplikacji Laravel, teraz w pełni wielojęzyczna (EN\u002FUK\u002FPL), z panelem Filament obok starego panelu na Inertia + Vue. Ten sam kod, który obsługuje żywą stronę, jest dostępny na GitHub.\n\n## Kluczowe funkcje\n\n- **Panel administracyjny Filament** - równoległy panel `\u002Fcontrol` (24 zasoby) z edytorem TipTap, przesyłaniem obrazów bezpośrednio do MinIO i nawigacją zorientowaną na treść, wdrażany zasób po zasobie obok istniejącego panelu Inertia\n- **Wielojęzyczność od podstaw** - tłumaczone są nie tylko strony, ale i strukturalne teksty UI (menu, stopka, przyciski) dla każdej lokalizacji, z routingiem opartym na hreflang\n- **SEO wbudowane** - dane strukturalne JSON-LD, zlokalizowane sitemapy i poprawna obsługa 404 dla każdej lokalizacji\n- **Monolit zrobiony dobrze** - publiczna strona i oba panele administracyjne w jednej aplikacji Laravel, bez osobnego API\n- **Treść pod kontrolą** - strony, usługi i portfolio edytuje się w CMS — bez deploymentu dla zmiany tekstu czy tłumaczenia\n- **Bramy jakości** - testy PHPUnit i analiza statyczna PHPStan w CI\n- **Otwarty kod** - dokładnie ten kod, który obsługuje digispace.pro, jest publiczny na GitHub\n\n## Stos technologiczny\n\n- **Backend**: Laravel\n- **Panel admina**: Filament 5 (`\u002Fcontrol`) + stary panel na Inertia.js + Vue\n- **Frontend**: Vue.js, Vite\n- **Lokalizacja**: tłumaczenia treści i struktury EN\u002FUK\u002FPL\n- **Architektura**: Niestandardowy CMS\n","2022-10-05","Wielojęzyczna (EN\u002FUK\u002FPL) produkcyjna strona agencji z autorskim CMS — panel Filament z rozbudowanym edytorem treści, tłumaczenia, JSON-LD i zlokalizowane sitemapy wbudowane obok starego panelu na Inertia + Vue","\u002Fhero\u002Fdigispace.avif",[130,132],{"label":47,"to":131,"color":49,"icon":23},"https:\u002F\u002Fdigispace.pro",{"label":96,"to":133,"color":22,"icon":53},"https:\u002F\u002Fgithub.com\u002FYurij2015\u002FDigiSpace",{},[136,137,140,141,144,147,150,151],{"name":63,"icon":64},{"name":138,"icon":139},"Inertia","i-simple-icons-inertia",{"name":66,"icon":67},{"name":142,"icon":143},"Vite","i-simple-icons-vite",{"name":145,"icon":146},"MySQL","i-simple-icons-mysql",{"name":148,"icon":149},"Tailwind CSS","i-simple-icons-tailwindcss",{"name":102,"icon":103},{"name":152,"icon":153},"CMS","i-heroicons-document-text","pl\u002Fprojects\u002Fdigispace",[63,102,138,66,156,157],"i18n","SEO","Fk6DSrh4wV9UrvlIWm6anLNeGfF5gl4G-jy8qzYVLUM",{"id":160,"title":161,"content":162,"date":163,"description":164,"extension":9,"featured":43,"image":165,"links":166,"meta":170,"stack":171,"stem":183,"tags":184,"url":187,"__hash__":188},"projects_pl\u002Fpl\u002Fprojects\u002Fnetpostpanel.yml","NetPostPanel","Wewnętrzna platforma AI do operacji na treści, która zamienia research tematu w gotową treść: pełny pipeline RAG (Google Custom Search + RSS → scraping → generacja multi-provider → wektoryzacja), plus wersjonowane zewnętrzne API zasilające procesy treściowe innych projektów, w tym pipeline bloga DigiSpace.\n\n## Kluczowe funkcje\n\n- **Zewnętrzne API** - wersjonowane `POST \u002Fapi\u002Fv1\u002Fgenerate` + `\u002Ftranslate` z kluczami i limitami per klient udostępnia cały pipeline innym aplikacjom, synchronicznie lub asynchronicznie z callbackami\n- **Auto Pilot** - codzienne zaplanowane uruchomienia generują treść z nowych inspiracji lub własnych tematów, w pełni automatycznie\n- **AI bez przywiązania do dostawcy** - Gemini i OpenAI za abstrakcją driverów, więc zmiana modelu to konfiguracja, nie refaktoryzacja\n- **Pipeline semantyczny** - wyszukiwanie wektorowe na Qdrant deduplikuje i grupuje newsy zanim trafią do generacji\n- **Autonomiczna agregacja** - auto-wykrywanie kanałów RSS oraz Google Custom Search plus scraping zamieniają temat w samozasilające się źródło treści\n- **Widoczne wywołania LLM** - każda generacja jest śledzona w Langfuse: tokeny, opóźnienie, koszt\n- **Dostęp oparty na rolach** - role admin\u002Fcontent manager\u002Feditor, każde zapytanie ograniczone do właściciela poza adminem\n\n## Stos technologiczny\n\n- **Backend**: Laravel, agenci `laravel\u002Fai`\n- **Frontend**: Inertia.js + Vue 3 (SPA Search & Creation, edytor TipTap)\n- **AI**: Multi-provider (Gemini\u002FOpenAI) za abstrakcją driverów\n- **Research**: Google Custom Search + agregacja RSS, scraping stron\n- **Baza wektorowa**: Qdrant do wyszukiwania semantycznego\n- **Obserwowalność**: Langfuse do śledzenia LLM\n- **Kolejka**: Laravel Horizon\n- **Testy**: PHPUnit\u002FPest + Cypress E2E\n","2024-11-10","Platforma AI do operacji na treści — pipeline RAG (research → scraping → generacja → wektoryzacja), zewnętrzne API dla innych aplikacji oraz Auto Pilot do generacji bez udziału człowieka","\u002Fhero\u002Fnetpostpanel.avif",[167],{"label":168,"to":169,"color":22,"icon":53},"Przegląd projektu","https:\u002F\u002Fgithub.com\u002FYurij2015\u002Fnet-post-panel-overview",{},[172,173,174,177,180],{"name":63,"icon":64},{"name":78,"icon":79},{"name":175,"icon":176},"Qdrant","i-simple-icons-qdrant",{"name":178,"icon":179},"Langfuse","i-heroicons-chart-bar",{"name":181,"icon":182},"Horizon","i-simple-icons-laravelhorizon","pl\u002Fprojects\u002Fnetpostpanel",[78,63,185,186,175,181],"RAG","External API","https:\u002F\u002Fnet-post-panel.digispace.pro","Gkp9EK0q-C32J7DZ0z0fi4In36IKL9zOIc9U4HbCAxA",{"id":190,"title":191,"content":192,"date":34,"description":193,"extension":9,"featured":43,"image":194,"links":195,"meta":199,"stack":200,"stem":209,"tags":210,"url":197,"__hash__":212},"projects_pl\u002Fpl\u002Fprojects\u002Fvetcard.yml","VetCard","Publiczna część VetSpace — multi-tenant katalog klinik weterynaryjnych. Jeden deployment Nuxt SSR obsługuje wszystkie kliniki: strony klinik zoptymalizowane pod SEO, rezerwację wizyt online z proxy do własnego backendu tenant każdej kliniki, tematyzację pod markę kliniki oraz obsługę wielu oddziałów.\n\n## Kluczowe funkcje\n\n- **Jeden deployment — wiele klinik** — aplikacja routuje po slugu kliniki; żądania rezerwacji i slotów są proxy'owane do backendu tenant danej kliniki\n- **Katalog SEO-first** — 590+ klinik ze stronami SSR, danymi strukturalnymi i zlokalizowanymi trasami\n- **Branding każdej kliniki** — strona kliniki jest tematyzowana jej kolorem, z badge'em \"Powered by VetSpace\"\n- **Realny UX rezerwacji** — wolne sloty pokazują liczbę dostępnych lekarzy z kodowaniem kolorami\n- **Pełna lokalizacja** — ukraiński, angielski i polski z routingiem opartym na prefiksach\n\n## Stack technologiczny\n\n- **Frontend**: Nuxt 4 \u002F Vue 3, Tailwind CSS v4\n- **Backend**: Laravel catalog API + endpointy tenant do rezerwacji\n- **Renderowanie**: SSR dla stron SEO, CSR dla flow rezerwacji\n- **Testowanie**: testy jednostkowe Vitest + Cypress E2E na realnym backendzie\n","Multi-tenant katalog klinik weterynaryjnych: SEO strony klinik, rezerwacja wizyt online, branding każdej kliniki — jedna aplikacja Nuxt obsługuje wszystkie","\u002Fhero\u002Fvetcard.avif",[196,198],{"label":47,"to":197,"color":49,"icon":23},"https:\u002F\u002Fvetcard.pro",{"label":168,"to":59,"color":22,"icon":53},{},[201,202,203,206,207],{"name":69,"icon":70},{"name":66,"icon":67},{"name":204,"icon":205},"TypeScript","i-simple-icons-typescript",{"name":148,"icon":149},{"name":208,"icon":64},"Laravel API","pl\u002Fprojects\u002Fvetcard",[69,66,83,157,211],"SSR","4Q1qMR6jtn2ViojU9Uk8TaztwOrlQBTjLNLBv9AASnE",{"id":214,"title":215,"content":216,"date":217,"description":218,"extension":9,"featured":43,"image":219,"links":220,"meta":223,"stack":224,"stem":230,"tags":231,"url":222,"__hash__":233},"projects_pl\u002Fpl\u002Fprojects\u002Fdigispace-studio.yml","DigiSpace Studio","Strona marketingowa DigiSpace Studio — wyspecjalizowanego studia webowego dla klinik weterynaryjnych i marek pet. Zbudowana na WordPress z motywem Blocksy i blokami Stackable\u002FGutenberg, motywem potomnym do customizacji, blogiem i przechwytywaniem leadów przez formularze kontaktowe.\n\n## Kluczowe funkcje\n\n- **Niszowe pozycjonowanie** — strona mówi bezpośrednio do klinik weterynaryjnych i marek pet, a nie ogólnej publiczności\n- **Edycja blokowa** — bloki Stackable i Ultimate Gutenberg pozwalają budować nowe landing page bez kodu\n- **Motyw potomny** — customizacje żyją w Blocksy child theme, więc aktualizacje motywu nie nadpisują designu\n- **Blog + lead capture** — content marketing pod SEO z Contact Form 7 do zapytań\n","2024-06-27","Strona marketingowa niszowego studia IT dla klinik weterynaryjnych i marek pet — WordPress z motywem Blocksy i blokami Gutenberg","\u002Fhero\u002Fdigispace-studio.avif",[221],{"label":47,"to":222,"color":49,"icon":23},"https:\u002F\u002Fdigispace.studio",{},[225,228,229],{"name":226,"icon":227},"WordPress","i-simple-icons-wordpress",{"name":5,"icon":17},{"name":145,"icon":146},"pl\u002Fprojects\u002Fdigispace-studio",[226,232,157],"Marketing","qFrNlqf_sq86vFZsrPEPBUmjjjVwINIy37Jhi-PeTkU",{"data":235,"body":236},{},{"type":237,"children":238},"root",[239,247,254,259,265,301,307],{"type":240,"tag":241,"props":242,"children":243},"element","p",{},[244],{"type":245,"value":246},"text","PHP to mój główny język programowania po stronie serwera. Mam ponad osiem lat doświadczenia komercyjnego z Laravel, Symfony i WordPress, gdy odpowiada on potrzebom projektu. Obecnie pracuję z PHP 8.x; wcześniejsze doświadczenie obejmuje również starsze wersje języka.",{"type":240,"tag":248,"props":249,"children":251},"h2",{"id":250},"gdzie-korzystam-z-php",[252],{"type":245,"value":253},"Gdzie korzystam z PHP",{"type":240,"tag":241,"props":255,"children":256},{},[257],{"type":245,"value":258},"Laravel obsługuje projekty takie jak VetSpace, DigiPulse i NetPostPanel. Moja praca komercyjna z Symfony obejmuje platformę sprzedaży biletów na Formula 1, MotoGP, EICMA i EuroLeague. Zajmuję się składaniem zamówień, kontami użytkowników, narzędziami administracyjnymi i integracjami.",{"type":240,"tag":248,"props":260,"children":262},{"id":261},"na-czym-się-skupiam",[263],{"type":245,"value":264},"Na czym się skupiam",{"type":240,"tag":266,"props":267,"children":268},"ul",{},[269,281,291],{"type":240,"tag":270,"props":271,"children":272},"li",{},[273,279],{"type":240,"tag":274,"props":275,"children":276},"strong",{},[277],{"type":245,"value":278},"Logika biznesowa",{"type":245,"value":280}," — zrozumiałe procesy rezerwacji, subskrypcji i zamówień.",{"type":240,"tag":270,"props":282,"children":283},{},[284,289],{"type":240,"tag":274,"props":285,"children":286},{},[287],{"type":245,"value":288},"API i płatności",{"type":245,"value":290}," — walidacja, uprawnienia oraz niezawodna obsługa odpowiedzi zewnętrznych usług.",{"type":240,"tag":270,"props":292,"children":293},{},[294,299],{"type":240,"tag":274,"props":295,"children":296},{},[297],{"type":245,"value":298},"Utrzymanie",{"type":245,"value":300}," — automatyczne testy i analiza statyczna wspierające rozwój istniejącego kodu.",{"type":240,"tag":248,"props":302,"children":304},{"id":303},"wybór-środowiska-wykonawczego",[305],{"type":245,"value":306},"Wybór środowiska wykonawczego",{"type":240,"tag":241,"props":308,"children":309},{},[310],{"type":245,"value":311},"PHP-FPM sprawdza się przy typowej obsłudze żądań. Długotrwałe procesy, w tym aplikacje uruchamiane przez Octane i FrankenPHP, wymagają innego podejścia do stanu i pamięci. Dobieram środowisko do aplikacji i sprawdzam wyniki przy reprezentatywnym obciążeniu. Sam język czy framework nie gwarantuje wydajności."]