[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"technology-uk-github-actions":3,"technology-projects-uk-github-actions":29,"mdc-mxnm9f-key":206},{"id":4,"title":5,"category":6,"content":7,"description":8,"extension":9,"faq":10,"icon":11,"links":12,"meta":18,"projects":19,"since":25,"stem":26,"updated":27,"__hash__":28},"technologies_uk\u002Fuk\u002Ftechnologies\u002Fgithub-actions.yml","GitHub Actions","infrastructure","GitHub Actions запускає автоматизовані процеси з репозиторію GitHub. Я використовую його для перевірки змін і автоматизації випусків, зберігаючи опис процесу поряд із кодом застосунку.\n\n## Що перевіряється в цьому портфоліо\n\nПісля надсилання змін у репозиторій запускаються ESLint, перевірка типів TypeScript, модульні тести, виробнича збірка та браузерні тести Playwright. Вони перевіряють різні речі: узгодженість коду, типові помилки, поведінку застосунку й роботу зібраного сайту.\n\n## CI та розгортання — окремі процеси\n\nЦе портфоліо розгортається через Git-інтеграцію Vercel. Невдала перевірка GitHub Actions сама по собі не блокує розгортання чи злиття змін: обов'язкові перевірки й умови випуску налаштовуються окремо. Наявність тестів у процесі CI ще не означає, що вони є умовою публікації.\n\n## Мій підхід до автоматизації\n\nУ Laravel-проєктах, зокрема DigiSpace, автоматичні тести допомагають перевіряти зміни перед випуском. Швидкі перевірки ставлю на початку, щоб раніше отримати зрозумілу помилку. Для розгортання також потрібні контроль доступу, корисні журнали й план відновлення.\n","GitHub Actions для CI\u002FCD: автоматичні перевірки коду, типів, тести та збірки на прикладі цього портфоліо й Laravel-проєктів.","yml",null,"i-simple-icons-githubactions",[13],{"label":14,"to":15,"color":16,"icon":17},"github.com\u002Ffeatures\u002Factions","https:\u002F\u002Fgithub.com\u002Ffeatures\u002Factions","neutral","i-heroicons-arrow-top-right-on-square",{},[20,21,22,23,24],"digispace","vetspace","digipulse","netpostpanel","vetcard","2020","uk\u002Ftechnologies\u002Fgithub-actions","2026-09-20","lLkbr9G8TKdQ6p_kaKN-VygPAEw7bKBmecnUyhgx7Cw",[30,78,118,152,182],{"id":31,"title":32,"content":33,"date":34,"description":35,"extension":9,"featured":36,"image":37,"links":38,"meta":47,"stack":48,"stem":73,"tags":74,"url":41,"__hash__":77},"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",true,"\u002Fhero\u002Fdigispace.avif",[39,43],{"label":40,"to":41,"color":42,"icon":17},"Live Demo","https:\u002F\u002Fdigispace.pro","primary",{"label":44,"to":45,"color":16,"icon":46},"GitHub","https:\u002F\u002Fgithub.com\u002FYurij2015\u002FDigiSpace","i-simple-icons-github",{},[49,52,55,58,61,64,67,70],{"name":50,"icon":51},"Laravel","i-simple-icons-laravel",{"name":53,"icon":54},"Inertia","i-simple-icons-inertia",{"name":56,"icon":57},"Vue","i-simple-icons-vuedotjs",{"name":59,"icon":60},"Vite","i-simple-icons-vite",{"name":62,"icon":63},"MySQL","i-simple-icons-mysql",{"name":65,"icon":66},"Tailwind CSS","i-simple-icons-tailwindcss",{"name":68,"icon":69},"Filament","i-simple-icons-filament",{"name":71,"icon":72},"CMS","i-heroicons-document-text","uk\u002Fprojects\u002Fdigispace",[50,68,53,56,75,76],"i18n","SEO","6eh_R4Py3nOuDZ26oLWb7x2WWp4iSV66uJrBh_MkX_U",{"id":79,"title":80,"content":81,"date":82,"description":83,"extension":9,"featured":36,"image":84,"links":85,"meta":97,"stack":98,"stem":113,"tags":114,"url":87,"__hash__":117},"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",[86,88,91,94],{"label":40,"to":87,"color":42,"icon":17},"https:\u002F\u002Fvetspace.pro",{"label":89,"to":90,"color":16,"icon":46},"Огляд API","https:\u002F\u002Fgithub.com\u002FYurij2015\u002Fvetspace-api",{"label":92,"to":93,"color":16,"icon":46},"Огляд фронтенду","https:\u002F\u002Fgithub.com\u002FYurij2015\u002Fvetspace-frontend",{"label":95,"to":96,"color":16,"icon":46},"Огляд VetCard","https:\u002F\u002Fgithub.com\u002FYurij2015\u002Fvetspace-vetcard",{},[99,100,101,104,107,110],{"name":50,"icon":51},{"name":56,"icon":57},{"name":102,"icon":103},"Nuxt","i-simple-icons-nuxtdotjs",{"name":105,"icon":106},"Stripe","i-simple-icons-stripe",{"name":108,"icon":109},"GraphQL","i-simple-icons-graphql",{"name":111,"icon":112},"AI","i-heroicons-sparkles","uk\u002Fprojects\u002Fvetspace",[115,50,56,116,105,111],"SaaS","Multi-tenant","DG_13GfOpIs-FP9mwOJDR33DOhZ0GdfeSK1u1JLzZt8",{"id":119,"title":120,"content":121,"date":122,"description":123,"extension":9,"featured":36,"image":124,"links":125,"meta":130,"stack":131,"stem":147,"tags":148,"url":127,"__hash__":151},"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",[126,128],{"label":40,"to":127,"color":42,"icon":17},"https:\u002F\u002Fdigipulse.cloud",{"label":44,"to":129,"color":16,"icon":46},"https:\u002F\u002Fgithub.com\u002FYurij2015\u002Fdigipulse-backend",{},[132,133,134,137,140,143,144],{"name":50,"icon":51},{"name":68,"icon":69},{"name":135,"icon":136},"Go","i-simple-icons-go",{"name":138,"icon":139},"PostgreSQL","i-simple-icons-postgresql",{"name":141,"icon":142},"Redis","i-simple-icons-redis",{"name":56,"icon":57},{"name":145,"icon":146},"MCP","i-heroicons-cpu-chip","uk\u002Fprojects\u002Fdigipulse",[115,50,135,149,145,141,150],"Monitoring","Event-driven","jNmJS9kMabUQ04ggukPIRPMSLui7xNAbE9Nsuuw99ag",{"id":153,"title":154,"content":155,"date":156,"description":157,"extension":9,"featured":36,"image":158,"links":159,"meta":163,"stack":164,"stem":176,"tags":177,"url":180,"__hash__":181},"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",[160],{"label":161,"to":162,"color":16,"icon":46},"Огляд проєкту","https:\u002F\u002Fgithub.com\u002FYurij2015\u002Fnet-post-panel-overview",{},[165,166,167,170,173],{"name":50,"icon":51},{"name":111,"icon":112},{"name":168,"icon":169},"Qdrant","i-simple-icons-qdrant",{"name":171,"icon":172},"Langfuse","i-heroicons-chart-bar",{"name":174,"icon":175},"Horizon","i-simple-icons-laravelhorizon","uk\u002Fprojects\u002Fnetpostpanel",[111,50,178,179,168,174],"RAG","External API","https:\u002F\u002Fnet-post-panel.digispace.pro","aFH5L_k5kJI95DcFyQpS2By5vB1-qCqdu32coHU9QL8",{"id":183,"title":184,"content":185,"date":27,"description":186,"extension":9,"featured":36,"image":187,"links":188,"meta":192,"stack":193,"stem":202,"tags":203,"url":190,"__hash__":205},"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",[189,191],{"label":40,"to":190,"color":42,"icon":17},"https:\u002F\u002Fvetcard.pro",{"label":161,"to":96,"color":16,"icon":46},{},[194,195,196,199,200],{"name":102,"icon":103},{"name":56,"icon":57},{"name":197,"icon":198},"TypeScript","i-simple-icons-typescript",{"name":65,"icon":66},{"name":201,"icon":51},"Laravel API","uk\u002Fprojects\u002Fvetcard",[102,56,116,76,204],"SSR","RHyDtiD49495RNKUgIdwAcH8oiwELVMSL6Ik4JsT6H4",{"data":207,"body":208},{},{"type":209,"children":210},"root",[211,219,226,231,237,242,248],{"type":212,"tag":213,"props":214,"children":215},"element","p",{},[216],{"type":217,"value":218},"text","GitHub Actions запускає автоматизовані процеси з репозиторію GitHub. Я використовую його для перевірки змін і автоматизації випусків, зберігаючи опис процесу поряд із кодом застосунку.",{"type":212,"tag":220,"props":221,"children":223},"h2",{"id":222},"що-перевіряється-в-цьому-портфоліо",[224],{"type":217,"value":225},"Що перевіряється в цьому портфоліо",{"type":212,"tag":213,"props":227,"children":228},{},[229],{"type":217,"value":230},"Після надсилання змін у репозиторій запускаються ESLint, перевірка типів TypeScript, модульні тести, виробнича збірка та браузерні тести Playwright. Вони перевіряють різні речі: узгодженість коду, типові помилки, поведінку застосунку й роботу зібраного сайту.",{"type":212,"tag":220,"props":232,"children":234},{"id":233},"ci-та-розгортання-окремі-процеси",[235],{"type":217,"value":236},"CI та розгортання — окремі процеси",{"type":212,"tag":213,"props":238,"children":239},{},[240],{"type":217,"value":241},"Це портфоліо розгортається через Git-інтеграцію Vercel. Невдала перевірка GitHub Actions сама по собі не блокує розгортання чи злиття змін: обов'язкові перевірки й умови випуску налаштовуються окремо. Наявність тестів у процесі CI ще не означає, що вони є умовою публікації.",{"type":212,"tag":220,"props":243,"children":245},{"id":244},"мій-підхід-до-автоматизації",[246],{"type":217,"value":247},"Мій підхід до автоматизації",{"type":212,"tag":213,"props":249,"children":250},{},[251],{"type":217,"value":252},"У Laravel-проєктах, зокрема DigiSpace, автоматичні тести допомагають перевіряти зміни перед випуском. Швидкі перевірки ставлю на початку, щоб раніше отримати зрозумілу помилку. Для розгортання також потрібні контроль доступу, корисні журнали й план відновлення."]