Svitanok
У продакшені · особистий щоденний інструментПерсональний Telegram-асистент — ранковий брифінг, LLM-керовані задачі та Mini App-дашборд, у продакшені з першого дня.

Стек
- TypeScript
- React 19
- Cloudflare Workers
- Cloudflare KV
- Telegram Bot API
- Vitest
- GitHub Actions
Задача
Хотів одну річ, яка реально працює щоранку без мого втручання: погода, календар, новини, курс валют і тренувальне питання для співбесіди — одним повідомленням у Telegram, плюс розмовний асистент, який може діяти з календарем, поштою й нагадуваннями, а не просто відповідати про них.
Підхід
Спроєктовано, побудовано й веду в продакшені самостійно — від архітектури до моніторингу. Брифінг запускається через GitHub Actions cron, який звертається до Cloudflare Worker'а; лише цей Worker торкається Cloudflare KV (один namespace, ~10 ключів — свідомо без D1/R2/Durable Objects, бо масштаб — один користувач, а не мультитенантний продукт). Окремий VPS тримає живою довготривалу сесію Claude CLI для асистента, бо Workers мовчки вбивають фонове виконання приблизно через 25-30с — замало для багатокрокового tool use.
Ключові рішення
- –Фіксована схема LLM-дій: асистент обирає дію із закритого набору, описаного в JSON, а не викликає довільні інструменти — дешеві дії виконуються одразу, ризиковані показують діф "було→стане" і чекають підтвердження.
- –Атомарний запис у KV: кнопка "Підтвердити" відправляє незбережені зміни й прапорець підтвердження одним запитом, бо Cloudflare KV не має compare-and-swap, і двоетапний запис створив би гонку.
- –Самостійно знайшов і закрив реальний баг безпеки: Mini App авторизується через HMAC-підпис Telegram initData, і рання версія мовчки вироджувала цей секрет у публічну константу за відсутності bot-токена — закрито до будь-якого публічного використання.
- –1300+ тестів на Vitest покривають усю бізнес-логіку, свідомо без побічних ефектів за дизайном; typecheck + lint + test — обов'язковий гейт перед кожним мержем через GitHub Actions.
- –Mini App-дашборд (React 19, Vite, TanStack Query, D3) із вкладкою вакансій, що скорує відкриті позиції під власний профіль, плюс чек-ін звичок і статистика надійності доставки.
Результат
У щоденному продакшн-використанні з кінця червня 2026 — приблизно місяць інтенсивної розробки, 548 комітів, ~27.7 тис. рядків коду поза тестами. Це проєкт, яким я б показував архітектурні рішення й інженерне мислення під реальними обмеженнями, а не просто список фіч.
Приватний репозиторій — код доступний за запитом.
Хочете щось подібне? Напишіть мені