[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"technology-uk-proxmox":3,"technology-projects-uk-proxmox":30,"mdc--olhdkm-key":146},{"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\u002Fproxmox.yml","Proxmox","infrastructure","Proxmox VE — платформа віртуалізації, яку я використовую на орендованому сервері Hetzner. Вона дає змогу керувати окремими середовищами для SaaS-застосунків і допоміжних сервісів, зокрема інфраструктурою DigiPulse.\n\n## Як я організовую середовища\n\nВіртуальні машини мають окремі операційні системи та налаштування виділених ресурсів. Усередині них Docker запускає сервіси застосунку. Так зручніше оновлювати й діагностувати кожне середовище, ніж установлювати всі сервіси безпосередньо на фізичний сервер.\n\n## Знімки стану та резервні копії\n\nЗнімок стану може допомогти скасувати зміну залежно від сховища та стану застосунку. Він не замінює незалежної резервної копії й не захищає від втрати дисків основного сервера. Під час відновлення також потрібно враховувати узгодженість бази даних і порядок запуску сервісів.\n\n## Обмеження одного фізичного вузла\n\nВіртуальні машини спільно використовують фізичні ресурси й залежать від доступності сервера. Ліміти допомагають розподіляти навантаження, але несправність диска чи вузла може зачепити кілька застосунків. Тому розділення середовищ, відновлення з копій і відмовостійкість потребують окремих рішень.\n","Proxmox VE для SaaS-хостингу: віртуальні машини на виділеному сервері, розділення середовищ, знімки стану та резервні копії.","yml",null,"i-simple-icons-proxmox",[13,18],{"label":14,"to":15,"color":16,"icon":17},"proxmox.com","https:\u002F\u002Fwww.proxmox.com","neutral","i-heroicons-arrow-top-right-on-square",{"label":19,"to":20,"color":16,"icon":17},"Технічна документація","https:\u002F\u002Fpve.proxmox.com\u002Fpve-docs\u002Fpve-admin-guide.pdf",{},[23,24,25],"digipulse","vetspace","netpostpanel","2023","uk\u002Ftechnologies\u002Fproxmox","2026-09-20","p2dU_O68t224qCAP1lE32FjQ5RH6rfDXyl5gNFTMkpI",[31,77,116],{"id":32,"title":33,"content":34,"date":35,"description":36,"extension":9,"featured":37,"image":38,"links":39,"meta":48,"stack":49,"stem":71,"tags":72,"url":42,"__hash__":76},"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",true,"\u002Fhero\u002Fdigipulse.avif",[40,44],{"label":41,"to":42,"color":43,"icon":17},"Live Demo","https:\u002F\u002Fdigipulse.cloud","primary",{"label":45,"to":46,"color":16,"icon":47},"GitHub","https:\u002F\u002Fgithub.com\u002FYurij2015\u002Fdigipulse-backend","i-simple-icons-github",{},[50,53,56,59,62,65,68],{"name":51,"icon":52},"Laravel","i-simple-icons-laravel",{"name":54,"icon":55},"Filament","i-simple-icons-filament",{"name":57,"icon":58},"Go","i-simple-icons-go",{"name":60,"icon":61},"PostgreSQL","i-simple-icons-postgresql",{"name":63,"icon":64},"Redis","i-simple-icons-redis",{"name":66,"icon":67},"Vue","i-simple-icons-vuedotjs",{"name":69,"icon":70},"MCP","i-heroicons-cpu-chip","uk\u002Fprojects\u002Fdigipulse",[73,51,57,74,69,63,75],"SaaS","Monitoring","Event-driven","jNmJS9kMabUQ04ggukPIRPMSLui7xNAbE9Nsuuw99ag",{"id":78,"title":79,"content":80,"date":81,"description":82,"extension":9,"featured":37,"image":83,"links":84,"meta":96,"stack":97,"stem":112,"tags":113,"url":86,"__hash__":115},"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",[85,87,90,93],{"label":41,"to":86,"color":43,"icon":17},"https:\u002F\u002Fvetspace.pro",{"label":88,"to":89,"color":16,"icon":47},"Огляд API","https:\u002F\u002Fgithub.com\u002FYurij2015\u002Fvetspace-api",{"label":91,"to":92,"color":16,"icon":47},"Огляд фронтенду","https:\u002F\u002Fgithub.com\u002FYurij2015\u002Fvetspace-frontend",{"label":94,"to":95,"color":16,"icon":47},"Огляд VetCard","https:\u002F\u002Fgithub.com\u002FYurij2015\u002Fvetspace-vetcard",{},[98,99,100,103,106,109],{"name":51,"icon":52},{"name":66,"icon":67},{"name":101,"icon":102},"Nuxt","i-simple-icons-nuxtdotjs",{"name":104,"icon":105},"Stripe","i-simple-icons-stripe",{"name":107,"icon":108},"GraphQL","i-simple-icons-graphql",{"name":110,"icon":111},"AI","i-heroicons-sparkles","uk\u002Fprojects\u002Fvetspace",[73,51,66,114,104,110],"Multi-tenant","DG_13GfOpIs-FP9mwOJDR33DOhZ0GdfeSK1u1JLzZt8",{"id":117,"title":118,"content":119,"date":120,"description":121,"extension":9,"featured":37,"image":122,"links":123,"meta":127,"stack":128,"stem":140,"tags":141,"url":144,"__hash__":145},"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",[124],{"label":125,"to":126,"color":16,"icon":47},"Огляд проєкту","https:\u002F\u002Fgithub.com\u002FYurij2015\u002Fnet-post-panel-overview",{},[129,130,131,134,137],{"name":51,"icon":52},{"name":110,"icon":111},{"name":132,"icon":133},"Qdrant","i-simple-icons-qdrant",{"name":135,"icon":136},"Langfuse","i-heroicons-chart-bar",{"name":138,"icon":139},"Horizon","i-simple-icons-laravelhorizon","uk\u002Fprojects\u002Fnetpostpanel",[110,51,142,143,132,138],"RAG","External API","https:\u002F\u002Fnet-post-panel.digispace.pro","aFH5L_k5kJI95DcFyQpS2By5vB1-qCqdu32coHU9QL8",{"data":147,"body":148},{},{"type":149,"children":150},"root",[151,159,166,171,177,182,188],{"type":152,"tag":153,"props":154,"children":155},"element","p",{},[156],{"type":157,"value":158},"text","Proxmox VE — платформа віртуалізації, яку я використовую на орендованому сервері Hetzner. Вона дає змогу керувати окремими середовищами для SaaS-застосунків і допоміжних сервісів, зокрема інфраструктурою DigiPulse.",{"type":152,"tag":160,"props":161,"children":163},"h2",{"id":162},"як-я-організовую-середовища",[164],{"type":157,"value":165},"Як я організовую середовища",{"type":152,"tag":153,"props":167,"children":168},{},[169],{"type":157,"value":170},"Віртуальні машини мають окремі операційні системи та налаштування виділених ресурсів. Усередині них Docker запускає сервіси застосунку. Так зручніше оновлювати й діагностувати кожне середовище, ніж установлювати всі сервіси безпосередньо на фізичний сервер.",{"type":152,"tag":160,"props":172,"children":174},{"id":173},"знімки-стану-та-резервні-копії",[175],{"type":157,"value":176},"Знімки стану та резервні копії",{"type":152,"tag":153,"props":178,"children":179},{},[180],{"type":157,"value":181},"Знімок стану може допомогти скасувати зміну залежно від сховища та стану застосунку. Він не замінює незалежної резервної копії й не захищає від втрати дисків основного сервера. Під час відновлення також потрібно враховувати узгодженість бази даних і порядок запуску сервісів.",{"type":152,"tag":160,"props":183,"children":185},{"id":184},"обмеження-одного-фізичного-вузла",[186],{"type":157,"value":187},"Обмеження одного фізичного вузла",{"type":152,"tag":153,"props":189,"children":190},{},[191],{"type":157,"value":192},"Віртуальні машини спільно використовують фізичні ресурси й залежать від доступності сервера. Ліміти допомагають розподіляти навантаження, але несправність диска чи вузла може зачепити кілька застосунків. Тому розділення середовищ, відновлення з копій і відмовостійкість потребують окремих рішень."]