Чотири вади вбивали виділення тексту на iOS — і кожна ховала наступну
Редактор Lexical у дравері vaul працював скрізь, крім живого айфона: повзунки виділення не тягнулись, прокрутка замикалась на краях, панель інструментів пірнала під клавіатуру. Здогадки не лікували нічого, бо єдиного винного не існувало — їх було четверо, незалежних, і кожен маскував наступного. Спрацював стенд бісекції: той самий каркас із перемикачем на кожного підозрюваного, перевірений на фізичному пристрої. Це повне полювання — href, що труїть виділення, обробники перетягування vaul, наш власний tap-focus, контейнер, що їде під пальцем, — плюс розтин замка прокрутки і три одноразові записи scrollTop, які зробили rubber-band рідним, включно з перехопленням свайпу посеред пружини.
Каскад агентів: термінал сам обирає того, хто зараз працює
Коли Claude частково відмовив і частина моделей перестала працювати, я спробував перейти на Gemini — і виявив, що мій фоллбек давно зламаний. Ось як зробити такий, що справді витримає.
system-droid: вартовий, який сам перевіряє і сам лікує мої системи
Мої локальні сервіси ламалися тихо: бриф не приходив, токени протухали, бекап завмирав — а я дізнавався останнім. Тож я зробив дроїда на launchd, який кожні дві години все перевіряє, лагодить, що може, через агента Claude, і пише мені лише тоді, коли справді потрібна людина.
Статична сторінка, яка насправді A/B-тест
A/B-тест сторінки зазвичай реалізують так, що вона злітає з CDN на рендер-на-кожен-запит. Але не обов'язково. Тримай усі варіанти повністю статичними, а рішення хай ухвалює proxy (перейменований middleware у Next.js) — через платформу для A/B-експериментів, за стабільним device id, і робить rewrite лише коли відвідувач не в control. URL не змінюється, CDN далі кешує, а гарячий шлях не платить нічого.
Деплой на Vercel із CI, коли автор коміту не член команди
Перенеси репо в GitHub-організацію — і Vercel тихо починає блокувати деплої: коміт «не вдалося зіставити з членом команди». Ось як я деплою через GitHub Actions і Vercel CLI: коміти все одно йдуть у мій GitHub-графік, дашборд показує, хто пушив, і я не купую seat на кожного контриб’ютора.
Next.js Memory Leak: Fetch + Standalone Mode — 2 роки без фіксу
Next.js патчить глобальний fetch та додає кеш-шар, який тече на кожному запиті. В Docker/K8s це призводить до OOM crash кожні кілька годин. Баг існує з Next.js 14 і досі не вирішений у 16.2.x.
Кілька акаунтів Claude Code на одному пристрої
Як використовувати два (або більше) акаунти Claude Code паралельно — особистий і корпоративний — з повною ізоляцією через одну змінну середовища.
Ліниве завантаження контенту блогу в SolidStart без втрати SSG
Твій блог, найпевніше, віддає тіло кожного поста в одному бандлі — мій розрісся до 2,88 MB, і його качали навіть на сторінці-списку, де потрібні лише заголовки. Ось як я виніс прозу кожного поста в лінивий чанк, що вантажиться на вимогу, зберігши повний серверний рендер кожної сторінки для SEO.
CRAFT: користуватись AI і не втратити навички
Назвати проблему й не дати рішення — це лише сіяти тривогу. Після поста про деградацію навичок через AI — ось рецепт: CRAFT, п'ять принципів (Challenge First, Review Adversarially, Ask Why Not What, Friction on Purpose, Test Your Understanding) під однією аксіомою: AI робить те, що ти опанував, ти робиш те, що ще вчиш. Практичний метод, який згадаєш під тиском, щоб користуватись AI щодня й не втратити навичку.
Один слухач замість клієнтського компонента на кожну кнопку
Щойно ви додаєте аналітику кліків до компонента, він перетворюється на клієнтський компонент, який тягне за собою JavaScript. Зробіть так по всьому сайту — і сам лише трекінг роздуває ваш бандл. Ось альтернатива, яка є в платформі від початку: один делегований слухач, декларативні data-атрибути та компоненти, що лишаються чистим серверним HTML.
Плавний акордеон без жодного JavaScript
Усі хапаються за стан React і хук для вимірювання висоти, щоб зібрати акордеон. А браузер уже роками має нативний — і починаючи з 2024 року він анімує відкриття й закриття чистим CSS. Ось повна техніка: details[name], ::details-content, interpolate-size і та єдина властивість, яка анімує ще й закриття.
Ловіть значення від стороннього скрипта в ту саму мить, коли воно потрапляє у window
Скрипт, якого ви не контролюєте, записує свій результат у глобал на window у момент, який неможливо передбачити. Більшість коду або програє йому гонку через timeout, або марно навантажує main-thread полінгом. Ось трюк з accessor-property, який перетворює присвоєння на подію — плюс геттер, про який не можна забувати, і як повністю підмінити значення.
Вписуй текст у контейнер чистим CSS — без JavaScript
Усі пишуть JavaScript-хук, який зменшує font-size, поки текст не влізе в контейнер. Ось повністю робоча альтернатива без жодного JS — на container query одиницях, clamp() і переносах слів з урахуванням правил мови, включно з пасткою каскаду, через яку багато хто здається.
next/dynamic вас не врятує: чому CMS-керовані сторінки Next.js відвантажують кожен чанк
Наші CMS-керовані сторінки Next.js відвантажували всі ~100 компонентів секцій на кожному роуті — попри хрестоматійний next/dynamic. Ми вичерпали всі фікси рівня бандлера (прямий import(), розбиття файлів, конфіг Turbopack, webpack splitChunks), перш ніж знайти справжню причину: досяжність, а не чанкування. Білд-тайм кодген + rewrites зрізали first-load JS на 53%.
Виношу дошки з Miro в Obsidian
Кнопка Export у Miro дає PNG чи PDF — це фото даних, не самі дані. А якщо твої дошки — це load-bearing мапи мислення за роки, вони мають жити в Obsidian: editable, searchable, у локальному vault'і. Як я виніс boards з Miro через REST API і конвертував у Excalidraw / Obsidian Canvas — зі збереженням позицій, кольорів, шрифтів, curved connectors, mindmap nodes — і урок ширший за Miro: SaaS треба сприймати з exit plan'ом ще ДО першого використання.
Claude Code Multi-Profile, v2: чиста XDG-архітектура
Після місяця на старому підході з аліасами я переробив свій multi-profile сетап Claude Code на XDG-сумісну структуру ~/.config/claude-profiles/. Справжня причина — не охайність, а виявлення ~/.claude.json як окремого файлу в home root, у якому тихо жили MCP-сервери, додані через --scope user.
Тиша, яку вимкнув AI
Чи варто ще вчити програмування, якщо є AI? Голосна відповідь хибна з обох боків. З доказовою базою 2025–2026 (Nature, Anthropic, AI & Society) питання не "AI чи ні", а які навички віддавати AI, а які тримати при собі — і одна річ, яка справді змінилась: раніше реальність примушувала вчитися через тертя, AI тихо вимкнув цей тиск.
Як писати агентів Claude Code, які тобі не брешуть
Два правила для надійних пайплайнів з агентами Claude Code: один агент — одна спеціалізація, і shell-команди замість промптів усюди, де відповідь має бути кількісною.
Як підключити Claude Desktop до Obsidian — шлях через 4 MCP-сервери
Реальна історія пошуку стабільного способу автоматизувати роботу з Obsidian-сховищем через Claude. Що зламалось, що спрацювало, і чому VaultForge виявився єдиним робочим варіантом.
Чорні діри як рекурсивні всесвіти: від фізики до сенсу існування
Що якщо кожна чорна діра — це Великий Вибух нового всесвіту? Дослідження рекурсивної космології, випромінювання Гокінга, когнітивного закриття та чому всесвіт може бути створений для самовдосконалення.
AI вбив CMS — принаймні для простих сайтів
Чому традиційні системи управління контентом стають зайвими для портфоліо, блогів та лендінгів — і як AI-інструменти замінюють весь шар CMS природною мовою.
Як підключити Perplexity AI до Obsidian через MCP — нотатки прямо з чату
Налаштуйте Perplexity Desktop для читання та запису вашого Obsidian vault за допомогою MCP filesystem сервера. Шукайте в інтернеті та зберігайте в нотатки в одній розмові.
Щоденний AI News Digest через Claude Code CLI та Obsidian — нуль залежностей
Як я побудував щоденного агента дослідження новин з 6-рядковим bash-скриптом, headless-режимом Claude Code та macOS launchd. Він шукає 11 тем і пише дайджести прямо в Obsidian.
Dark Mode в Next.js без мигання та попереджень React 19
Як замінити next-themes на Zustand + useServerInsertedHTML для темної теми без мигання в Next.js 15+ без попереджень React 19.
Як я усунув 94 render-blocking CSS файли в Next.js 16 за допомогою погано задокументованої фічі Turbopack
Після днів спроб кожного підходу — від experimental.inlineCss до хаків з MutationObserver — я відкрив Turbopack Import Attributes, які вирішують проблему render-blocking CSS у Next.js App Router.