Статьи — .NET, Nuxt, Telegram-боты и ИИ на практике

Архитектурные решения, разборы реализаций и честные истории о том, что пошло не так. Написано инженерами, которые сами создавали этот код.

Мы написали CMS-бэкенд на .NET для markdown и отказались от него в пользу SSR на Nuxt
Почему мы удалили собственный бэкенд, отдающий markdown как API, и перенесли блог в приложение на Nuxt — вечная синхронизация фронтенда с бэкендом, возможности, которых не хватало, и что упростилось после переезда.
Читать →
Как мы ведём бэклог в Boards через Claude Code и MCP
Мы сделали MCP-сервер для Laraue Boards, чтобы разобраться, как работает MCP, а потом начали пользоваться им с Claude Code каждый день. Как за два часа появилась первая версия, что было в ней не так и какой ежедневный цикл он дал.
Читать →
Почему ревью кода, сгенерированного ИИ, часто дороже самостоятельного написания
Современный подход к разработке все больше сводится к тезису - код должен писать ИИ, а разработчик лишь направляет его в нужную сторону и проверяет результаты. А то, что отревьюить сгенерированный код так, чтобы ему довериться, часто дольше, чем написать его самостоятельно, старательно опускается.
Читать →
Telegram Login Widget vs авторизация через Mini App в .NET — две схемы валидации, один JWT
Часть 13 цикла о разработке Telegram-таск-трекера в одиночку. Как добавить вход через Telegram Login Widget в веб-приложение на .NET и Nuxt рядом с Mini App: привязка домена в BotFather, валидация данных виджета (другой секрет, чем у init data), отклонение устаревших данных по auth_date и выпуск того же JWT.
Читать →
Объединение группы изображений в одну запись ботом в Telegram — обрабатываем медиагруппы и правки без использования таймеров
Часть 12 цикла о разработке Telegram-таск-трекера в одиночку. Telegram присылает альбом отдельными сообщениями, а правку — новым апдейтом. Разбираем, как собрать медиагруппу в одну запись без таймера-аккумулятора и как обрабатывать правку как обновление, а не как дубль.
Читать →
Сохраняем медиа из Telegram-бота — храним превью, стримим оригинал
Часть 11 цикла о разработке Telegram-таск-трекера в одиночку. Учим бота работать с фото и видео, разбираем решение с хранением файлов - маленькие превью в локальном хранилище и прямой стриминг больших файлов прямиком из Telegram, без буферизации в памяти.
Читать →
Почему пользователи снова и снова выбирали «Сохраненные сообщения» в Telegram вместо нашего бота — и что мы изменили
Часть 10 цикла о разработке Telegram-таск-трекера в одиночку. Рассказываем о продуктовой ошибке — мы добавили в бота выбор эпика и статуса, но реальные пользователи продолжали использовать «Сохраненные сообщения» — и о том, как ее исправляли.
Читать →
Когда не стоит делать внешний ключ nullable — моделирование пустого состояния отдельной строкой
Часть 9 цикла о разработке Telegram-таск-трекера в одиночку. Слой issue в веб-приложении и решение по проектированию БД в его центре — когда nullable внешний ключ это неверный выбор, а отдельная строка-«по умолчанию» лучше, на примере issue, эпиков и бэклога.
Читать →
Аутентификация Telegram Mini App в .NET от и до — валидация initData, выпуск JWT и фронтенд на Nuxt
Часть 8 цикла о разработке Telegram-таск-трекера в одиночку. Как аутентифицировать пользователя Telegram Mini App в .NET и Nuxt: проверка хеша initData через HMAC-SHA256, отклонение устаревших данных по auth_date, выпуск и использование JWT, пользователь из HttpContext и почему важен CORS.
Читать →
Деплой Nuxt Telegram Mini App. Настройка HTTPS на nginx с Let's Encrypt. Новый мини-апп через BotFather
Часть 7 цикла о разработке Telegram-таск-трекера в одиночку. Как задеплоить Nuxt Telegram Mini App за nginx с HTTPS: поддомен, конфигурация nginx, первый сертификат Let's Encrypt и автопродление через certbot, регистрация в BotFather, локальное тестирование через ngrok и что делать, если Mini App показывает «Welcome to nginx!».
Читать →
Деплой .NET-приложения и PostgreSQL на дешёвый VPS через Docker Compose
Часть 6 цикла о разработке Telegram-таск-трекера в одиночку. Выкладываем бота на недорогой VPS: Docker Compose, PostgreSQL на том же сервере с настройкой под 1 ГБ памяти, GitHub Actions на каждый push в main и разбор Dockerfile.
Читать →
Чистая архитектура Telegram-бота на .NET — контроллеры вместо гигантского switch
Часть 5 цикла о разработке Telegram-таск-трекера в одиночку. Telegram-бот на .NET с контроллерами и middleware в стиле ASP.NET вместо гигантского switch, слоистая структура решения и связка EF Core с linq2db на одних и тех же моделях.
Читать →
Выбор стека пет-проекта для соло-разработки — .NET, PostgreSQL, Nuxt и почему мы предпочитаем скучные технологии
Часть 4 цикла о разработке Telegram-таск-трекера в одиночку. Причины выбора .NET 10, PostgreSQL 18, Nuxt 4 и Vue 3. Немного о переезде с MongoDB на Postgres в прошлом проекте, который научил нас отдавать предпочтение скучным стабильным технологиям.
Читать →
От «Сохранённых сообщений» в Telegram к настоящему таск-трекеру — определяем путь пользователя
Часть 3 цикла о разработке Telegram-таск-трекера в одиночку. Чем «Сохранённые сообщения» плохи для дел, какой минимальный сценарий лёг в основу Laraue Boards и почему путь пользователя описывается до проектирования базы и кода.
Читать →
Прототипируем интерфейс с ИИ до написания кода
Часть 2 цикла о разработке Telegram-таск-трекера в одиночку. Почему мы начинаем с интерфейса, как HTML-прототипы от ИИ заменили Figma и каким получился первый прототип Laraue Boards.
Читать →
Jira-альтернатива в одиночку — зачем мы её делаем и ссылки на репозитории
Часть 1 цикла о разработке Telegram-таск-трекера в одиночку с ИИ. Какую проблему мы решаем, зачем нужен ещё один таск-трекер, на каких двух репозиториях построен цикл статей.
Читать →