[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"technology-pl-cloudflare":3,"technology-projects-pl-cloudflare":30,"mdc-tqssdw-key":144},{"id":4,"title":5,"category":6,"content":7,"description":8,"extension":9,"faq":10,"icon":11,"links":12,"meta":21,"projects":22,"since":26,"stem":27,"updated":28,"__hash__":29},"technologies_pl\u002Fpl\u002Ftechnologies\u002Fcloudflare.yml","Cloudflare","infrastructure","Cloudflare udostępnia DNS, sieć dostarczania treści i usługi ochrony stron. Korzystam z niego przy publicznych produktach SaaS, aby zarządzać domenami, buforować pliki statyczne i ograniczać automatyczne wysyłanie formularzy.\n\n## Gdzie korzystam z Cloudflare\n\nVetCard, VetSpace i DigiPulse łączą publiczne strony z funkcjami aplikacji. Wymagają więc różnych reguł buforowania: obraz można udostępniać wielu odwiedzającym z tego samego cache, ale dane wizyt i kont muszą pozostać prywatne. DigiPulse korzysta również z Turnstile w publicznych formularzach.\n\n## Buforowanie i ochrona formularzy\n\n- **Pliki statyczne** — obrazy, style i skrypty dostarczane z serwerów bliższych odwiedzającym.\n- **Dane prywatne** — odpowiedzi zawierające dane użytkownika wyłączone ze wspólnej pamięci podręcznej.\n- **Turnstile** — weryfikacja przesłanego tokena na serwerze; sam widżet w przeglądarce nie wystarcza.\n\n## Za co nadal odpowiada aplikacja\n\nCloudflare uzupełnia walidację danych, kontrolę uprawnień i ograniczanie liczby żądań. Reguły buforowania oraz zabezpieczenie połączenia z serwerem źródłowym pozostają częścią konfiguracji wdrożenia. Dostępne funkcje ochrony i limity zależą od wybranych usług i planu.\n","Cloudflare dla aplikacji SaaS: zarządzanie DNS, pamięć podręczna CDN i ochrona formularzy przed botami za pomocą Turnstile.","yml",null,"i-simple-icons-cloudflare",[13,18],{"label":14,"to":15,"color":16,"icon":17},"cloudflare.com","https:\u002F\u002Fwww.cloudflare.com","neutral","i-heroicons-arrow-top-right-on-square",{"label":19,"to":20,"color":16,"icon":17},"Dokumentacja techniczna","https:\u002F\u002Fdevelopers.cloudflare.com\u002Fturnstile\u002Fget-started\u002Fserver-side-validation\u002F",{},[23,24,25],"vetcard","vetspace","digipulse","2021","pl\u002Ftechnologies\u002Fcloudflare","2026-09-20","5iMRd8mA7xkBV5Bw_SXgMplUPh83Sh6tZqn4Hk_kCYE",[31,70,107],{"id":32,"title":33,"content":34,"date":28,"description":35,"extension":9,"featured":36,"image":37,"links":38,"meta":47,"stack":48,"stem":64,"tags":65,"url":41,"__hash__":69},"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",true,"\u002Fhero\u002Fvetcard.avif",[39,43],{"label":40,"to":41,"color":42,"icon":17},"Live Demo","https:\u002F\u002Fvetcard.pro","primary",{"label":44,"to":45,"color":16,"icon":46},"Przegląd projektu","https:\u002F\u002Fgithub.com\u002FYurij2015\u002Fvetspace-vetcard","i-simple-icons-github",{},[49,52,55,58,61],{"name":50,"icon":51},"Nuxt","i-simple-icons-nuxtdotjs",{"name":53,"icon":54},"Vue","i-simple-icons-vuedotjs",{"name":56,"icon":57},"TypeScript","i-simple-icons-typescript",{"name":59,"icon":60},"Tailwind CSS","i-simple-icons-tailwindcss",{"name":62,"icon":63},"Laravel API","i-simple-icons-laravel","pl\u002Fprojects\u002Fvetcard",[50,53,66,67,68],"Multi-tenant","SEO","SSR","4Q1qMR6jtn2ViojU9Uk8TaztwOrlQBTjLNLBv9AASnE",{"id":71,"title":72,"content":73,"date":74,"description":75,"extension":9,"featured":36,"image":76,"links":77,"meta":88,"stack":89,"stem":103,"tags":104,"url":79,"__hash__":106},"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","\u002Fhero\u002Fvetspace.avif",[78,80,83,86],{"label":40,"to":79,"color":42,"icon":17},"https:\u002F\u002Fvetspace.pro",{"label":81,"to":82,"color":16,"icon":46},"Przegląd API","https:\u002F\u002Fgithub.com\u002FYurij2015\u002Fvetspace-api",{"label":84,"to":85,"color":16,"icon":46},"Przegląd frontendu","https:\u002F\u002Fgithub.com\u002FYurij2015\u002Fvetspace-frontend",{"label":87,"to":45,"color":16,"icon":46},"Przegląd VetCard",{},[90,92,93,94,97,100],{"name":91,"icon":63},"Laravel",{"name":53,"icon":54},{"name":50,"icon":51},{"name":95,"icon":96},"Stripe","i-simple-icons-stripe",{"name":98,"icon":99},"GraphQL","i-simple-icons-graphql",{"name":101,"icon":102},"AI","i-heroicons-sparkles","pl\u002Fprojects\u002Fvetspace",[105,91,53,66,95,101],"SaaS","xvJ2gsG93A4aTrZYPgp4UuQdQsPe-Ae8ups9tasKAD8",{"id":108,"title":109,"content":110,"date":111,"description":112,"extension":9,"featured":36,"image":113,"links":114,"meta":120,"stack":121,"stem":139,"tags":140,"url":116,"__hash__":143},"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",[115,117],{"label":40,"to":116,"color":42,"icon":17},"https:\u002F\u002Fdigipulse.cloud",{"label":118,"to":119,"color":16,"icon":46},"GitHub","https:\u002F\u002Fgithub.com\u002FYurij2015\u002Fdigipulse-backend",{},[122,123,126,129,132,135,136],{"name":91,"icon":63},{"name":124,"icon":125},"Filament","i-simple-icons-filament",{"name":127,"icon":128},"Go","i-simple-icons-go",{"name":130,"icon":131},"PostgreSQL","i-simple-icons-postgresql",{"name":133,"icon":134},"Redis","i-simple-icons-redis",{"name":53,"icon":54},{"name":137,"icon":138},"MCP","i-heroicons-cpu-chip","pl\u002Fprojects\u002Fdigipulse",[105,91,127,141,137,133,142],"Monitoring","Event-driven","GqA86kRO7Vh1dUrEBwiAh6SARuOescZleItqed4Wz8M",{"data":145,"body":146},{},{"type":147,"children":148},"root",[149,157,164,169,175,211,217],{"type":150,"tag":151,"props":152,"children":153},"element","p",{},[154],{"type":155,"value":156},"text","Cloudflare udostępnia DNS, sieć dostarczania treści i usługi ochrony stron. Korzystam z niego przy publicznych produktach SaaS, aby zarządzać domenami, buforować pliki statyczne i ograniczać automatyczne wysyłanie formularzy.",{"type":150,"tag":158,"props":159,"children":161},"h2",{"id":160},"gdzie-korzystam-z-cloudflare",[162],{"type":155,"value":163},"Gdzie korzystam z Cloudflare",{"type":150,"tag":151,"props":165,"children":166},{},[167],{"type":155,"value":168},"VetCard, VetSpace i DigiPulse łączą publiczne strony z funkcjami aplikacji. Wymagają więc różnych reguł buforowania: obraz można udostępniać wielu odwiedzającym z tego samego cache, ale dane wizyt i kont muszą pozostać prywatne. DigiPulse korzysta również z Turnstile w publicznych formularzach.",{"type":150,"tag":158,"props":170,"children":172},{"id":171},"buforowanie-i-ochrona-formularzy",[173],{"type":155,"value":174},"Buforowanie i ochrona formularzy",{"type":150,"tag":176,"props":177,"children":178},"ul",{},[179,191,201],{"type":150,"tag":180,"props":181,"children":182},"li",{},[183,189],{"type":150,"tag":184,"props":185,"children":186},"strong",{},[187],{"type":155,"value":188},"Pliki statyczne",{"type":155,"value":190}," — obrazy, style i skrypty dostarczane z serwerów bliższych odwiedzającym.",{"type":150,"tag":180,"props":192,"children":193},{},[194,199],{"type":150,"tag":184,"props":195,"children":196},{},[197],{"type":155,"value":198},"Dane prywatne",{"type":155,"value":200}," — odpowiedzi zawierające dane użytkownika wyłączone ze wspólnej pamięci podręcznej.",{"type":150,"tag":180,"props":202,"children":203},{},[204,209],{"type":150,"tag":184,"props":205,"children":206},{},[207],{"type":155,"value":208},"Turnstile",{"type":155,"value":210}," — weryfikacja przesłanego tokena na serwerze; sam widżet w przeglądarce nie wystarcza.",{"type":150,"tag":158,"props":212,"children":214},{"id":213},"za-co-nadal-odpowiada-aplikacja",[215],{"type":155,"value":216},"Za co nadal odpowiada aplikacja",{"type":150,"tag":151,"props":218,"children":219},{},[220],{"type":155,"value":221},"Cloudflare uzupełnia walidację danych, kontrolę uprawnień i ograniczanie liczby żądań. Reguły buforowania oraz zabezpieczenie połączenia z serwerem źródłowym pozostają częścią konfiguracji wdrożenia. Dostępne funkcje ochrony i limity zależą od wybranych usług i planu."]