[{"data":1,"prerenderedAt":669},["ShallowReactive",2],{"site-uk":3,"page-uk-keisy":129,"cases-uk":177},{"id":4,"contacts":5,"cta":15,"extension":18,"footer":19,"meta":68,"nav":69,"serviceUi":84,"stem":127,"__hash__":128},"site_uk\u002Fuk\u002Fsite.yml",{"email":6,"telegram":7,"viber":8,"whatsapp":9,"hours":10,"city":11,"linkedin":12,"github":13,"founderLinkedin":14,"founderGithub":14},"hello@tochnodev.com","https:\u002F\u002Ft.me\u002F","viber:\u002F\u002Fchat?number=","https:\u002F\u002Fwa.me\u002F","Пн–Пт 10:00–19:00, Київ","Київ","https:\u002F\u002Fwww.linkedin.com\u002F","https:\u002F\u002Fgithub.com\u002F","",{"label":16,"to":17},"Обговорити проєкт","\u002Fbryf","yml",[20,35,56],{"title":21,"links":22},"Послуги",[23,26,29,32],{"label":24,"to":25},"Розробка сайтів","\u002Fposluhy\u002Frozrobka-saitiv",{"label":27,"to":28},"Інтернет-магазин","\u002Fposluhy\u002Finternet-mahazyn",{"label":30,"to":31},"QA-аудит","\u002Fposluhy\u002Fqa-audyt-internet-mahazynu",{"label":33,"to":34},"Tech Lead","\u002Fposluhy\u002Ftech-lead",{"title":36,"links":37},"Компанія",[38,41,44,47,50,53],{"label":39,"to":40},"Про нас","\u002Fpro-nas",{"label":42,"to":43},"Процес","\u002Fproces",{"label":45,"to":46},"Кейси","\u002Fkeisy",{"label":48,"to":49},"Блог","\u002Fblog",{"label":51,"to":52},"FAQ","\u002Ffaq",{"label":54,"to":55},"Глосарій","\u002Fhlosarii",{"title":57,"links":58},"Юридичне",[59,62,65],{"label":60,"to":61},"Політика конфіденційності","\u002Fpolityka-konfidentsiinosti",{"label":63,"to":64},"Cookies","\u002Fcookies",{"label":66,"to":67},"Умови співпраці","\u002Fumovy",{},[70,72,75,78,79,80,81],{"label":21,"to":71},"\u002Fposluhy",{"label":73,"to":74},"Під ключ","\u002Fpid-kliuch",{"label":76,"to":77},"Ціни","\u002Ftsiny",{"label":45,"to":46},{"label":42,"to":43},{"label":48,"to":49},{"label":82,"to":83},"Контакти","\u002Fkontakty",{"whoFits":85,"whatsIncluded":86,"pricingEyebrow":87,"pricingAnchor":88,"allPrices":89,"sampleResult":90,"process":91,"details":92,"faqEyebrow":51,"faqTitle":93,"related":94,"seeAlso":95,"seeAlsoCases":45,"seeAlsoPosts":96,"price":97,"crumbServices":21,"flagship":98,"ctaLead":116,"ctaSteps":117,"needs":121},"КОМУ ПІДХОДИТЬ","ЩО ВХОДИТЬ","ЦІНИ","Формати і ціни","Усі ціни","ЗРАЗОК РЕЗУЛЬТАТУ","ПРОЦЕС","ДЕТАЛЬНІШЕ","Питання про послугу","РАЗОМ З ЦИМ ЗАМОВЛЯЮТЬ","ДИВІТЬСЯ ТАКОЖ","Статті","ціна",{"crumb":30,"expressCheck":99,"badge":100,"discuss":101,"bookDays":102,"sampleAria":103,"reportTitle":104,"steps":105,"actual":106,"expected":107,"impact":108,"colAction":109,"colExpected":110,"colStatus":111,"top3":112,"screenshot":113,"faqTitle":114,"related":115},"Безкоштовний експрес-чек","ФЛАГМАН","Обговорити","Забронювати дні","Зразок","Так виглядає звіт, який ви отримаєте","КРОКИ","ФАКТИЧНО","ОЧІКУВАНО","ВПЛИВ","ДІЯ","ОЧІКУВАНИЙ РЕЗУЛЬТАТ","СТАТУС","ТОП-3 ДО ВИПРАВЛЕННЯ","скрін звіту","Питання про тестування","ПІСЛЯ АУДИТУ ЗАЗВИЧАЙ ПОТРІБНО","Відповімо за 2 робочі години. Оцінка з вилкою ціни і термінів — за 1 день.",[118,119,120],"Відповідь за 2 години","Дзвінок 20 хвилин","Оцінка за 1 день",[122,27,30,123,33,124,125,126],"Сайт під ключ","Тестування","Дизайн","Розробник у команду","Підтримка","uk\u002Fsite","AZ3xYwhvXjI6pHOp3sjZaJJhSwA1uGWFfKEpVcNpEco",{"id":130,"blocks":131,"extension":18,"meta":172,"seoDescription":173,"seoTitle":174,"stem":175,"__hash__":176},"pages_uk\u002Fuk\u002Fpages\u002Fkeisy.yml",{"breadcrumb":45,"hero":132,"filters":148,"expressCta":160,"cta":165},{"h1":133,"lead":134,"legend":135},"Кейси, демо й аудити","Ми молода студія, тож чесно позначаємо кожну роботу: реальний проєкт, демо, яке зробили самі, аудит чи концепт. Код демо-проєктів відкритий.",[136,139,142,145],{"type":137,"text":138},"real","робота для клієнта",{"type":140,"text":141},"demo","зробили самі, код відкритий",{"type":143,"text":144},"audit","звіт про чужий сайт",{"type":146,"text":147},"concept","дизайн без замовлення",[149,152,154,156,158],{"id":150,"label":151},"all","Усі",{"id":137,"label":153},"Реальні",{"id":140,"label":155},"Демо",{"id":143,"label":157},"Аудити",{"id":146,"label":159},"Дизайн-концепти",{"title":161,"text":162,"to":163,"label":164},"Хочете такий самий звіт — про ваш сайт?","Безкоштовний експрес-чек за 48 годин: 10–15 ключових проблем з пріоритетами.","\u002Fposluhy\u002Fqa-audyt-internet-mahazynu#pakety","Отримати експрес-чек",{"title":166,"text":167,"steps":168,"needs":169},"Хочете бути наступним кейсом","Розкажіть про задачу — відповімо за 2 робочі години.",[118,119,120],[122,27,30,170,171],"Технічний аудит","Інше",{},"Реальні проєкти, відкриті демо, QA-аудити та дизайн-концепти студії Tochno. Код демо-проєктів відкритий, кожна робота підписана чесно.","Кейси, демо й аудити — Tochno.","uk\u002Fpages\u002Fkeisy","y5IWsXTqsOEstuzE3sszHCQm4U-_zUzXU4BhK3FLjXE",[178,276,360,438,514,591],{"id":179,"title":180,"body":181,"client":188,"cover":189,"coverItems":190,"coverKind":196,"date":197,"description":14,"duration":198,"extension":199,"gallery":200,"industry":204,"key":188,"kpis":205,"kpisNote":222,"lead":223,"lessons":224,"limits":228,"liveUrl":188,"meta":233,"navigation":234,"note":235,"path":236,"problem":237,"repoUrl":188,"results":238,"seo":239,"seoDescription":240,"seoTitle":241,"service":242,"serviceLabel":243,"slug":244,"solution":245,"solutions":246,"stack":263,"stem":272,"tag":273,"team":274,"type":140,"__hash__":275},"cases_uk\u002Fuk\u002Fcases\u002Fdemo-internet-mahazyn-laravel-nuxt.md","Інтернет-магазин на Laravel + Nuxt",{"type":182,"value":183,"toc":184},"minimark",[],{"title":14,"searchDepth":185,"depth":186,"links":187},2,3,[],null,"Ілюстрація: каталог демо-магазину в браузері і мобільний checkout",[191,192,193,194,195],"demo-shop.tochnodev.com","1 290 грн","Оформлення","НП · відділення №12","Оплатити LiqPay","shop","2026-09-01","6 тижнів","md",[201,202,203],"головний скрін: каталог на desktop + mobile","скрін: мобільний checkout","скрін: адмінка замовлень","E-commerce",[206,210,214,218],{"label":207,"value":208,"note":209},"LIGHTHOUSE MOBILE","96","[PASS] ціль 90+",{"label":211,"value":212,"note":213},"LCP","1,4 с","[PASS] норма 2,5 с",{"label":215,"value":216,"note":217},"CLS","0,01","[PASS] норма 0,1",{"label":219,"value":220,"note":221},"АВТОТЕСТИ","24","[PASS] 24 \u002F 24","Замір: PageSpeed Insights, мобільний профіль, медіана 5 запусків. Дата: 09.2026.","Показуємо, як ми будуємо магазин під ключ: від каталогу на 2 000 товарів до оплати й доставки — з тестами на кожен ключовий сценарій.",[225,226,227],"Раніше підключили б реальну Нову Пошту замість мока — інтеграція забрала на 3 дні більше, ніж планували.","Писали б автотести checkout з першого спринту, а не з третього: два регреси можна було не пропустити.","Менше кастомних компонентів в адмінці — готові рішення Filament покрили б 80% потреб.",[229,230,231,232],"Бюджет часу — 6 тижнів, як у реального малого магазину","Мобільний трафік 75%+: checkout спершу для телефона","Хостинг — звичайний VPS за $10\u002Fміс, без CDN-магії","Адмінку має вести людина без технічної освіти",{},true,"Це демо-проєкт: ми зробили його самі, щоб показати підхід і якість коду. Клієнта і продажів немає — метрики виміряні на тестових даних.","\u002Fuk\u002Fcases\u002Fdemo-internet-mahazyn-laravel-nuxt","Зібрати магазин, на якому потенційний клієнт може сам перевірити, як ми працюємо: швидкість, мобільний checkout, адмінку і якість коду. Сценарій — магазин товарів для дому з каталогом на 2 000 позицій.",[],{"title":180,"description":14},"Відкритий демо-магазин: каталог на 2 000 товарів, LiqPay, Нова Пошта, адмінка. Lighthouse mobile 96, LCP 1,4 с.","Демо-магазин на Laravel + Nuxt — Tochno.","internet-mahazyn","Магазин під ключ","demo-internet-mahazyn-laravel-nuxt","Розділили магазин на Nuxt-фронтенд зі статичною генерацією каталогу і Laravel API для кошика, замовлень і адмінки. Кешуємо фільтри на рівні бази, а не фронтенду.",[247,251,255,259],{"icon":248,"title":249,"text":250},"bolt","Статичний каталог","Nuxt генерує сторінки товарів, оновлення — через вебхук з адмінки.",{"icon":252,"title":253,"text":254},"filter","Фільтри без затримки","Агрегати в PostgreSQL, відповідь API до 80 мс на 2 000 товарів.",{"icon":256,"title":257,"text":258},"credit-card","Checkout в 1 екран","LiqPay і Нова Пошта з автопідказкою відділень.",{"icon":260,"title":261,"text":262},"test-pipe","Автотести в CI","24 Playwright-сценарії запускаються перед кожним деплоєм.",[264,265,266,267,268,269,270,271],"Laravel 11 — API, адмінка","Nuxt 3 — фронтенд","PostgreSQL — дані","Redis — черги, кеш","Playwright — автотести","GitHub Actions — CI","Figma — дизайн","VPS — хостинг","uk\u002Fcases\u002Fdemo-internet-mahazyn-laravel-nuxt","E-COMMERCE","Тех-лід, QA, дизайнер","cXH_9_nF9dlZkt820DzreLhvMB8v21wfz-EOBT4YvmA",{"id":277,"title":278,"body":279,"client":188,"cover":283,"coverItems":284,"coverKind":293,"date":294,"description":14,"duration":295,"extension":199,"gallery":296,"industry":297,"key":188,"kpis":298,"kpisNote":311,"lead":312,"lessons":313,"limits":317,"liveUrl":188,"meta":321,"navigation":234,"note":322,"path":323,"problem":324,"repoUrl":188,"results":325,"seo":326,"seoDescription":327,"seoTitle":328,"service":329,"serviceLabel":330,"slug":331,"solution":332,"solutions":333,"stack":350,"stem":356,"tag":357,"team":358,"type":143,"__hash__":359},"cases_uk\u002Fuk\u002Fcases\u002Fqa-audyt-mahazynu-odiahu.md","Магазин одягу: 47 багів, 6 критичних",{"type":182,"value":280,"toc":281},[],{"title":14,"searchDepth":185,"depth":186,"links":282},[],"Ілюстрація: сторінка звіту QA-аудиту з багами за пріоритетами",[285,286,287,288,289,290,291,292],"QA-аудит · магазин одягу","47 багів · 4 дні","CRIT|iOS Safari: «Оплатити» не реагує після зміни доставки","CRIT|iOS: кошик очищується після повернення з оплати","MAJOR|Фільтр розміру скидається при пагінації","MAJOR|Промокод приймається двічі","MINOR|Обрізаний текст кнопки на 320 px","PASS|Пошук і картка товару — без критичних","qa-report","2026-08-01","4 дні",[],"Мода та одяг",[299,302,306,309],{"label":300,"value":301},"БАГІВ","47",{"label":303,"value":304,"note":305},"КРИТИЧНИХ","6","усі — checkout на iOS",{"label":307,"value":308},"ПУНКТІВ ЧЕК-ЛИСТА","150+",{"label":310,"value":295},"РОБОТА","Пріоритети — за впливом на замовлення: критичний баг блокує покупку або оплату.","Демонстраційний QA-аудит відкритого магазину. Усі критичні — в checkout на iOS.",[314,315,316],"Починали б одразу з checkout на iOS — там був увесь критичний ризик, а ми дійшли туди на другий день.","Записували б відео для кожного критичного бага, а не лише скріншоти: так розробнику швидше відтворити.","Додали б короткий повторний прогін після виправлень — без нього власник не бачить, що баги справді закриті.",[318,319,320],"Тільки публічна частина сайту, без доступу до адмінки і коду","Без реальних оплат — checkout перевіряли до кроку платежу","4 робочі дні на весь аудит і звіт",{},"Демонстраційний аудит: магазин не був нашим клієнтом, назву не публікуємо. Перевіряли лише те, що бачить звичайний покупець, — без пошуку вразливостей.","\u002Fuk\u002Fcases\u002Fqa-audyt-mahazynu-odiahu","Перевірити відкритий інтернет-магазин одягу на баги: від каталогу до оплати, з акцентом на мобільні сценарії. Саме на телефоні покупці магазинів одягу найчастіше оформлюють замовлення — і найчастіше кидають кошик.",[],{"title":278,"description":14},"Демонстраційний QA-аудит відкритого магазину одягу. Усі критичні баги — в checkout на iOS. Звіт за 4 дні.","QA-аудит магазину одягу: 47 багів — Tochno.","qa-audyt-internet-mahazynu","QA-аудит інтернет-магазину","qa-audyt-mahazynu-odiahu","Провели QA-аудит за чек-листом 150+ пунктів: знайшли 47 багів, 6 із них критичні — усі в checkout на iOS. Кожен баг — з кроками відтворення, очікуваним і фактичним результатом, пристроєм і пріоритетом.",[334,338,342,346],{"icon":335,"title":336,"text":337},"list-check","Чек-лист 150+ пунктів","Каталог, фільтри, картка товару, кошик, checkout, форми, пошта.",{"icon":339,"title":340,"text":341},"device-mobile","Реальні пристрої","iPhone і Android у живих браузерах, а не лише емулятор у DevTools.",{"icon":343,"title":344,"text":345},"bug","Баг-репорти з пріоритетами","Критичні, значні та дрібні — що виправляти першим, а що можна відкласти.",{"icon":347,"title":348,"text":349},"file-text","Звіт для власника","Короткий підсумок мовою бізнесу і детальна таблиця для розробників.",[351,352,353,354,355],"Чек-лист 150+ — каталог, кошик, checkout","iOS Safari, Android Chrome — реальні пристрої","Playwright — повтор сценаріїв","Lighthouse — швидкість і доступність","Jira-формат — баг-репорти","uk\u002Fcases\u002Fqa-audyt-mahazynu-odiahu","QA","QA-інженер, тех-лід (рев'ю звіту)","ZjcLmctsg8NkHAav6j8cWU6-wYTguQo-U1QmW55RikU",{"id":361,"title":362,"body":363,"client":367,"cover":368,"coverItems":369,"coverKind":377,"date":378,"description":14,"duration":379,"extension":199,"gallery":380,"industry":204,"key":188,"kpis":381,"kpisNote":390,"lead":391,"lessons":392,"limits":396,"liveUrl":188,"meta":401,"navigation":234,"note":402,"path":403,"problem":404,"repoUrl":188,"results":405,"seo":406,"seoDescription":407,"seoTitle":408,"service":409,"serviceLabel":410,"slug":411,"solution":412,"solutions":413,"stack":428,"stem":435,"tag":273,"team":436,"type":137,"__hash__":437},"cases_uk\u002Fuk\u002Fcases\u002Fintehratsiia-1s-nova-poshta.md","Інтеграція магазину з 1С і Новою Поштою",{"type":182,"value":364,"toc":365},[],{"title":14,"searchDepth":185,"depth":186,"links":366},[],"Під NDA","Схема інтеграції: магазин, черга, 1С і Нова Пошта (без даних клієнта)",[370,371,372,373,374,375,376],"Laravel-магазин","Черга · Redis","1С","Нова Пошта","замовлення","залишки","ТТН і статуси","integration","2026-07-01","3 тижні",[],[382,386],{"label":383,"value":384,"note":385},"ЕКОНОМІЯ ЧАСУ","−6 год \u002F тиж.","[PASS] ручний експорт прибрано",{"label":387,"value":388,"note":389},"РОЗБІЖНОСТЕЙ ЗАЛИШКІВ","0","[PASS] після запуску","Дані клієнта: оцінка часу менеджерів до і після запуску, звірка залишків за перший місяць.","Клієнт під NDA. Синхронізація залишків і статусів замовлень замість ручного експорту.",[393,394,395],"Почали б із журналу синхронізацій — він найбільше допоміг розбирати спірні випадки з менеджерами.","Раніше домовилися б про тестову копію 1С: частину сценаріїв перевіряли на робочій базі вночі.","Додали б сповіщення в Telegram про збої синхронізації з першого релізу, а не з другого.",[397,398,399,400],"1С залишається головною системою обліку — її логіку не змінюємо","Магазин працює без простою під час впровадження","API 1С відповідає повільно і буває недоступним","Менеджери мають бачити, що і коли синхронізувалося",{},"Реальний проєкт, клієнт під NDA: без назви, скріншотів і даних клієнта. Схема на обкладинці — узагальнена.","\u002Fuk\u002Fcases\u002Fintehratsiia-1s-nova-poshta","Клієнт вручну вивантажував залишки і статуси замовлень між магазином і 1С — це забирало години щотижня і призводило до розбіжностей: товар продавався, коли його вже не було на складі, а статуси доставки менеджери оновлювали з кабінету Нової Пошти вручну.",[],{"title":362,"description":14},"Реальний проєкт (клієнт під NDA): синхронізація залишків і статусів замовлень замість ручного експорту.","Інтеграція магазину з 1С і Новою Поштою — Tochno.","laravel-rozrobka","Backend \u002F Laravel","intehratsiia-1s-nova-poshta","Побудували чергову синхронізацію залишків і статусів замовлень між Laravel-магазином і 1С через API, без ручного експорту. Кожна операція — окрема задача в черзі з повторами, а статуси доставки підтягуються з API Нової Пошти автоматично.",[414,418,422,425],{"icon":415,"title":416,"text":417},"refresh","Залишки за розкладом","Фонова задача забирає зміни залишків з 1С і оновлює лише змінені товари.",{"icon":419,"title":420,"text":421},"arrows-exchange","Статуси в обидва боки","Нове замовлення одразу йде в 1С, зміна статусу в 1С повертається в магазин.",{"icon":423,"title":373,"text":424},"truck-delivery","ТТН створюється із замовлення, статус доставки оновлюється без участі менеджера.",{"icon":335,"title":426,"text":427},"Журнал і повтори","Кожна синхронізація в журналі; збій API — повтор, а не втрачене замовлення.",[429,430,431,432,433,434],"Laravel — магазин, API інтеграції","Queues — фонові задачі, повтори","Redis — черги","1С — облік і залишки","Нова Пошта API — ТТН і статуси","PostgreSQL — журнал синхронізацій","uk\u002Fcases\u002Fintehratsiia-1s-nova-poshta","Тех-лід, backend-розробник, QA","OwoJy2MJHZduaARlBpcfDryIB9TVJ0Un3hjsW_9G-H8",{"id":439,"title":440,"body":441,"client":188,"cover":445,"coverItems":446,"coverKind":146,"date":454,"description":14,"duration":455,"extension":199,"gallery":456,"industry":457,"key":188,"kpis":458,"kpisNote":465,"lead":466,"lessons":467,"limits":471,"liveUrl":188,"meta":476,"navigation":234,"note":477,"path":478,"problem":479,"repoUrl":188,"results":480,"seo":481,"seoDescription":482,"seoTitle":483,"service":484,"serviceLabel":485,"slug":486,"solution":487,"solutions":488,"stack":505,"stem":510,"tag":511,"team":512,"type":146,"__hash__":513},"cases_uk\u002Fuk\u002Fcases\u002Fredyzain-saitu-stomatolohii.md","Редизайн сайту стоматологічної клініки",{"type":182,"value":442,"toc":443},[],{"title":14,"searchDepth":185,"depth":186,"links":444},[],"Ілюстрація: концепт головної сторінки клініки і форми запису на телефоні",[447,448,449,450,451,452,453],"Dentaline","Лікування без болю — запис онлайн","Записатися","1 · Послуга: гігієна","2 · Лікар і час","3 · Контакти","Підтвердити запис","2026-06-01","2 тижні",[],"Медицина \u002F стоматологія",[459,462],{"label":460,"value":461},"КРОКИ ДО ЗАПИСУ","3",{"label":463,"value":464},"ЕКРАНИ","2","Це параметри концепту, а не виміряні результати: конверсію можна оцінити лише на реальному сайті.","Концепт першого екрана і запису на прийом. Не замовлення — ініціативна робота.",[468,469,470],"Протестували б прототип на 5 реальних пацієнтах до фінального UI — це дешевше, ніж переробляти макети.","Раніше продумали б сценарій «немає вільного часу» — у першій версії він вів у глухий кут.","Збирали б UI-кіт паралельно з макетами, а не після них.",[472,473,474,475],"Ініціативна робота — без доступу до реальної аналітики клініки","Мобільний сценарій першим: більшість пацієнтів шукає клініку з телефона","Форма запису — максимум 3 кроки","Кольори і контраст за WCAG AA для людей старшого віку",{},"Дизайн-концепт, не на замовлення: ми зробили його самі, щоб показати підхід до UX. Назва клініки і тексти — вигадані для прикладу.","\u002Fuk\u002Fcases\u002Fredyzain-saitu-stomatolohii","Показати, як спростити запис на прийом на сайті стоматологічної клініки: менше кроків, зрозуміліше на мобільному. На типових сайтах клінік запис — це довга форма або лише номер телефону, і пацієнт іде до конкурента, який дозволяє записатися онлайн.",[],{"title":440,"description":14},"Концепт першого екрана і запису на прийом стоматологічної клініки. Ініціативна робота, не замовлення клієнта.","Концепт сайту стоматологічної клініки — Tochno.","ui-ux-dyzain","UI\u002FUX дизайн","redyzain-saitu-stomatolohii","Розробили концепт головної сторінки і форми запису в 3 кроки на 2 екранах — ініціативна робота поза замовленням. На першому екрані — послуги з цінами «від» і кнопка запису, далі пацієнт обирає послугу, лікаря та час.",[489,493,497,501],{"icon":490,"title":491,"text":492},"layout","Перший екран","Що лікуємо, ціни «від», адреса і кнопка запису — без прокрутки на телефоні.",{"icon":494,"title":495,"text":496},"calendar","Запис у 3 кроки","Послуга → лікар → вільний час. Телефон — лише на останньому кроці.",{"icon":498,"title":499,"text":500},"accessible","Доступність","Великі цілі для дотику, контраст AA, зрозумілі стани помилок.",{"icon":502,"title":503,"text":504},"components","UI-кіт","Кнопки, поля, картки лікарів — готові до передачі в розробку.",[506,507,508,509],"Figma — макети і прототип","Auto layout — адаптив 360–1440 px","UI-кіт — кнопки, форми, стани","WCAG 2.2 AA — контраст і розміри","uk\u002Fcases\u002Fredyzain-saitu-stomatolohii","UI\u002FUX","UI\u002FUX-дизайнер, тех-лід","yLeTrpVqxXFTdogY_ElHQus9tMPBW0VhCAbDCYqZuYw",{"id":515,"title":516,"body":517,"client":188,"cover":521,"coverItems":522,"coverKind":532,"date":533,"description":14,"duration":455,"extension":199,"gallery":534,"industry":535,"key":188,"kpis":536,"kpisNote":543,"lead":544,"lessons":545,"limits":549,"liveUrl":188,"meta":553,"navigation":234,"note":554,"path":555,"problem":556,"repoUrl":188,"results":557,"seo":558,"seoDescription":559,"seoTitle":560,"service":561,"serviceLabel":562,"slug":563,"solution":564,"solutions":565,"stack":581,"stem":587,"tag":588,"team":589,"type":143,"__hash__":590},"cases_uk\u002Fuk\u002Fcases\u002Ftekhnichnyi-audyt-laravel-b2b.md","Технічний аудит Laravel-проєкту B2B",{"type":182,"value":518,"toc":519},[],{"title":14,"searchDepth":185,"depth":186,"links":520},[],"Ілюстрація: фрагмент коду з N+1-запитом із технічного аудиту",[523,524,525,526,527,528,529,530,531],"app\u002FHttp\u002FControllers\u002FReportController.php","public function index()","{","    $orders = Order::latest()->get();","!    foreach ($orders as $order) {","!        $order->customer->name; \u002F\u002F N+1","    }","    \u002F\u002F fix: Order::with('customer')","}","code-audit","2026-05-01",[],"B2B \u002F SaaS",[537,540],{"label":538,"value":539},"N+1 ЗАПИТІВ","312",{"label":541,"value":542},"РЕКОМЕНДАЦІЙ","14","N+1 — кількість зайвих однотипних запитів, знайдених профілюванням ключових сторінок.","Оцінка коду від підрядника перед продовженням контракту: архітектура, безпека, запити.",[546,547,548],"Попросили б доступ до логів продакшну з першого дня — частину повільних сценаріїв видно лише на реальних даних.","Зустрічалися б з підрядником на початку аудиту, а не в кінці: частина рішень мала історичні причини.","Давали б оцінку рекомендацій у вилці годин одразу в першій версії звіту.",[550,551,552],"Доступ лише до репозиторію і копії бази, без продакшн-серверів","Висновок потрібен до дати продовження контракту","Звіт читатиме не технічний власник — потрібен підсумок без жаргону",{},"Аудит під NDA: назву клієнта, код і скріншоти не публікуємо. Фрагмент коду на обкладинці — ілюстрація типової проблеми, не код клієнта.","\u002Fuk\u002Fcases\u002Ftekhnichnyi-audyt-laravel-b2b","Клієнту потрібно було вирішити, чи продовжувати контракт із підрядником — для цього оцінили якість Laravel-коду B2B-проєкту. Скарги були типові: сторінки звітів відкривалися повільно, нові функції ламали старі, а оцінки підрядника постійно зростали.",[],{"title":516,"description":14},"Оцінка коду підрядника перед продовженням контракту: архітектура, безпека, 312 N+1-запитів, 14 рекомендацій.","Технічний аудит Laravel-проєкту B2B — Tochno.","tekhnichnyi-audyt","Технічний аудит коду","tekhnichnyi-audyt-laravel-b2b","Провели технічний аудит: перевірили архітектуру, безпеку і продуктивність запитів, знайшли 312 N+1-запитів і дали 14 рекомендацій. Кожна рекомендація — з пріоритетом, оцінкою годин і ризиком, якщо її не виконати.",[566,570,574,578],{"icon":567,"title":568,"text":569},"sitemap","Архітектура","Структура модулів, бізнес-логіка в контролерах, дублювання, покриття тестами.",{"icon":571,"title":572,"text":573},"shield-lock","Безпека","Авторизація, валідація введення, масове присвоєння, вразливі залежності.",{"icon":575,"title":576,"text":577},"database","Запити до бази","Профілювання ключових сторінок: N+1, відсутні індекси, важкі звіти.",{"icon":347,"title":579,"text":580},"Звіт для рішення","Підсумок для власника і 14 рекомендацій з пріоритетами для розробників.",[582,583,584,585,586],"Laravel — код проєкту","PostgreSQL — запити й індекси","Laravel Debugbar, Telescope — профілювання","PHPStan — статичний аналіз","composer audit — вразливі залежності","uk\u002Fcases\u002Ftekhnichnyi-audyt-laravel-b2b","CODE AUDIT","Тех-лід (PHP), QA","k2LFrWrG-XEE7DYaXtVWhNKp_tBbRJbWul38jnvF0AM",{"id":592,"title":593,"body":594,"client":188,"cover":598,"coverItems":599,"coverKind":608,"date":609,"description":14,"duration":610,"extension":199,"gallery":611,"industry":612,"key":188,"kpis":613,"kpisNote":620,"lead":621,"lessons":622,"limits":626,"liveUrl":188,"meta":631,"navigation":234,"note":632,"path":633,"problem":634,"repoUrl":188,"results":635,"seo":636,"seoDescription":637,"seoTitle":638,"service":639,"serviceLabel":24,"slug":640,"solution":641,"solutions":642,"stack":658,"stem":665,"tag":666,"team":667,"type":140,"__hash__":668},"cases_uk\u002Fuk\u002Fcases\u002Fdemo-lendinh-telegram-crm.md","Лендінг з формою в Telegram і CRM",{"type":182,"value":595,"toc":596},[],{"title":14,"searchDepth":185,"depth":186,"links":597},[],"Ілюстрація: лендінг із формою заявки і повідомлення в Telegram-боті",[600,601,602,603,604,605,606,607],"landing.tochnodev.com","Ремонт квартир під ключ","Ваше ім'я","Телефон або Telegram","Отримати розрахунок","tochno_leads_bot","Нова заявка з лендінгу","Олена · +380… · utm_source=google","landing","2026-04-01","1 тиждень",[],"Лендінги",[614,618],{"label":615,"value":616,"note":617},"ACCESSIBILITY","100","[PASS] ціль 95+",{"label":211,"value":619,"note":213},"0,9 с","Замір: Lighthouse, мобільний профіль, тестове розгортання на Vercel.","Шаблон лендінгу на Nuxt: форма з валідацією, заявки в Telegram-бот і CRM.",[623,624,625],"Одразу закладали б відправку в CRM через чергу з повторами, а не прямим запитом із форми.","Додали б резервний канал (email) із першого дня — Telegram-бот теж буває недоступним.","Підключали б аналітику подій форми до запуску реклами, а не після перших заявок.",[627,628,629,630],"Запуск за тиждень — як під реальну рекламну кампанію","Без платних конструкторів і сторонніх віджетів форми","Заявка не має губитися, навіть якщо CRM тимчасово недоступна","Захист від спаму без капчі, яка знижує конверсію",{},"Це демо-проєкт: ми зібрали його самі як шаблон для рекламних лендінгів. Клієнта немає — метрики виміряні на тестовому розгортанні.","\u002Fuk\u002Fcases\u002Fdemo-lendinh-telegram-crm","Показати, як швидко можна зібрати лендінг під рекламу з формою, яка одразу шле заявки в Telegram і CRM. Типова біль малого бізнесу: заявки з форми падають на пошту, їх бачать через пів дня, а частина губиться в спамі.",[],{"title":593,"description":14},"Шаблон лендінгу на Nuxt: форма з валідацією, заявки в Telegram-бот і CRM. Accessibility 100, LCP 0,9 с.","Демо-лендінг на Nuxt з формою в Telegram — Tochno.","rozrobka-saitiv","demo-lendinh-telegram-crm","Зібрали статичний лендінг на Nuxt і один серверний роут для форми. Ті самі правила валідації працюють у браузері й на сервері, заявка паралельно йде в Telegram-бот і CRM — збій одного каналу не блокує інший.",[643,646,650,654],{"icon":248,"title":644,"text":645},"Статичний лендінг","Сторінка генерується під час збірки — перший екран без очікування сервера.",{"icon":647,"title":648,"text":649},"forms","Одна схема валідації","Zod-схема спільна для браузера і сервера: помилки біля кожного поля.",{"icon":651,"title":652,"text":653},"brand-telegram","Заявка за секунди","Повідомлення в Telegram з контактом, текстом і UTM-мітками джерела.",{"icon":655,"title":656,"text":657},"shield-check","Антиспам без капчі","Honeypot-поле, time-trap і ліміт запитів з однієї IP-адреси.",[659,660,661,662,663,664],"Nuxt — SSG-лендінг","Nitro — серверний роут форми","Zod — валідація на клієнті й сервері","Telegram Bot API — сповіщення","CRM API — запис ліда","Vercel — хостинг","uk\u002Fcases\u002Fdemo-lendinh-telegram-crm","ЛЕНДІНГ","Розробник, дизайнер, QA","ezQXEWV0t0rCteSZgMpo9X2iOLAWvkmICVzde8kB31o",1794139962388]