[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"content:site:uk":3,"content:products:uk":22,"content:post:zero-downtime-deploy:uk":250},{"email":4,"salesEmail":4,"supportEmail":5,"phone":6,"telegram":7,"telegramUrl":8,"whatsappUrl":6,"githubUrl":9,"linkedinUrl":10,"locale":11,"footerAbout":12,"contactPromise":13,"whereBody":14,"officeCity":15,"workHours":16,"budgetRanges":17},"sales@jvdsoft.com","support@jvdsoft.com",null,"@jvdsoft_support","https:\u002F\u002Ft.me\u002Fjvdsoft_support","https:\u002F\u002Fgithub.com\u002FEvgeniyKiryanow","https:\u002F\u002Fwww.linkedin.com\u002Fin\u002Fyevhenii-kirianov-54b8081ba\u002F","uk","Веб-розробка повного циклу. Київ — працюємо з клієнтами з України, ЄС і США. Власні продукти Qrenza і ShiftPlan тримаємо в продакшені самі.","Пишіть, як вам зручно — відповідаємо протягом робочого дня. По продажах sales, по підтримці продуктів support.","Київ, Україна. Працюємо віддалено з клієнтами з України, ЄС і США. Документи — договір і NDA, оплата на ФОП або юридичну особу.","Київ, Україна","Пн–Пт, 10:00–19:00 (Київ)",[18,19,20,21],"до [сума]","[сума] — [сума]","більше [сума]","ще не знаю",[23,154],{"slug":24,"status":25,"order":26,"siteUrl":27,"logoUrl":28,"heroImageUrl":29,"accentColor":30,"stack":31,"launchedYear":38,"locale":11,"name":39,"tagline":40,"summary":41,"positioning":42,"metaTitle":43,"metaDescription":44,"audience":45,"features":54,"steps":85,"plans":95,"faq":114,"gallery":136},"qrenza","live",0,"https:\u002F\u002Fqrenza.jvdsoft.com","\u002Fmedia\u002Fproducts\u002Fqrenza\u002Flogo.svg","\u002Fmedia\u002Fproducts\u002Fqrenza\u002Fhero.webp","#6366f1",[32,33,34,35,36,37],"Laravel","React","TypeScript","PostgreSQL","Tailwind CSS","Vite",2026,"Qrenza","Цифрова платформа каталогу з QR-меню та замовленнями в реальному часі","Каталог, замовлення й аналітика для будь-якого бізнесу з товарами чи послугами. Клієнт сканує QR-код і бачить меню — без застосунку, без паперу, без очікування.","Qrenza забирає паперове меню й таблиці: категорії, товари, ціни та фото ви ведете в одному місці, а клієнт відкриває каталог із QR-коду на столику, прилавку чи у вітрині. Замовлення з телефона клієнта падає прямо на дашборд, статус проходить три кроки, карта столів показує, де зараз працюють. Підходить ресторанам, кафе, барам, пекарням, магазинам, салонам і студіям — усім, у кого є перелік того, що вони продають.","Qrenza — QR-меню й цифровий каталог для бізнесу","Qrenza — платформа цифрового каталогу: QR-меню, замовлення в реальному часі, карта столів, аналітика, ролі команди та 6 мов. Продукт JVD Soft у продакшені.",[46,47,48,49,50,51,52,53],"Ресторани","Кафе та кав’ярні","Бари та нічні клуби","Пекарні та кондитерські","Магазини та крамниці","Краса та велнес","Салони та студії","Ринки та кіоски",[55,58,61,64,67,70,73,76,79,82],{"title":56,"body":57},"Розумний каталог","Категорії й позиції з фото, цінами, описами та контролем доступності — для меню, каталогу товарів або переліку послуг.",{"title":59,"body":60},"Замовлення в реальному часі","Клієнт замовляє з QR-меню, замовлення з’являється на дашборді миттєво. Три кроки статусу: нове → готується → готово.",{"title":62,"body":63},"Управління столами","Карта столів показує, де є активні замовлення. Замовлення можна переносити між столами і стежити за кожним місцем окремо.",{"title":65,"body":66},"Живий дашборд","Статистика по активних каталогах і щоденних операціях у реальному часі — з будь-якого пристрою.",{"title":68,"body":69},"Аналітика та звіти","Динаміка виручки, топ-товари, рівень скасувань і повна історія замовлень в одному дашборді.",{"title":71,"body":72},"Ролі команди","Власники, адміністратори та персонал з різним рівнем доступу. Уся команда керується з одного місця.",{"title":74,"body":75},"Багатомовність","Шість мов інтерфейсу. Каталог відкривається мовою клієнта — для двомовних і туристичних закладів.",{"title":77,"body":78},"Свій бренд і домен","Логотип, фавікон, кольори, стиль навігації, власний домен, мета-теги та Google Analytics — без плагінів.",{"title":80,"body":81},"Програма лояльності","Вбудовані бали нараховуються автоматично за кожне замовлення — щоб клієнт повертався.",{"title":83,"body":84},"Вбудовування будь-де","Повний каталог вставляється на будь-який сайт як iframe одним рядком коду.",[86,89,92],{"title":87,"body":88},"Створіть акаунт","Реєстрація за секунди, без картки. 14-денний пробний період починається одразу, з повним доступом до всіх функцій.",{"title":90,"body":91},"Побудуйте каталог","Додайте категорії та позиції — товари, страви, послуги. Фото, ціни, описи; порядок змінюється перетягуванням.",{"title":93,"body":94},"Поділіться QR-кодом","Роздрукуйте унікальний QR-код і поставте де завгодно — на столик, прилавок або вітрину. Клієнт сканує й бачить каталог одразу.",[96,104,109],{"name":97,"price":98,"note":99,"features":100,"popular":103},"[Старт]","[сума]","\u002F міс",[101,102,102],"[Обмеження плану]","[Що входить]",false,{"name":105,"price":98,"note":99,"features":106,"popular":108},"[Робочий]",[107,102,102],"[Усе зі «Старту», плюс]",true,{"name":110,"price":98,"note":99,"features":111,"popular":103},"[Команда]",[112,102,113],"[Усе з «Робочого», плюс]","Пріоритетна підтримка",[115,118,121,124,127,130,133],{"q":116,"a":117},"Чи є безкоштовний пробний період?","Так — 14 днів із повним доступом до всіх функцій, без кредитної картки. Пробний період починається одразу після реєстрації.",{"q":119,"a":120},"Чи можна оновлювати каталог у реальному часі?","Так. Зміна ціни, опису чи доступності позиції видна клієнтам одразу — QR-код перепечатувати не потрібно, він завжди веде на актуальний каталог.",{"q":122,"a":123},"Чи потрібно клієнтам завантажувати додаток?","Ні. Каталог відкривається у браузері телефона після сканування QR-коду. Інтерфейс зроблений mobile-first, тому працює на будь-якому пристрої.",{"q":125,"a":126},"Чи можна використовувати власний домен?","Так. Можна підключити свій домен і поставити логотип, фавікон та кольори бренду — каталог виглядатиме як частина вашого сайту.",{"q":128,"a":129},"Для яких бізнесів підходить Qrenza?","Для будь-якого, у кого є перелік товарів або послуг: ресторани, кафе, бари, пекарні, магазини, салони краси, студії, ринки й кіоски.",{"q":131,"a":132},"Чи можна відстежувати замовлення клієнтів?","Так. Кожне замовлення проходить три кроки статусу на дашборді, а карта столів показує, де воно зараз. Уся історія залишається в системі.",{"q":134,"a":135},"Де зберігаються дані?","У нашій інфраструктурі: вхід через email\u002Fпароль або Google OAuth, токен-сесії з підтвердженням email, доступи розділені за ролями.",[137,142,146,150],{"src":138,"alt":139,"width":140,"height":141},"\u002Fmedia\u002Fproducts\u002Fqrenza\u002Forders.webp","Дашборд Qrenza із замовленнями в реальному часі та картою столів",1280,588,{"src":143,"alt":144,"width":140,"height":145},"\u002Fmedia\u002Fproducts\u002Fqrenza\u002Fmenu.webp","QR-меню Qrenza на телефоні клієнта",572,{"src":147,"alt":148,"width":140,"height":149},"\u002Fmedia\u002Fproducts\u002Fqrenza\u002Fsettings.webp","Налаштування закладу в Qrenza: бренд, тема, навігація, SEO",879,{"src":151,"alt":152,"width":140,"height":153},"\u002Fmedia\u002Fproducts\u002Fqrenza\u002Ffeatures.webp","Перелік можливостей платформи Qrenza",1020,{"slug":155,"status":25,"order":156,"siteUrl":157,"logoUrl":158,"heroImageUrl":159,"accentColor":160,"stack":161,"launchedYear":38,"locale":11,"name":162,"tagline":163,"summary":164,"positioning":165,"metaTitle":166,"metaDescription":167,"audience":168,"features":169,"steps":200,"plans":210,"faq":217,"gallery":233},"shiftplan",1,"https:\u002F\u002Fshifts.jvdsoft.com","\u002Fmedia\u002Fproducts\u002Fshifts\u002Flogo.svg","\u002Fmedia\u002Fproducts\u002Fshifts\u002Fhero.webp","#f97316",[32,33,34,35,36,37],"ShiftPlan","Графік змін для команд — без таблиць і без «хто сьогодні працює?»","Створюйте, призначайте й публікуйте графік змін за хвилини. Команда отримує сповіщення автоматично, накладки система знаходить сама.","ShiftPlan замінює таблицю в Excel і чат із питаннями «хто сьогодні на зміні». Графік будується на календарі з видами місяць\u002Fтиждень\u002Fдень, зміни можна повторювати за розписом і розфарбовувати кольорами, на одну зміну призначається кілька людей. Щойно графік опубліковано, кожен бачить свої зміни й отримує push-сповіщення про будь-яку зміну; накладки й подвійні бронювання система блокує одразу. Для менеджера — статистика змін і навантаження команди.","ShiftPlan — графік змін і планування роботи команди","ShiftPlan — планування змін для команд: календар, повторювані зміни, кольори, кілька виконавців, сповіщення, аналітика навантаження. Продукт JVD Soft.",[],[170,173,176,179,182,185,188,191,194,197],{"title":171,"body":172},"Візуальний графік","Зміни будуються на чистій календарній дошці з видами місяць, тиждень і день.",{"title":174,"body":175},"Повторювані зміни","Зміна, що повторюється щодня, щотижня, щомісяця або за власним розписом — одним кліком.",{"title":177,"body":178},"Кольори без обмежень","Кольорове кодування змін: необмежені власні кольори або готова палітра.",{"title":180,"body":181},"Керування командою","Кілька виконавців на одну зміну, роботa з ролями й облік того, хто коли працює.",{"title":183,"body":184},"Аналітика й навантаження","Статистика змін, графіки співробітників і розуміння навантаження команди.",{"title":186,"body":187},"Розумні сповіщення","Миттєві push-сповіщення про будь-яку зміну графіка — ніхто не пропустить свою зміну.",{"title":189,"body":190},"Контроль накладок","Система сама знаходить накладки й подвійні бронювання і не дає їх зберегти.",{"title":192,"body":193},"Mobile-first","Адаптивний інтерфейс однаково працює на телефоні, планшеті й десктопі.",{"title":195,"body":196},"Шифрування","Дані шифруються під час передавання і у сховищі — графіки залишаються вашими.",{"title":198,"body":199},"Відповідність і бекапи","GDPR, CCPA і SOC 2, щоденні автоматичні резервні копії з можливістю відновлення.",[201,204,207],{"title":202,"body":203},"Створіть зміни","Побудуйте графік на календарі: додайте зміни, задайте час, призначте людей.",{"title":205,"body":206},"Призначте співробітників","На одну зміну призначається один або кілька людей, кольорове кодування показує все з першого погляду.",{"title":208,"body":209},"Сповістіть команду","Команда одразу отримує сповіщення про свій графік — усі в курсі, завжди.",[211,213,215],{"name":97,"price":98,"note":99,"features":212,"popular":103},[101,102,102],{"name":105,"price":98,"note":99,"features":214,"popular":108},[107,102,102],{"name":110,"price":98,"note":99,"features":216,"popular":103},[112,102,113],[218,221,224,227,230],{"q":219,"a":220},"Скільки коштує почати?","Почати можна безкоштовно й перейти на платний план пізніше — реєстрація не вимагає оплати.",{"q":222,"a":223},"Що буде, якщо дві зміни накладуться?","Система сама знаходить накладки й подвійні бронювання і повідомляє про них одразу, ще до публікації графіка.",{"q":225,"a":226},"Як команда дізнається про зміни в графіку?","Кожен співробітник отримує миттєве push-сповіщення. Оновлення приходять у реальному часі, тому переписка «а хто сьогодні?» зникає.",{"q":228,"a":229},"Чи можна працювати з телефона?","Так. Інтерфейс адаптивний і зроблений mobile-first — на телефоні, планшеті й десктопі однаково.",{"q":231,"a":232},"Наскільки захищені дані графіка?","Дані шифруються під час передавання і у сховищі, сервіс відповідає GDPR, CCPA і SOC 2, резервні копії створюються щодня.",[234,238,242,246],{"src":235,"alt":236,"width":140,"height":237},"\u002Fmedia\u002Fproducts\u002Fshifts\u002Ffeatures.webp","Можливості ShiftPlan: календар, повторювані зміни, кольори, команда",696,{"src":239,"alt":240,"width":140,"height":241},"\u002Fmedia\u002Fproducts\u002Fshifts\u002Fhow.webp","Три кроки роботи в ShiftPlan",476,{"src":243,"alt":244,"width":140,"height":245},"\u002Fmedia\u002Fproducts\u002Fshifts\u002Fwhy.webp","Чому команди обирають ShiftPlan",580,{"src":247,"alt":248,"width":140,"height":249},"\u002Fmedia\u002Fproducts\u002Fshifts\u002Fsecurity.webp","Безпека ShiftPlan: шифрування, відповідність, резервні копії",508,{"slug":251,"category":252,"tags":253,"coverImageUrl":6,"coverImageAlt":258,"readingMinutes":259,"featured":108,"publishedAt":260,"updatedAt":261,"locale":11,"title":262,"excerpt":263,"lead":264,"bodyHtml":265,"metaTitle":266,"metaDescription":267,"takeaways":268,"faq":273,"author":280,"related":286},"zero-downtime-deploy","devops",[254,255,256,257],"deploy","docker","postgres","ci-cd","",9,"2026-07-28T09:00:00.000Z","2026-08-28T15:57:52.378Z","Деплой без простою на одному сервері: що насправді потрібно","Zero-downtime не починається з Kubernetes. Він починається з міграцій, які сумісні зі старим кодом, і з health-check, який каже правду. Розбираємо порядок кроків на звичайному VPS з docker compose.","Більшість статей про деплой без простою починаються з кластера на п’ять нод. Але 90% продуктів живуть на одному сервері з docker compose, і саме там простій болить найбільше — бо нікому підхопити трафік. Хороша новина: на одному сервері zero-downtime теж досяжний, і головна робота там не в оркестраторі, а в тому, як ви пишете міграції.","\u003Ch2 id=\"why\">Чому падає навіть простий деплой\u003C\u002Fh2>\u003Cp>Класичний сценарій: \u003Ccode>docker compose up -d --build\u003C\u002Fcode>. Старий контейнер зупиняється, новий піднімається за 8–20 секунд, поки Nuxt прогріває свій кеш. Усі запити в цьому вікні отримують 502 від nginx. Якщо в цей момент користувач відправляв форму — заявка втрачена, і ви про це ніколи не дізнаєтесь.\u003C\u002Fp>\u003Cp>Друга причина гірша: міграція. Ви перейменували колонку, застосували міграцію, і поки новий образ збирається, старий код продовжує писати в колонку, якої вже немає. Помилки в логах, дані втрачені.\u003C\u002Fp>\u003Ch2 id=\"migrations\">Міграції, сумісні в обидва боки\u003C\u002Fh2>\u003Cp>Це найважливіша частина, і вона не про інфраструктуру. Правило одне: \u003Cstrong>міграція має працювати і зі старим кодом, і з новим\u003C\u002Fstrong>. З цього випливає expand\u002Fcontract у три релізи:\u003C\u002Fp>\u003Col>\u003Cli>\u003Cstrong>Expand.\u003C\u002Fstrong> Додаєте нову колонку, nullable, з дефолтом. Старий код її не бачить і не ламається. Новий код пише в обидві.\u003C\u002Fli>\u003Cli>\u003Cstrong>Migrate.\u003C\u002Fstrong> Бекфіл даних фоновою задачею, не в міграції. Мільйон рядків у міграції — це блокування таблиці й той самий простій, тільки під іншою назвою.\u003C\u002Fli>\u003Cli>\u003Cstrong>Contract.\u003C\u002Fstrong> Наступним релізом прибираєте стару колонку, коли жоден інстанс уже її не читає.\u003C\u002Fli>\u003C\u002Fol>\u003Cp>Три деплої замість одного здаються надмірними, поки ви вперше не відкотите реліз о другій ночі. Перейменування колонки одним кроком — це деплой, який неможливо відкотити: міграцію вниз ніхто ніколи не тестував.\u003C\u002Fp>\u003Cblockquote>\u003Cp>Міграція, яку не можна відкотити, — це не міграція, а односторонні двері. Проходьте в них свідомо, а не випадково.\u003C\u002Fp>\u003C\u002Fblockquote>\u003Ch2 id=\"order\">Правильний порядок кроків\u003C\u002Fh2>\u003Cp>Порядок має значення більше, ніж інструмент:\u003C\u002Fp>\u003Cpre tabindex=\"0\" role=\"region\">\u003Ccode>1. build       зібрати новий образ (старий продовжує обслуговувати трафік)\n2. migrate     застосувати сумісні міграції\n3. start       підняти новий контейнер поруч зі старим\n4. wait        чекати, поки \u002Fhealth\u002Fready віддасть 200\n5. switch      перемкнути nginx upstream\n6. drain       дати старому 10 секунд дообслужити запити\n7. stop        зупинити старий контейнер\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>Кроки 3–5 — це те, що docker compose сам не робить. Найпростіший спосіб отримати їх без Kubernetes: два сервіси в compose (\u003Ccode>app_blue\u003C\u002Fcode> і \u003Ccode>app_green\u003C\u002Fcode>) і nginx, який дивиться на upstream з файлу, що підмінюється й перечитується через \u003Ccode>nginx -s reload\u003C\u002Fcode>. Reload у nginx не рве наявні з’єднання — старі воркери дообслуговують, нові беруть нову конфігурацію.\u003C\u002Fp>\u003Ch2 id=\"health\">Health-check, який каже правду\u003C\u002Fh2>\u003Cp>Найпоширеніша помилка — health-check, який повертає 200 одразу після старту процесу. Тоді ви перемикаєте трафік на контейнер, який ще не має з’єднання з базою, і отримуєте той самий простій, тільки тепер він виглядає як 500 замість 502.\u003C\u002Fp>\u003Cp>Розділяйте два ендпоїнти:\u003C\u002Fp>\u003Cul>\u003Cli>\u003Ccode>\u002Fhealth\u002Flive\u003C\u002Fcode> — процес живий. Якщо не відповідає, контейнер треба перезапустити.\u003C\u002Fli>\u003Cli>\u003Ccode>\u002Fhealth\u002Fready\u003C\u002Fcode> — з’єднання з базою є, Redis відповідає, черга доступна. Якщо не відповідає, контейнер треба прибрати з балансувальника, але \u003Cem>не\u003C\u002Fem> перезапускати.\u003C\u002Fli>\u003C\u002Ful>\u003Cp>Плутанина між ними — причина каскадних падінь: база гальмує, readiness падає, оркестратор перезапускає всі контейнери, і при старті вони одночасно б’ють у базу, яка вже й так гальмувала.\u003C\u002Fp>\u003Ch2 id=\"warmup\">Прогрів\u003C\u002Fh2>\u003Cp>SSR-застосунок після старту компілює маршрути на першому запиті, а кеш контенту порожній. Перший користувач після деплою отримує сторінку за 3 секунди замість 300 мілісекунд. Формально простою немає — фактично сайт повільний рівно тоді, коли на нього дивляться.\u003C\u002Fp>\u003Cp>Лікується це десятьма рядками: після того як контейнер відповів на readiness, але до перемикання трафіку, зробіть кілька запитів до найважливіших сторінок і до ендпоїнтів, які наповнюють кеш. Прогрів кешу — це частина деплою, а не оптимізація на потім.\u003C\u002Fp>\u003Ch2 id=\"rollback\">Відкат, який справді працює\u003C\u002Fh2>\u003Cp>Відкат — це не «повернути попередній образ». Це «повернути попередній образ і переконатися, що він працює з поточною схемою бази». Саме тому expand\u002Fcontract важливіший за скрипт деплою: якщо міграції сумісні в обидва боки, відкат — це одна команда. Якщо ні — це відновлення з бекапу.\u003C\u002Fp>\u003Cp>Мінімум, який варто мати: тег образу з SHA коміту (не \u003Ccode>latest\u003C\u002Fcode>), збережений попередній тег, і смоук-тест після перемикання. Якщо смоук-тест червоний — перемикаємо upstream назад, поки старий контейнер ще живий. Тому крок 7 і стоїть в кінці.\u003C\u002Fp>\u003Ch2 id=\"checklist\">Що зробити цього тижня\u003C\u002Fh2>\u003Cul>\u003Cli>Розділіть liveness і readiness, якщо у вас один \u003Ccode>\u002Fhealth\u003C\u002Fcode>.\u003C\u002Fli>\u003Cli>Перевірте останні п’ять міграцій: чи пережив би їх старий код?\u003C\u002Fli>\u003Cli>Додайте прогрів після старту й смоук-тест після перемикання.\u003C\u002Fli>\u003Cli>Замініть \u003Ccode>latest\u003C\u002Fcode> на тег із SHA коміту.\u003C\u002Fli>\u003C\u002Ful>\u003Cp>Це чотири невеликі зміни, і разом вони дають більше, ніж перехід на оркестратор, який доведеться ще й обслуговувати.\u003C\u002Fp>","Деплой без простою на одному сервері — практичний посібник","Zero-downtime деплой без Kubernetes: сумісні в обидва боки міграції, розділення liveness і readiness, прогрів кешу, смоук-тест і відкат на docker compose.",[269,270,271,272],"Zero-downtime визначається міграціями, а не оркестратором","Expand \u002F migrate \u002F contract — три релізи замість одного ризикованого","Liveness і readiness — різні ендпоїнти з різними наслідками","Прогрів кешу — частина деплою, інакше перший користувач бачить повільний сайт",[274,277],{"q":275,"a":276},"Чи можна досягти нуля простою на одному сервері?","Так. Потрібні два контейнери, які працюють паралельно кілька секунд, nginx з reload замість restart і readiness-check, який чекає на базу. Оркестратор дає це «з коробки», але сам механізм не залежить від нього.",{"q":278,"a":279},"Скільки часу займає налаштування?","Скрипт деплою з blue\u002Fgreen і прогрівом — приблизно день роботи. Привести міграції до expand\u002Fcontract — це зміна звички команди, а не разова задача: перші кілька релізів здаються повільнішими, далі це стає нормою.",{"slug":281,"name":282,"role":283,"avatarUrl":284,"photoUrl":285},"yevhenii-kirianov","Євгеній","Фронтенд і фулстек, інтерфейси, продуктова розробка","\u002Fmedia\u002Fteam\u002Fyevhenii-avatar.webp","\u002Fmedia\u002Fteam\u002Fyevhenii.webp",[287,298,310],{"slug":288,"category":289,"tags":290,"coverImageUrl":6,"coverImageAlt":258,"readingMinutes":293,"featured":103,"publishedAt":294,"updatedAt":295,"locale":11,"title":296,"excerpt":297},"architecture-small-team","architecture",[289,291,292],"monolith","team",11,"2026-06-24T09:00:00.000Z","2026-08-28T15:57:52.490Z","Архітектура для команди з трьох людей","Мікросервіси коштують команді втричі дорожче, ніж здається на діаграмі. Що обрати, коли розробників троє, а продукт має жити роками: модульний моноліт, спільні контракти й межі, які видно в коді.",{"slug":299,"category":252,"tags":300,"coverImageUrl":6,"coverImageAlt":258,"readingMinutes":305,"featured":103,"publishedAt":306,"updatedAt":307,"locale":11,"title":308,"excerpt":309},"monitoring-for-three",[301,302,303,304],"monitoring","alerts","prometheus","uptime",6,"2026-04-30T09:00:00.000Z","2026-08-28T15:57:52.760Z","Моніторинг для команди з трьох: мінімум, який справді працює","Не потрібен повний стек спостережуваності, щоб перестати дізнаватись про падіння від клієнтів. Чотири сигнали, три канали сповіщень і одне правило, яке рятує від вигорання на алертах.",{"slug":311,"category":312,"tags":313,"coverImageUrl":6,"coverImageAlt":258,"readingMinutes":317,"featured":103,"publishedAt":318,"updatedAt":319,"locale":11,"title":320,"excerpt":321},"website-cost-2026","money",[314,315,316],"budget","estimation","process",7,"2026-07-11T09:00:00.000Z","2026-08-28T15:57:52.399Z","Скільки коштує сайт у 2026 році і чому вилка така широка","Одна й та сама фраза «нам потрібен сайт» означає роботу на тиждень і роботу на три місяці. Розбираємо, з чого складається ціна, які пункти зникають з дешевих пропозицій і що спитати перед підписанням."]