[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"technology-uk-laravel":3,"technology-projects-uk-laravel":41,"mdc-dt3zyt-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_uk\u002Fuk\u002Ftechnologies\u002Flaravel.yml","Laravel","backend","Laravel — PHP-фреймворк, на якому я створюю SaaS-продукти, API та адміністративні інструменти. Серед моїх проєктів — VetSpace, DigiPulse, NetPostPanel і сайт DigiSpace. Кожен має власні бізнес-правила та вимоги до інтеграцій.\n\n## Як я використовую Laravel\n\n- **VetSpace** — спільний API для каталогу клінік і CRM, доступ з урахуванням клініки та підписки Stripe через Cashier.\n- **DigiPulse** — застосунок моніторингу й панель Filament поруч з окремим сервісом перевірок на Go.\n- **NetPostPanel** — фонові процеси генерування контенту через черги та Horizon.\n- **DigiSpace** — багатомовний сайт із власною CMS і панеллю Filament.\n\n## Фреймворк та його екосистема\n\nLaravel надає маршрутизацію, перевірку даних, роботу з базою та API черг. Filament, Cashier і Horizon — додаткові інструменти, які я добираю й налаштовую для проєкту. Платежі, права доступу та ізоляція клієнтських даних потребують окремого проєктування й тестування.\n\n## Підтримка після запуску\n\nНамагаюся відокремлювати бізнес-логіку від HTTP-запитів та адміністративних екранів. Це полегшує повторне використання процесу в API чи фоновому завданні. Оптимізацію починаю з вимірювань: Octane може допомогти за відповідного навантаження, але не замінює оптимізації запитів і контролю стану застосунку.\n","Розробка SaaS, API та адміністративних панелей на Laravel: VetSpace, DigiPulse, Filament, фонові завдання й підписки Stripe.","yml",[11,14,17],{"label":12,"content":13},"Ви створюєте нові Laravel-застосунки чи підтримуєте наявні?","І те, й інше. Працюю над новими застосунками, аудитами, рефакторингом і розвитком наявних продуктів. Підхід залежить від стану коду та вимог до випусків.",{"label":15,"content":16},"З якими інструментами Laravel ви працюєте?","Filament для адміністрування, Cashier для підписок Stripe і Horizon для черг Redis. Також працюю з Octane та FrankenPHP, коли застосунку підходять процеси тривалої роботи.",{"label":18,"content":19},"Чи можете ви налаштувати хостинг і розгортання Laravel?","Так. Працюю з Docker, Caddy, Proxmox і CI\u002FCD, зокрема на орендованому виділеному сервері Hetzner. Конфігурація залежить від вимог до доступності й підтримки проєкту.","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},"Технічна документація","https:\u002F\u002Flaravel.com\u002Fframework\u002Fdocs\u002F12.x\u002Fhorizon",{},[32,33,34,35,36],"vetspace","digipulse","digispace","netpostpanel","vetcard","2018","uk\u002Ftechnologies\u002Flaravel","2026-09-20","sAnho3Zx7ff1xH1t7cOBpsAs_ag9DbdMCl3fqpgsKD8",[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_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 для підписки з призначеннями та записами пацієнтів",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},"Огляд API","https:\u002F\u002Fgithub.com\u002FYurij2015\u002Fvetspace-api","i-simple-icons-github",{"label":60,"to":61,"color":25,"icon":58},"Огляд фронтенду","https:\u002F\u002Fgithub.com\u002FYurij2015\u002Fvetspace-frontend",{"label":63,"to":64,"color":25,"icon":58},"Огляд 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","uk\u002Fprojects\u002Fvetspace",[85,5,69,86,75,81],"SaaS","Multi-tenant","DG_13GfOpIs-FP9mwOJDR33DOhZ0GdfeSK1u1JLzZt8",{"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_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",[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","uk\u002Fprojects\u002Fdigipulse",[85,5,108,122,118,114,123],"Monitoring","Event-driven","jNmJS9kMabUQ04ggukPIRPMSLui7xNAbE9Nsuuw99ag",{"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_uk\u002Fuk\u002Fprojects\u002Fdigispace.yml","DigiSpace","Production-сайт digispace.pro — публічний сайт агенції, адмін-панель та кастомна CMS в одному застосунку Laravel, тепер повністю мультимовний (EN\u002FUK\u002FPL), з Filament-панеллю поруч зі старою адмінкою на Inertia + Vue. Той самий код, що працює на живому сайті, доступний на GitHub.\n\n## Ключові можливості\n\n- **Адмін-панель на Filament** - паралельна панель `\u002Fcontrol` (24 ресурси) з TipTap-редактором, заливкою зображень напряму в MinIO та контент-орієнтованою навігацією, впроваджена ресурс за ресурсом поруч з існуючою Inertia-адмінкою\n- **Мультимовність за задумом** - перекладаються не лише сторінки, а й структурні UI-рядки (меню, футер, кнопки) для кожної локалі, з hreflang-маршрутизацією\n- **SEO з коробки** - структуровані дані JSON-LD, локалізовані sitemap та коректна обробка 404 для кожної локалі\n- **Моноліт як треба** - публічний сайт і обидві адмінки в одному застосунку Laravel, без окремого API\n- **Самостійний контент** - сторінки, послуги й кейси редагуються в CMS — без деплою заради зміни тексту чи перекладу\n- **Брама якості** - PHPUnit-тести та статичний аналіз PHPStan у CI\n- **Відкритий код** - саме той код, що обслуговує digispace.pro, публічний на GitHub\n\n## Стек технологій\n\n- **Бекенд**: Laravel\n- **Адмінка**: Filament 5 (`\u002Fcontrol`) + стара адмінка на Inertia.js + Vue\n- **Фронтенд**: Vue.js, Vite\n- **Локалізація**: переклади контенту й структури EN\u002FUK\u002FPL\n- **Архітектура**: Кастомна CMS\n","2022-10-05","Мультимовний (EN\u002FUK\u002FPL) production-сайт агенції з кастомною CMS — Filament-панель з розширеним редактором контенту, переклади, JSON-LD і локалізовані sitemap із коробки, поруч зі старою адмінкою на 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","uk\u002Fprojects\u002Fdigispace",[5,105,141,69,159,160],"i18n","SEO","6eh_R4Py3nOuDZ26oLWb7x2WWp4iSV66uJrBh_MkX_U",{"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_uk\u002Fuk\u002Fprojects\u002Fnetpostpanel.yml","NetPostPanel","Внутрішня AI-платформа для контент-операцій, яка перетворює дослідження теми на готовий контент: повний RAG-пайплайн (Google Custom Search + RSS → скрапінг → мультипровайдерна генерація → векторизація), плюс версіонований зовнішній API, що живить контент-процеси інших проєктів, зокрема блог-пайплайн DigiSpace.\n\n## Ключові можливості\n\n- **Зовнішній API** - версіонований `POST \u002Fapi\u002Fv1\u002Fgenerate` + `\u002Ftranslate` з ключами й лімітами на клієнта відкриває весь пайплайн для інших застосунків, синхронно або асинхронно з колбеками\n- **Auto Pilot** - щоденні заплановані запуски генерують контент з нових джерел натхнення чи власних тем без участі людини\n- **AI без прив'язки до провайдера** - Gemini та OpenAI за драйвер-абстракцією, тож зміна моделі — це конфіг, а не рефакторинг\n- **Семантичний пайплайн** - векторний пошук на Qdrant дедублікує й кластеризує новини ще до генерації\n- **Автономна агрегація** - авто-виявлення RSS-стрічок та Google Custom Search плюс скрапінг перетворюють тему на самопоповнюване джерело контенту\n- **Прозорі LLM-виклики** - кожна генерація трасується в Langfuse: токени, затримка, вартість\n- **Рольовий доступ** - ролі admin\u002Fcontent manager\u002Feditor, кожен запит обмежений власником, крім адміна\n\n## Стек технологій\n\n- **Бекенд**: Laravel, агенти `laravel\u002Fai`\n- **Фронтенд**: Inertia.js + Vue 3 (SPA Search & Creation, редактор TipTap)\n- **AI**: Мультипровайдерно (Gemini\u002FOpenAI) за драйвер-абстракцією\n- **Дослідження**: Google Custom Search + RSS-агрегація, скрапінг сторінок\n- **Векторна БД**: Qdrant для семантичного пошуку\n- **Обсервабельність**: Langfuse для LLM-трейсингу\n- **Черга**: Laravel Horizon\n- **Тести**: PHPUnit\u002FPest + Cypress E2E\n","2024-11-10","AI-платформа для контент-операцій — RAG-пайплайн (дослідження → скрапінг → генерація → векторизація), зовнішній API для інших застосунків, та Auto Pilot для генерації без участі людини","\u002Fhero\u002Fnetpostpanel.avif",[170],{"label":171,"to":172,"color":25,"icon":58},"Огляд проєкту","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","uk\u002Fprojects\u002Fnetpostpanel",[81,5,188,189,178,184],"RAG","External API","https:\u002F\u002Fnet-post-panel.digispace.pro","aFH5L_k5kJI95DcFyQpS2By5vB1-qCqdu32coHU9QL8",{"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_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-застосунок обслуговує всіх","\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","uk\u002Fprojects\u002Fvetcard",[72,69,86,160,214],"SSR","RHyDtiD49495RNKUgIdwAcH8oiwELVMSL6Ik4JsT6H4",{"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 — PHP-фреймворк, на якому я створюю SaaS-продукти, API та адміністративні інструменти. Серед моїх проєктів — VetSpace, DigiPulse, NetPostPanel і сайт DigiSpace. Кожен має власні бізнес-правила та вимоги до інтеграцій.",{"type":222,"tag":230,"props":231,"children":233},"h2",{"id":232},"як-я-використовую-laravel",[234],{"type":227,"value":235},"Як я використовую 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}," — спільний API для каталогу клінік і CRM, доступ з урахуванням клініки та підписки Stripe через 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}," — застосунок моніторингу й панель Filament поруч з окремим сервісом перевірок на 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}," — фонові процеси генерування контенту через черги та 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}," — багатомовний сайт із власною CMS і панеллю Filament.",{"type":222,"tag":230,"props":279,"children":281},{"id":280},"фреймворк-та-його-екосистема",[282],{"type":227,"value":283},"Фреймворк та його екосистема",{"type":222,"tag":223,"props":285,"children":286},{},[287],{"type":227,"value":288},"Laravel надає маршрутизацію, перевірку даних, роботу з базою та API черг. Filament, Cashier і Horizon — додаткові інструменти, які я добираю й налаштовую для проєкту. Платежі, права доступу та ізоляція клієнтських даних потребують окремого проєктування й тестування.",{"type":222,"tag":230,"props":290,"children":292},{"id":291},"підтримка-після-запуску",[293],{"type":227,"value":294},"Підтримка після запуску",{"type":222,"tag":223,"props":296,"children":297},{},[298],{"type":227,"value":299},"Намагаюся відокремлювати бізнес-логіку від HTTP-запитів та адміністративних екранів. Це полегшує повторне використання процесу в API чи фоновому завданні. Оптимізацію починаю з вимірювань: Octane може допомогти за відповідного навантаження, але не замінює оптимізації запитів і контролю стану застосунку."]