[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"technology-pl-laravel":3,"technology-projects-pl-laravel":41,"mdc-jycma1-key":216},{"id":4,"title":5,"category":6,"content":7,"description":8,"extension":9,"faq":10,"icon":20,"links":21,"meta":30,"projects":31,"since":37,"stem":38,"updated":39,"__hash__":40},"technologies_pl\u002Fpl\u002Ftechnologies\u002Flaravel.yml","Laravel","backend","Laravel to framework PHP, którego używam do produktów SaaS, API i narzędzi administracyjnych. Moje projekty obejmują VetSpace, DigiPulse, NetPostPanel i stronę DigiSpace. Każdy ma własne reguły biznesowe i potrzeby integracyjne.\n\n## Jak korzystam z Laravel\n\n- **VetSpace** — wspólne API katalogu placówek i CRM, dostęp z uwzględnieniem placówki oraz subskrypcje Stripe przez Cashier.\n- **DigiPulse** — aplikacja monitoringu i panel Filament obok osobnej usługi sprawdzającej dostępność, napisanej w Go.\n- **NetPostPanel** — generowanie treści w tle z wykorzystaniem kolejek i Horizon.\n- **DigiSpace** — wielojęzyczna strona z własnym CMS i panelem Filament.\n\n## Framework i jego ekosystem\n\nLaravel zapewnia routing, walidację, dostęp do bazy danych i API kolejek. Filament, Cashier i Horizon to dodatkowe narzędzia, które dobieram i konfiguruję dla projektu. Płatności, uprawnienia i izolacja danych klientów nadal wymagają osobnego projektu oraz testów.\n\n## Utrzymanie po wdrożeniu\n\nStaram się oddzielać logikę biznesową od obsługi żądań HTTP i ekranów administracyjnych. Ułatwia to ponowne wykorzystanie procesu w API lub zadaniu w tle. Optymalizację zaczynam od pomiarów: Octane może pomóc przy odpowiednim obciążeniu, ale nie zastępuje poprawy zapytań ani kontroli stanu aplikacji.\n","Programowanie w Laravel: aplikacje SaaS, API, panele Filament, kolejki i subskrypcje Stripe na przykładzie VetSpace oraz DigiPulse.","yml",[11,14,17],{"label":12,"content":13},"Tworzysz nowe aplikacje Laravel czy utrzymujesz istniejące?","Jedno i drugie. Zajmuję się nowymi aplikacjami, audytami, refaktoryzacją i rozwojem działających produktów. Podejście zależy od stanu kodu oraz wymagań dotyczących wydań.",{"label":15,"content":16},"Z jakich narzędzi Laravel korzystasz?","Z Filament do administracji, Cashier do subskrypcji Stripe i Horizon do kolejek Redis. Pracuję też z Octane i FrankenPHP, gdy aplikacja korzysta na długotrwałych procesach.",{"label":18,"content":19},"Czy możesz zająć się hostingiem i wdrożeniem Laravel?","Tak. Pracuję z Docker, Caddy, Proxmox i CI\u002FCD, także na wynajętym serwerze dedykowanym Hetzner. Konfiguracja zależy od wymaganej dostępności i sposobu utrzymania projektu.","i-simple-icons-laravel",[22,27],{"label":23,"to":24,"color":25,"icon":26},"laravel.com","https:\u002F\u002Flaravel.com","neutral","i-heroicons-arrow-top-right-on-square",{"label":28,"to":29,"color":25,"icon":26},"Dokumentacja techniczna","https:\u002F\u002Flaravel.com\u002Fframework\u002Fdocs\u002F12.x\u002Fhorizon",{},[32,33,34,35,36],"vetspace","digipulse","digispace","netpostpanel","vetcard","2018","pl\u002Ftechnologies\u002Flaravel","2026-09-20","72mFszTPQwaEpRXz_IBnYPJdyqCs4fkrI7sldPYwZpA",[42,88,125,162,192],{"id":43,"title":44,"content":45,"date":46,"description":47,"extension":9,"featured":48,"image":49,"links":50,"meta":65,"stack":66,"stem":83,"tags":84,"url":53,"__hash__":87},"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",[51,55,59,62],{"label":52,"to":53,"color":54,"icon":26},"Live Demo","https:\u002F\u002Fvetspace.pro","primary",{"label":56,"to":57,"color":25,"icon":58},"Przegląd API","https:\u002F\u002Fgithub.com\u002FYurij2015\u002Fvetspace-api","i-simple-icons-github",{"label":60,"to":61,"color":25,"icon":58},"Przegląd frontendu","https:\u002F\u002Fgithub.com\u002FYurij2015\u002Fvetspace-frontend",{"label":63,"to":64,"color":25,"icon":58},"Przegląd VetCard","https:\u002F\u002Fgithub.com\u002FYurij2015\u002Fvetspace-vetcard",{},[67,68,71,74,77,80],{"name":5,"icon":20},{"name":69,"icon":70},"Vue","i-simple-icons-vuedotjs",{"name":72,"icon":73},"Nuxt","i-simple-icons-nuxtdotjs",{"name":75,"icon":76},"Stripe","i-simple-icons-stripe",{"name":78,"icon":79},"GraphQL","i-simple-icons-graphql",{"name":81,"icon":82},"AI","i-heroicons-sparkles","pl\u002Fprojects\u002Fvetspace",[85,5,69,86,75,81],"SaaS","Multi-tenant","xvJ2gsG93A4aTrZYPgp4UuQdQsPe-Ae8ups9tasKAD8",{"id":89,"title":90,"content":91,"date":92,"description":93,"extension":9,"featured":48,"image":94,"links":95,"meta":101,"stack":102,"stem":120,"tags":121,"url":97,"__hash__":124},"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",[96,98],{"label":52,"to":97,"color":54,"icon":26},"https:\u002F\u002Fdigipulse.cloud",{"label":99,"to":100,"color":25,"icon":58},"GitHub","https:\u002F\u002Fgithub.com\u002FYurij2015\u002Fdigipulse-backend",{},[103,104,107,110,113,116,117],{"name":5,"icon":20},{"name":105,"icon":106},"Filament","i-simple-icons-filament",{"name":108,"icon":109},"Go","i-simple-icons-go",{"name":111,"icon":112},"PostgreSQL","i-simple-icons-postgresql",{"name":114,"icon":115},"Redis","i-simple-icons-redis",{"name":69,"icon":70},{"name":118,"icon":119},"MCP","i-heroicons-cpu-chip","pl\u002Fprojects\u002Fdigipulse",[85,5,108,122,118,114,123],"Monitoring","Event-driven","GqA86kRO7Vh1dUrEBwiAh6SARuOescZleItqed4Wz8M",{"id":126,"title":127,"content":128,"date":129,"description":130,"extension":9,"featured":48,"image":131,"links":132,"meta":137,"stack":138,"stem":157,"tags":158,"url":134,"__hash__":161},"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",[133,135],{"label":52,"to":134,"color":54,"icon":26},"https:\u002F\u002Fdigispace.pro",{"label":99,"to":136,"color":25,"icon":58},"https:\u002F\u002Fgithub.com\u002FYurij2015\u002FDigiSpace",{},[139,140,143,144,147,150,153,154],{"name":5,"icon":20},{"name":141,"icon":142},"Inertia","i-simple-icons-inertia",{"name":69,"icon":70},{"name":145,"icon":146},"Vite","i-simple-icons-vite",{"name":148,"icon":149},"MySQL","i-simple-icons-mysql",{"name":151,"icon":152},"Tailwind CSS","i-simple-icons-tailwindcss",{"name":105,"icon":106},{"name":155,"icon":156},"CMS","i-heroicons-document-text","pl\u002Fprojects\u002Fdigispace",[5,105,141,69,159,160],"i18n","SEO","Fk6DSrh4wV9UrvlIWm6anLNeGfF5gl4G-jy8qzYVLUM",{"id":163,"title":164,"content":165,"date":166,"description":167,"extension":9,"featured":48,"image":168,"links":169,"meta":173,"stack":174,"stem":186,"tags":187,"url":190,"__hash__":191},"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",[170],{"label":171,"to":172,"color":25,"icon":58},"Przegląd projektu","https:\u002F\u002Fgithub.com\u002FYurij2015\u002Fnet-post-panel-overview",{},[175,176,177,180,183],{"name":5,"icon":20},{"name":81,"icon":82},{"name":178,"icon":179},"Qdrant","i-simple-icons-qdrant",{"name":181,"icon":182},"Langfuse","i-heroicons-chart-bar",{"name":184,"icon":185},"Horizon","i-simple-icons-laravelhorizon","pl\u002Fprojects\u002Fnetpostpanel",[81,5,188,189,178,184],"RAG","External API","https:\u002F\u002Fnet-post-panel.digispace.pro","Gkp9EK0q-C32J7DZ0z0fi4In36IKL9zOIc9U4HbCAxA",{"id":193,"title":194,"content":195,"date":39,"description":196,"extension":9,"featured":48,"image":197,"links":198,"meta":202,"stack":203,"stem":212,"tags":213,"url":200,"__hash__":215},"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",[199,201],{"label":52,"to":200,"color":54,"icon":26},"https:\u002F\u002Fvetcard.pro",{"label":171,"to":64,"color":25,"icon":58},{},[204,205,206,209,210],{"name":72,"icon":73},{"name":69,"icon":70},{"name":207,"icon":208},"TypeScript","i-simple-icons-typescript",{"name":151,"icon":152},{"name":211,"icon":20},"Laravel API","pl\u002Fprojects\u002Fvetcard",[72,69,86,160,214],"SSR","4Q1qMR6jtn2ViojU9Uk8TaztwOrlQBTjLNLBv9AASnE",{"data":217,"body":218},{},{"type":219,"children":220},"root",[221,229,236,278,284,289,295],{"type":222,"tag":223,"props":224,"children":225},"element","p",{},[226],{"type":227,"value":228},"text","Laravel to framework PHP, którego używam do produktów SaaS, API i narzędzi administracyjnych. Moje projekty obejmują VetSpace, DigiPulse, NetPostPanel i stronę DigiSpace. Każdy ma własne reguły biznesowe i potrzeby integracyjne.",{"type":222,"tag":230,"props":231,"children":233},"h2",{"id":232},"jak-korzystam-z-laravel",[234],{"type":227,"value":235},"Jak korzystam z Laravel",{"type":222,"tag":237,"props":238,"children":239},"ul",{},[240,251,260,269],{"type":222,"tag":241,"props":242,"children":243},"li",{},[244,249],{"type":222,"tag":245,"props":246,"children":247},"strong",{},[248],{"type":227,"value":44},{"type":227,"value":250}," — wspólne API katalogu placówek i CRM, dostęp z uwzględnieniem placówki oraz subskrypcje Stripe przez Cashier.",{"type":222,"tag":241,"props":252,"children":253},{},[254,258],{"type":222,"tag":245,"props":255,"children":256},{},[257],{"type":227,"value":90},{"type":227,"value":259}," — aplikacja monitoringu i panel Filament obok osobnej usługi sprawdzającej dostępność, napisanej w Go.",{"type":222,"tag":241,"props":261,"children":262},{},[263,267],{"type":222,"tag":245,"props":264,"children":265},{},[266],{"type":227,"value":164},{"type":227,"value":268}," — generowanie treści w tle z wykorzystaniem kolejek i Horizon.",{"type":222,"tag":241,"props":270,"children":271},{},[272,276],{"type":222,"tag":245,"props":273,"children":274},{},[275],{"type":227,"value":127},{"type":227,"value":277}," — wielojęzyczna strona z własnym CMS i panelem Filament.",{"type":222,"tag":230,"props":279,"children":281},{"id":280},"framework-i-jego-ekosystem",[282],{"type":227,"value":283},"Framework i jego ekosystem",{"type":222,"tag":223,"props":285,"children":286},{},[287],{"type":227,"value":288},"Laravel zapewnia routing, walidację, dostęp do bazy danych i API kolejek. Filament, Cashier i Horizon to dodatkowe narzędzia, które dobieram i konfiguruję dla projektu. Płatności, uprawnienia i izolacja danych klientów nadal wymagają osobnego projektu oraz testów.",{"type":222,"tag":230,"props":290,"children":292},{"id":291},"utrzymanie-po-wdrożeniu",[293],{"type":227,"value":294},"Utrzymanie po wdrożeniu",{"type":222,"tag":223,"props":296,"children":297},{},[298],{"type":227,"value":299},"Staram się oddzielać logikę biznesową od obsługi żądań HTTP i ekranów administracyjnych. Ułatwia to ponowne wykorzystanie procesu w API lub zadaniu w tle. Optymalizację zaczynam od pomiarów: Octane może pomóc przy odpowiednim obciążeniu, ale nie zastępuje poprawy zapytań ani kontroli stanu aplikacji."]