[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"technology-uk-cloudflare":3,"technology-projects-uk-cloudflare":30,"mdc-lzhgfk-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_uk\u002Fuk\u002Ftechnologies\u002Fcloudflare.yml","Cloudflare","infrastructure","Cloudflare надає DNS, мережу доставки контенту та засоби захисту сайтів. Я використовую ці можливості для публічних SaaS-продуктів: налаштовую домени, кешування статичних файлів і захист форм від автоматичних надсилань.\n\n## Де я використовую Cloudflare\n\nVetCard, VetSpace і DigiPulse поєднують публічні сторінки з функціями застосунку. Для них потрібні різні правила кешування: зображення можна віддавати зі спільного кешу, а дані запису на прийом чи облікового запису мають залишатися приватними. DigiPulse також використовує Turnstile у публічних формах.\n\n## Кешування та захист форм\n\n- **Статичні файли** — кешування зображень, стилів і скриптів ближче до відвідувачів.\n- **Персональні дані** — виключення відповідей із приватною інформацією зі спільного кешу.\n- **Turnstile** — перевірка отриманого токена на сервері; самого віджета в браузері недостатньо.\n\n## Що залишається на стороні застосунку\n\nCloudflare доповнює перевірку введених даних, авторизацію й обмеження частоти запитів. Правила кешування та захищене з'єднання з основним сервером залишаються частиною налаштування інфраструктури. Доступні функції захисту й ліміти залежать від обраних сервісів і тарифу.\n","Cloudflare для SaaS-сайтів: керування DNS, кешування через CDN і захист форм від ботів за допомогою 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},"Технічна документація","https:\u002F\u002Fdevelopers.cloudflare.com\u002Fturnstile\u002Fget-started\u002Fserver-side-validation\u002F",{},[23,24,25],"vetcard","vetspace","digipulse","2021","uk\u002Ftechnologies\u002Fcloudflare","2026-09-20","GOhZLuKQRVjiK9dOvtU91TxwAgC1MrFt63_VPn8GRuA",[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_uk\u002Fuk\u002Fprojects\u002Fvetcard.yml","VetCard","Публічна частина VetSpace — мультитенантний каталог ветеринарних клінік. Один Nuxt SSR-деплой обслуговує всі клініки: SEO-сторінки клінік, онлайн-запис на прийом з проксуванням до tenant-бекенду кожної клініки, темізація під бренд клініки та підтримка філій.\n\n## Ключові особливості\n\n- **Один деплой — багато клінік** — застосунок маршрутизує за slug клініки; запити на запис і слоти проксуються до власного tenant-бекенду кожної клініки\n- **SEO-first каталог** — 590+ клінік з SSR-сторінками, структурованими даними та локалізованими маршрутами\n- **Брендинг кожної клініки** — сторінка клініки темізується її кольором, з бейджем \"Powered by VetSpace\"\n- **Реальний UX запису** — вільні слоти показують кількість вільних лікарів із кольоровим кодуванням дефіциту\n- **Повна локалізація** — українська, англійська та польська з prefix-маршрутизацією\n\n## Технології\n\n- **Фронтенд**: Nuxt 4 \u002F Vue 3, Tailwind CSS v4\n- **Бекенд**: Laravel catalog API + tenant-ендпоінти для запису\n- **Рендеринг**: SSR для SEO-сторінок, CSR для флоу запису\n- **Тестування**: Vitest юніт-тести + Cypress E2E проти реального бекенду\n","Мультитенантний каталог ветеринарних клінік: SEO-сторінки клінік, онлайн-запис на прийом, брендинг кожної клініки — один Nuxt-застосунок обслуговує всіх",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},"Огляд проєкту","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","uk\u002Fprojects\u002Fvetcard",[50,53,66,67,68],"Multi-tenant","SEO","SSR","RHyDtiD49495RNKUgIdwAcH8oiwELVMSL6Ik4JsT6H4",{"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_uk\u002Fuk\u002Fprojects\u002Fvetspace.yml","VetSpace","Двостороння ветеринарна платформа — SEO-каталог клінік та CRM для підписки з призначеннями та записами пацієнтів. Публічний каталог клінік, побудований для SEO-first набуття клієнтів, та підписка на основі CRM (призначення, візити, записи пацієнтів) як окремі Vue\u002FNuxt додатки над одним Laravel API. Архітектура database-per-tenant, підписки Stripe через Cashier, GraphQL + REST, та аналіз візитів з допомогою AI через присвячений Go мікросервіс.\n\n## Ключові можливості\n\n- **Двостороння воронка** - SEO-каталог залучає клініки, а CRM за підпискою (візити, картки пацієнтів) їх утримує\n- **Справжня ізоляція тенантів** - database-per-tenant тримає дані кожної клініки окремо, а GDPR-експорт\u002Fвидалення — це операція на рівні бази\n- **Дві грані API** - GraphQL для складних запитів каталогу, REST для CRM — одна кодова база Laravel\n- **Білінг із коробки** - підписки Stripe через Cashier: тріали, зміна планів, dunning\n- **AI там, де допомагає** - аналіз візитів виконує окремий Go-мікросервіс, не навантажуючи основний API\n\n## Стек технологій\n\n- **Бекенд**: Laravel (API)\n- **Фронтенд**: Vue\u002FNuxt (окремі застосунки)\n- **Архітектура**: Database-per-tenant multi-tenancy\n- **Платежі**: Stripe через Cashier\n- **API**: GraphQL + REST\n- **AI**: Go-мікросервіс для аналізу візитів\n","2026-09-19","Двостороння ветеринарна платформа — SEO-каталог клінік та CRM для підписки з призначеннями та записами пацієнтів","\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},"Огляд API","https:\u002F\u002Fgithub.com\u002FYurij2015\u002Fvetspace-api",{"label":84,"to":85,"color":16,"icon":46},"Огляд фронтенду","https:\u002F\u002Fgithub.com\u002FYurij2015\u002Fvetspace-frontend",{"label":87,"to":45,"color":16,"icon":46},"Огляд 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","uk\u002Fprojects\u002Fvetspace",[105,91,53,66,95,101],"SaaS","DG_13GfOpIs-FP9mwOJDR33DOhZ0GdfeSK1u1JLzZt8",{"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_uk\u002Fuk\u002Fprojects\u002Fdigipulse.yml","DigiPulse","SaaS для моніторингу доступності — перевірки кожні 60 секунд, відстеження закінчення SSL, сповіщення через Telegram та email. Адмін панель та основний бекенд побудовані з Laravel (Octane, Reverb websockets) та Filament, а моніторинг-движок — окремий Go сервіс. Інтеграція Google OAuth sign-in та Cloudflare Turnstile. Включає MCP сервер, який надає дані моніторингу безпосередньо до AI асистентів. Self-hosted на Proxmox.\n\n## Ключові можливості\n\n- **Окремий Go-движок** - перевірки доступності виконує окремий Go-сервіс, тож постійний поллінг кожні 60 секунд не гальмує Laravel-застосунок\n- **Дашборд у реальному часі** - Reverb websockets передають зміни статусу в UI наживо, без ручного оновлення\n- **Octane + Filament** - резидентний у пам'яті Laravel із повною адмін-панеллю для моніторів, контактів і правил сповіщень\n- **MCP-сервер** - монітори та інциденти доступні для AI-асистентів (Claude, Cursor) через Model Context Protocol\n- **Google OAuth + Turnstile** - вхід без пароля та захист від ботів на публічних формах\n- **Self-hosted** - розгорнуто на власному Proxmox-хомлабі, який я адмініструю повністю\n\n## Стек технологій\n\n- **Бекенд**: Laravel (Octane, Reverb websockets)\n- **Адмін-панель**: Filament\n- **Движок моніторингу**: Go (окремий сервіс)\n- **База даних**: PostgreSQL\n- **Інтеграція AI**: MCP-сервер\n- **Інфраструктура**: Self-hosted на Proxmox\n","2026-04-17","SaaS для моніторингу доступності: event-driven архітектура — Laravel (Octane, Reverb) і Filament диспетчеризують перевірки через Redis у легкий Go-воркер; MCP-сервер дає дані моніторингу AI-асистентам; сповіщення Telegram\u002Femail","\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","uk\u002Fprojects\u002Fdigipulse",[105,91,127,141,137,133,142],"Monitoring","Event-driven","jNmJS9kMabUQ04ggukPIRPMSLui7xNAbE9Nsuuw99ag",{"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 надає DNS, мережу доставки контенту та засоби захисту сайтів. Я використовую ці можливості для публічних SaaS-продуктів: налаштовую домени, кешування статичних файлів і захист форм від автоматичних надсилань.",{"type":150,"tag":158,"props":159,"children":161},"h2",{"id":160},"де-я-використовую-cloudflare",[162],{"type":155,"value":163},"Де я використовую Cloudflare",{"type":150,"tag":151,"props":165,"children":166},{},[167],{"type":155,"value":168},"VetCard, VetSpace і DigiPulse поєднують публічні сторінки з функціями застосунку. Для них потрібні різні правила кешування: зображення можна віддавати зі спільного кешу, а дані запису на прийом чи облікового запису мають залишатися приватними. DigiPulse також використовує Turnstile у публічних формах.",{"type":150,"tag":158,"props":170,"children":172},{"id":171},"кешування-та-захист-форм",[173],{"type":155,"value":174},"Кешування та захист форм",{"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},"Статичні файли",{"type":155,"value":190}," — кешування зображень, стилів і скриптів ближче до відвідувачів.",{"type":150,"tag":180,"props":192,"children":193},{},[194,199],{"type":150,"tag":184,"props":195,"children":196},{},[197],{"type":155,"value":198},"Персональні дані",{"type":155,"value":200}," — виключення відповідей із приватною інформацією зі спільного кешу.",{"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}," — перевірка отриманого токена на сервері; самого віджета в браузері недостатньо.",{"type":150,"tag":158,"props":212,"children":214},{"id":213},"що-залишається-на-стороні-застосунку",[215],{"type":155,"value":216},"Що залишається на стороні застосунку",{"type":150,"tag":151,"props":218,"children":219},{},[220],{"type":155,"value":221},"Cloudflare доповнює перевірку введених даних, авторизацію й обмеження частоти запитів. Правила кешування та захищене з'єднання з основним сервером залишаються частиною налаштування інфраструктури. Доступні функції захисту й ліміти залежать від обраних сервісів і тарифу."]