[{"data":1,"prerenderedAt":1707},["ShallowReactive",2],{"blog-posts":3},[4,209,364,929,989,1121,1161,1331,1459,1502,1534,1552,1584,1660],{"_path":5,"_dir":6,"_draft":7,"_partial":7,"_locale":8,"title":9,"description":10,"date":11,"tags":12,"body":17,"_type":203,"_id":204,"_source":205,"_file":206,"_stem":207,"_extension":208},"\u002Fblog\u002F2026-07-09-telegram-invite-reality","blog",false,"","Как я пытаюсь раскачать телеграм-канал: битва с лимитами","История о том, как AI-автоматизация массовых приглашений столкнулась с реальностью телеграм-лимитов","2026-07-09",[13,14,15,16],"telegram","ai","опыт","мысли",{"type":18,"children":19,"toc":195},"root",[20,28,33,40,45,50,55,61,66,71,76,82,87,92,103,113,119,124,149,154,160,170,180,190],{"type":21,"tag":22,"props":23,"children":24},"element","p",{},[25],{"type":26,"value":27},"text","У меня есть канал — «Струны, мысли». Стихи, музыка, мысли. Недавно решил попробовать пригласить туда людей из своих контактов. Тысяча с лишним человек — среди них точно есть те, кому это откликнется.",{"type":21,"tag":22,"props":29,"children":30},{},[31],{"type":26,"value":32},"Плюс у меня есть AI-агент. Он умеет писать скрипты, работать с Telegram API, отслеживать прогресс. Казалось бы — идеальный инструмент для массовой рассылки.",{"type":21,"tag":34,"props":35,"children":37},"h2",{"id":36},"первый-запуск",[38],{"type":26,"value":39},"Первый запуск",{"type":21,"tag":22,"props":41,"children":42},{},[43],{"type":26,"value":44},"8 июля, вечер. Агент отфильтровал контакты — около 600 ботов и мёртвых душ отсеялись, осталось 1158 реальных людей. Запустили скрипт.",{"type":21,"tag":22,"props":46,"children":47},{},[48],{"type":26,"value":49},"24 приглашения — и Telegram разорвал сессию. Просто отключил аккаунт от API. Без предупреждения, без объяснений.",{"type":21,"tag":22,"props":51,"children":52},{},[53],{"type":26,"value":54},"Пришлось заново авторизоваться. Потеряли час.",{"type":21,"tag":34,"props":56,"children":58},{"id":57},"вторая-попытка",[59],{"type":26,"value":60},"Вторая попытка",{"type":21,"tag":22,"props":62,"children":63},{},[64],{"type":26,"value":65},"На следующий день решили действовать иначе. Сначала — тихие инвайты в канал (107 человек добавлены, даже не заметили). Потом — личные сообщения с приглашением. Честные, без маркетингового шлака: «Привет! Это массовая рассылка, но канал мой, стихи тоже мои. Вот ссылка».",{"type":21,"tag":22,"props":67,"children":68},{},[69],{"type":26,"value":70},"67 сообщений за 20 минут. И снова — «Too many requests». Аккаунт забанен.",{"type":21,"tag":22,"props":72,"children":73},{},[74],{"type":26,"value":75},"На этот раз бан подольше. Часы.",{"type":21,"tag":34,"props":77,"children":79},{"id":78},"третья-попытка",[80],{"type":26,"value":81},"Третья попытка",{"type":21,"tag":22,"props":83,"children":84},{},[85],{"type":26,"value":86},"Переписали скрипт. Теперь он работает в двух режимах: invite в канал + личное сообщение, с паузой 31 секунда между приглашениями. При rate limit — ждёт час и пробует снова. Запустили в фоне.",{"type":21,"tag":22,"props":88,"children":89},{},[90],{"type":26,"value":91},"Но выяснилось две вещи, которые усложнили автоматизацию.",{"type":21,"tag":22,"props":93,"children":94},{},[95,101],{"type":21,"tag":96,"props":97,"children":98},"strong",{},[99],{"type":26,"value":100},"Первое:",{"type":26,"value":102}," Telegram не даёт отправлять больше 20–30 личных сообщений в день незнакомым людям. Не в час — в день. Приглашения в канал — около 30 в час. Это не баг, это политика платформы. И она не написана нигде в явном виде — только в FloodWaitError, который приходит после факта.",{"type":21,"tag":22,"props":104,"children":105},{},[106,111],{"type":21,"tag":96,"props":107,"children":108},{},[109],{"type":26,"value":110},"Второе:",{"type":26,"value":112}," мой AI-агент и скрипт рассылки используют одну и ту же сессию Telegram. Они не могут работать одновременно. Каждый запуск скрипта требует остановки агента. Каждый ответ агента — остановки скрипта.",{"type":21,"tag":34,"props":114,"children":116},{"id":115},"где-мы-сейчас",[117],{"type":26,"value":118},"Где мы сейчас",{"type":21,"tag":22,"props":120,"children":121},{},[122],{"type":26,"value":123},"Скрипт работает. Медленно, по одному приглашению в 31 секунду, с часовыми паузами при каждом бане. Из 1158 контактов:",{"type":21,"tag":125,"props":126,"children":127},"ul",{},[128,134,139,144],{"type":21,"tag":129,"props":130,"children":131},"li",{},[132],{"type":26,"value":133},"100 человек добавлены в канал (тихо, без уведомлений)",{"type":21,"tag":129,"props":135,"children":136},{},[137],{"type":26,"value":138},"72 получили личное приглашение",{"type":21,"tag":129,"props":140,"children":141},{},[142],{"type":26,"value":143},"22 пропущены — закрытые настройки приватности",{"type":21,"tag":129,"props":145,"children":146},{},[147],{"type":26,"value":148},"954 ждут своей очереди",{"type":21,"tag":22,"props":150,"children":151},{},[152],{"type":26,"value":153},"Баны снимаются. Скрипт снова стучится в API. Так и ломимся — по часу в час, по одному приглашению за раз.",{"type":21,"tag":34,"props":155,"children":157},{"id":156},"что-понял-на-этом-пути",[158],{"type":26,"value":159},"Что понял на этом пути",{"type":21,"tag":22,"props":161,"children":162},{},[163,168],{"type":21,"tag":96,"props":164,"children":165},{},[166],{"type":26,"value":167},"Telegram защищает пользователей, а не создателей контента.",{"type":26,"value":169}," Лимиты — это философия платформы: рост должен быть органическим. Но «органический» не значит «ждать, пока само придёт». Значит — идти к людям, но медленно, с уважением к правилам.",{"type":21,"tag":22,"props":171,"children":172},{},[173,178],{"type":21,"tag":96,"props":174,"children":175},{},[176],{"type":26,"value":177},"AI — не кнопка «сделать всё».",{"type":26,"value":179}," Агент пишет скрипты, обрабатывает ошибки, адаптируется к лимитам. Но он не может обойти фундаментальное ограничение платформы. Зато он может терпеливо ждать и пробовать снова — в отличие от человека, которому это наскучит через два часа.",{"type":21,"tag":22,"props":181,"children":182},{},[183,188],{"type":21,"tag":96,"props":184,"children":185},{},[186],{"type":26,"value":187},"1158 приглашений — это марафон, не спринт.",{"type":26,"value":189}," При текущем темпе на всё уйдут несколько дней. И это нормально. Каждый, кто примет приглашение, будет тем, кто увидел реальное приглашение от реального человека — а не спам из ниоткуда.",{"type":21,"tag":22,"props":191,"children":192},{},[193],{"type":26,"value":194},"Продолжение следует. Скрипт работает.",{"title":8,"searchDepth":196,"depth":196,"links":197},2,[198,199,200,201,202],{"id":36,"depth":196,"text":39},{"id":57,"depth":196,"text":60},{"id":78,"depth":196,"text":81},{"id":115,"depth":196,"text":118},{"id":156,"depth":196,"text":159},"markdown","content:blog:2026-07-09-telegram-invite-reality.md","content","blog\u002F2026-07-09-telegram-invite-reality.md","blog\u002F2026-07-09-telegram-invite-reality","md",{"_path":210,"_dir":6,"_draft":7,"_partial":7,"_locale":8,"title":211,"description":212,"date":213,"tags":214,"body":217,"_type":203,"_id":361,"_source":205,"_file":362,"_stem":363,"_extension":208},"\u002Fblog\u002F2026-07-08-o-privychke-i-merakh","О привычке и мерах","Монтень считал, что привычка делает нас рабами. В разработке то же самое — только рабами фреймворков и паттернов","2026-07-08",[16,215,216],"разработка","философия",{"type":18,"children":218,"toc":355},[219,224,229,235,249,254,259,272,277,283,288,293,298,303,308,314,319,324,329,335,340,345,350],{"type":21,"tag":22,"props":220,"children":221},{},[222],{"type":26,"value":223},"Монтень ушёл из суда, заперся в башне своего замка и тридцать лет писал книгу о себе. Не о политике, не о войнах — о том, как он сам устроен. Что его злит, что радует, почему он делает одно и не делает другое. «Опыты» — это толстая тетрадь честных записей. Без претензии на истину.",{"type":21,"tag":22,"props":225,"children":226},{},[227],{"type":26,"value":228},"Я не ушёл в замок. Но я тоже веду записи. Только мои — не про личные нравы, а про код, системы и привычки, которые в них пролезают.",{"type":21,"tag":34,"props":230,"children":232},{"id":231},"привычка",[233],{"type":26,"value":234},"Привычка",{"type":21,"tag":22,"props":236,"children":237},{},[238,240,247],{"type":26,"value":239},"Монтень говорил: «Привычка — тихая и незаметная управительница». Она не приказывает — она просто делает за нас. Открываешь проект — Ctrl+P, открываешь терминал, пишешь ",{"type":21,"tag":241,"props":242,"children":244},"code",{"className":243},[],[245],{"type":26,"value":246},"npm run dev",{"type":26,"value":248},". Новый проект — те же клавиши. Не задумываешься.",{"type":21,"tag":22,"props":250,"children":251},{},[252],{"type":26,"value":253},"И это хорошо. Без привычки невозможно работать. Когда я впервые начал со Strapi 5, каждый шаг требовал усилия: как устроены content types, как работает REST API, где права, как деплоить. Сейчас — автоматизм. Пять минут и новый сервис на ногах.",{"type":21,"tag":22,"props":255,"children":256},{},[257],{"type":26,"value":258},"Но Монтень предупреждал и о другой стороне. Привычка, которая помогает, одновременно слепит. Ты делаешь то же самое, потому что делал раньше, а не потому что это лучший способ.",{"type":21,"tag":22,"props":260,"children":261},{},[262,264,270],{"type":26,"value":263},"Я три года писал на Vue. Потом на проекте потребовался React — и я ловил себя на том, что ищу во фреймворке вещи, которых там нет. Vue-привычки. Реактивность через ",{"type":21,"tag":241,"props":265,"children":267},{"className":266},[],[268],{"type":26,"value":269},"ref",{"type":26,"value":271},", composition API, single-file components. В React это всё устроено иначе, и вместо того чтобы думать на языке нового инструмента, я пытался заставить его работать по-старому.",{"type":21,"tag":22,"props":273,"children":274},{},[275],{"type":26,"value":276},"Монтень так и писал: «Обычай заслоняет нам истинный вид вещей». Фреймворк — это не просто инструмент. Это набор привычек. Сменить стек — значит сменить мышление. А это тяжело.",{"type":21,"tag":34,"props":278,"children":280},{"id":279},"о-мерах",[281],{"type":26,"value":282},"О мерах",{"type":21,"tag":22,"props":284,"children":285},{},[286],{"type":26,"value":287},"В другом эссе Монтень рассуждает об излишествах. Он за умеренность — не потому что крайности плохи сами по себе, а потому что они мешают видеть цель. Ешь слишком много — забудешь вкус еды. Читаешь слишком много — забудешь, зачем читал.",{"type":21,"tag":22,"props":289,"children":290},{},[291],{"type":26,"value":292},"В разработке это проявляется как архитектурный жор.",{"type":21,"tag":22,"props":294,"children":295},{},[296],{"type":26,"value":297},"У меня проект, где 15 PM2-процессов. Frontend, backend, 10 парсеров, анализатор, дайджест, сборщик фото. Когда я рассказываю об этом, люди спрашивает: «Зачем так много?»",{"type":21,"tag":22,"props":299,"children":300},{},[301],{"type":26,"value":302},"И я сам задаю себе тот же вопрос. Потому что когда запускал — каждый сервис казался необходимым. Один парсер на площадку. Один процесс на аналитику. Логично. Но логика каждого отдельного решения не гарантирует логику целого. Можно сделать сто правильных шагов и прийти в тупик.",{"type":21,"tag":22,"props":304,"children":305},{},[306],{"type":26,"value":307},"Монтень бы понял. Он писал: «Наше положение привычно, и вот мы привыкли быть». 15 процессов — это не катастрофа. Но я знаю, что 8 хватило бы. Знаю — потому что уже проходил через это. Сначала всё кажется необходимым. Потом смотришь и видишь дублирование, лишние прослойки, сервис, который делает ровно одну вещь раз в сутки и мог бы быть cron-задачей.",{"type":21,"tag":34,"props":309,"children":311},{"id":310},"опыт-учит-задним-числом",[312],{"type":26,"value":313},"Опыт учит задним числом",{"type":21,"tag":22,"props":315,"children":316},{},[317],{"type":26,"value":318},"Главная мысль Монтеня: опыт приходит после того, как ты уже всё сделал. Нельзя прочитать книгу и стать мудрым. Нужно набить шишки. Но можно — и нужно — честно оглядываться назад и спрашивать: а зачем я это сделал?",{"type":21,"tag":22,"props":320,"children":321},{},[322],{"type":26,"value":323},"Каждую неделю я нахожу в своём коде что-то, что переписал бы иначе. Не потому что было плохо — потому что теперь я знаю больше. Два месяца назад это было правильное решение. Сегодня — нет. И это нормально. Монтень переписывал «Опыты» пятнадцать лет, добавляя и зачёркивая. Книга росла вместе с ним.",{"type":21,"tag":22,"props":325,"children":326},{},[327],{"type":26,"value":328},"Код — тоже. Не бывает финальной архитектуры. Бывает текущая, которая работает, и следующая, которая будет работать лучше. Между ними — опыт. Не книжный, не из документации. Свой, набитый на своих ошибках.",{"type":21,"tag":34,"props":330,"children":332},{"id":331},"привычка-как-мера",[333],{"type":26,"value":334},"Привычка как мера",{"type":21,"tag":22,"props":336,"children":337},{},[338],{"type":26,"value":339},"Вот что я понял, читая Монтеня: привычка и мера — это не два разных предмета. Это одно и то же. Привычка — это внутренняя мера. Ты делаешь ровно столько, сколько делал раньше. Ни больше, ни меньше.",{"type":21,"tag":22,"props":341,"children":342},{},[343],{"type":26,"value":344},"Иногда этого достаточно. Автоматизмы экономят время и силы. Но иногда привычная мера устарела. Проект вырос, задачи изменились, а ты всё ещё делаешь так, как делал полгода назад. Не потому что так лучше — потому что так привычно.",{"type":21,"tag":22,"props":346,"children":347},{},[348],{"type":26,"value":349},"Монтень не давал рецептов. Он говорил: «Я не учу — я рассказываю». Вот и я рассказываю. О том, как привычка помогает строить сервисы. И о том, как та же привычка мешает их упрощать. О мерах — которые приходят только с опытом, а опыт — только с ошибками.",{"type":21,"tag":22,"props":351,"children":352},{},[353],{"type":26,"value":354},"Иногда достаточно остановиться и спросить: я делаю так, потому что это правильно, или потому что я так привык?",{"title":8,"searchDepth":196,"depth":196,"links":356},[357,358,359,360],{"id":231,"depth":196,"text":234},{"id":279,"depth":196,"text":282},{"id":310,"depth":196,"text":313},{"id":331,"depth":196,"text":334},"content:blog:2026-07-08-o-privychke-i-merakh.md","blog\u002F2026-07-08-o-privychke-i-merakh.md","blog\u002F2026-07-08-o-privychke-i-merakh",{"_path":365,"_dir":6,"_draft":7,"_partial":7,"_locale":8,"title":366,"description":367,"date":368,"tags":369,"body":375,"_type":203,"_id":926,"_source":205,"_file":927,"_stem":928,"_extension":208},"\u002Fblog\u002F2026-07-07-aklab-ai-development","AKLAB: как я строю автоматический мониторинг недвижимости для инвесторов","10 парсеров, 15 сервисов, 578 тестов. Как я строю платформу для инвесторов в недвижимость с помощью AI.","2026-07-07",[370,14,215,371,372,373,374],"aklab","strapi","vue","недвижимость","инвестиции",{"type":18,"children":376,"toc":917},[377,382,387,392,401,407,412,417,423,428,587,592,597,618,624,629,634,644,649,659,664,670,675,685,690,699,704,709,714,720,725,735,745,755,765,771,884,890,913],{"type":21,"tag":22,"props":378,"children":379},{},[380],{"type":26,"value":381},"Я делаю сервис мониторинга инвестиционной недвижимости — AKLAB. Он автоматически находит объекты, которые стоят значительно ниже рыночных эталонов. Парсит 10 федеральных площадок, анализирует отклонения от эталонных цен, присылает утренний дайджест на email.",{"type":21,"tag":22,"props":383,"children":384},{},[385],{"type":26,"value":386},"Основной фокус — коммерческая недвижимость: офисы, склады, торговые помещения. Но мониторим также земельные участки и квартиры.",{"type":21,"tag":22,"props":388,"children":389},{},[390],{"type":26,"value":391},"За полтора месяца довёл проект от идеи до продакшена. Рассказываю, как устроено.",{"type":21,"tag":22,"props":393,"children":394},{},[395],{"type":21,"tag":396,"props":397,"children":400},"img",{"alt":398,"src":399},"Дашборд AKLAB — тёмная тема","\u002Fuploads\u002Faklab-dashboard-dark.png",[],{"type":21,"tag":34,"props":402,"children":404},{"id":403},"зачем",[405],{"type":26,"value":406},"Зачем",{"type":21,"tag":22,"props":408,"children":409},{},[410],{"type":26,"value":411},"Рынок инвестиционной недвижимости — это торги. Сбербанк-АСТ, Алфалот, М-ЕТС, ГИС Торги, ЕТПРФ, Инвест Москва и другие. На каждой площадке — сотни лотов. Просматривать их вручную каждый день — нереально.",{"type":21,"tag":22,"props":413,"children":414},{},[415],{"type":26,"value":416},"AKLAB делает это за меня: парсит площадки ночью, анализирует отклонения от эталонов, утром присылает результат на почту.",{"type":21,"tag":34,"props":418,"children":420},{"id":419},"архитектура",[421],{"type":26,"value":422},"Архитектура",{"type":21,"tag":22,"props":424,"children":425},{},[426],{"type":26,"value":427},"Один репозиторий, 15 PM2-процессов:",{"type":21,"tag":429,"props":430,"children":431},"table",{},[432,456],{"type":21,"tag":433,"props":434,"children":435},"thead",{},[436],{"type":21,"tag":437,"props":438,"children":439},"tr",{},[440,446,451],{"type":21,"tag":441,"props":442,"children":443},"th",{},[444],{"type":26,"value":445},"Компонент",{"type":21,"tag":441,"props":447,"children":448},{},[449],{"type":26,"value":450},"Порт",{"type":21,"tag":441,"props":452,"children":453},{},[454],{"type":26,"value":455},"Описание",{"type":21,"tag":457,"props":458,"children":459},"tbody",{},[460,479,497,515,533,551,569],{"type":21,"tag":437,"props":461,"children":462},{},[463,469,474],{"type":21,"tag":464,"props":465,"children":466},"td",{},[467],{"type":26,"value":468},"Frontend (Vue 3 + Vite + Tailwind)",{"type":21,"tag":464,"props":470,"children":471},{},[472],{"type":26,"value":473},":5174",{"type":21,"tag":464,"props":475,"children":476},{},[477],{"type":26,"value":478},"Dashboard, Настройки, Карточки объектов",{"type":21,"tag":437,"props":480,"children":481},{},[482,487,492],{"type":21,"tag":464,"props":483,"children":484},{},[485],{"type":26,"value":486},"Backend (Strapi 5 + SQLite)",{"type":21,"tag":464,"props":488,"children":489},{},[490],{"type":26,"value":491},":1338",{"type":21,"tag":464,"props":493,"children":494},{},[495],{"type":26,"value":496},"REST API, Admin Panel, Cron scheduler",{"type":21,"tag":437,"props":498,"children":499},{},[500,505,510],{"type":21,"tag":464,"props":501,"children":502},{},[503],{"type":26,"value":504},"10 парсеров (Playwright\u002Ffetch)",{"type":21,"tag":464,"props":506,"children":507},{},[508],{"type":26,"value":509},":1345–1355",{"type":21,"tag":464,"props":511,"children":512},{},[513],{"type":26,"value":514},"alfalot, torgi-gov, sberbank-ast, m-ets …",{"type":21,"tag":437,"props":516,"children":517},{},[518,523,528],{"type":21,"tag":464,"props":519,"children":520},{},[521],{"type":26,"value":522},"Analyzer",{"type":21,"tag":464,"props":524,"children":525},{},[526],{"type":26,"value":527},":1341",{"type":21,"tag":464,"props":529,"children":530},{},[531],{"type":26,"value":532},"Сравнение с эталонами",{"type":21,"tag":437,"props":534,"children":535},{},[536,541,546],{"type":21,"tag":464,"props":537,"children":538},{},[539],{"type":26,"value":540},"Digest",{"type":21,"tag":464,"props":542,"children":543},{},[544],{"type":26,"value":545},":1342",{"type":21,"tag":464,"props":547,"children":548},{},[549],{"type":26,"value":550},"Утренний email-дайджест",{"type":21,"tag":437,"props":552,"children":553},{},[554,559,564],{"type":21,"tag":464,"props":555,"children":556},{},[557],{"type":26,"value":558},"Photo",{"type":21,"tag":464,"props":560,"children":561},{},[562],{"type":26,"value":563},":1356",{"type":21,"tag":464,"props":565,"children":566},{},[567],{"type":26,"value":568},"Фото из карточек",{"type":21,"tag":437,"props":570,"children":571},{},[572,577,582],{"type":21,"tag":464,"props":573,"children":574},{},[575],{"type":26,"value":576},"Очередь",{"type":21,"tag":464,"props":578,"children":579},{},[580],{"type":26,"value":581},"—",{"type":21,"tag":464,"props":583,"children":584},{},[585],{"type":26,"value":586},"@aklab\u002Fsqlite-queue",{"type":21,"tag":22,"props":588,"children":589},{},[590],{"type":26,"value":591},"Backend — Strapi 5.44 + SQLite. Выбрал Strapi, потому что из коробки получаю REST API, админку, систему прав и кастомные контроллеры. Не нужно писать boilerplate.",{"type":21,"tag":22,"props":593,"children":594},{},[595],{"type":26,"value":596},"Frontend — Vue 3 + Vite + Tailwind. Дашборд с фильтрами по городу, цене и типу объекта, карточки с галереей фото.",{"type":21,"tag":22,"props":598,"children":599},{},[600,602,608,610,616],{"type":26,"value":601},"Парсеры — каждый микросервис в отдельной папке, shared-модули в ",{"type":21,"tag":241,"props":603,"children":605},{"className":604},[],[606],{"type":26,"value":607},"_shared\u002F",{"type":26,"value":609},". Один манифест ",{"type":21,"tag":241,"props":611,"children":613},{"className":612},[],[614],{"type":26,"value":615},"services.json",{"type":26,"value":617}," управляет портами, health-checks и PM2-конфигом.",{"type":21,"tag":34,"props":619,"children":621},{"id":620},"парсинг",[622],{"type":26,"value":623},"Парсинг",{"type":21,"tag":22,"props":625,"children":626},{},[627],{"type":26,"value":628},"Ночью запускаются 10 парсеров одновременно. Каждый обходит свою площадку, находит новые лоты и проверяет обновления старых.",{"type":21,"tag":22,"props":630,"children":631},{},[632],{"type":26,"value":633},"Парсинг работает в две фазы — и это не просто «скан, потом загрузка». Это принципиальное решение, которое экономит время и ресурсы.",{"type":21,"tag":22,"props":635,"children":636},{},[637,642],{"type":21,"tag":96,"props":638,"children":639},{},[640],{"type":26,"value":641},"Phase 1 — Scan.",{"type":26,"value":643}," Парсер обходит ленту площадки и собирает только карточные данные: цена, площадь, адрес, тип помещения. Тут же, на лету, применяет фильтры. Не попадает в нужный регион — отбрасывается. Площадь меньше минимума — отбрасывается. Цена выше порога — отбрасывается. Стоп-слова в названии — отбрасывается. Всё это происходит до того, как я потратил хоть одну лишнюю секунду на детальную выгрузку.",{"type":21,"tag":22,"props":645,"children":646},{},[647],{"type":26,"value":648},"Типичный сценарий: площадка выдаёт 200 лотов по всей России. После фильтрации по региону (Москва + МО) остаётся 30. После фильтрации по площади и цене — 12. Именно эти 12 и пойдут во вторую фазу, а не все 200.",{"type":21,"tag":22,"props":650,"children":651},{},[652,657],{"type":21,"tag":96,"props":653,"children":654},{},[655],{"type":26,"value":656},"Phase 2 — Fetch Details.",{"type":26,"value":658}," Для каждого прошедшего фильтр лота парсер заходит в карточку и забирает полное описание, фотографии, документы, условия торгов. Это дорогая операция — каждый запрос это реальный HTTP-запрос к площадке, с ожиданием загрузки, иногда с обходом JavaScript-рендеринга через Playwright.",{"type":21,"tag":22,"props":660,"children":661},{},[662],{"type":26,"value":663},"Две фазы позволяют не грузить детали для объектов, которые заведомо не подходят. На некоторых площадках фильтрация отсекает 80–90% лотов ещё на этапе scan.",{"type":21,"tag":34,"props":665,"children":667},{"id":666},"скоринг",[668],{"type":26,"value":669},"Скоринг",{"type":21,"tag":22,"props":671,"children":672},{},[673],{"type":26,"value":674},"После парсинга analyzer оценивает каждый объект по сравнению с эталонными ценами.",{"type":21,"tag":22,"props":676,"children":677},{},[678,683],{"type":21,"tag":96,"props":679,"children":680},{},[681],{"type":26,"value":682},"Эталоны",{"type":26,"value":684}," — это заранее заданные ориентиры стоимости за квадратный метр для каждого типа помещения в каждом регионе. Не «средняя цена по рынку», а конкретные контрольные точки, которые я веду вручную и корректирую по мере накопления данных.",{"type":21,"tag":22,"props":686,"children":687},{},[688],{"type":26,"value":689},"Для каждого объекта analyzer считает отклонение от эталона:",{"type":21,"tag":691,"props":692,"children":694},"pre",{"code":693},"deviation = (эталонная_цена − фактическая_цена) \u002F эталонная_цена × 100\n",[695],{"type":21,"tag":241,"props":696,"children":697},{"__ignoreMap":8},[698],{"type":26,"value":693},{"type":21,"tag":22,"props":700,"children":701},{},[702],{"type":26,"value":703},"Если отклонение превышает порог (например, 20%) — объект попадает в фокус. Чем больше отклонение, тем выше фокус-скор.",{"type":21,"tag":22,"props":705,"children":706},{},[707],{"type":26,"value":708},"Кроме отклонения, на скор влияют дополнительные факторы: тип торгов (банкротство vs реализация), наличие фото, полнота описания, сроки торгов. Объект с высоким отклонением, но без фотографий и с неполным описанием получит скор ниже, чем объект с аналогичным отклонением, но полной карточкой.",{"type":21,"tag":22,"props":710,"children":711},{},[712],{"type":26,"value":713},"Весь парсинг и анализ происходит ночью. Утром digest формирует email-дайджест по объектам, попавшим в фокус, и отправляет мне на почту.",{"type":21,"tag":34,"props":715,"children":717},{"id":716},"как-ai-помогает",[718],{"type":26,"value":719},"Как AI помогает",{"type":21,"tag":22,"props":721,"children":722},{},[723],{"type":26,"value":724},"Я разрабатываю AKLAB с AI-ассистентом. Вот что это даёт на практике:",{"type":21,"tag":22,"props":726,"children":727},{},[728,733],{"type":21,"tag":96,"props":729,"children":730},{},[731],{"type":26,"value":732},"Параллельная работа.",{"type":26,"value":734}," AI одновременно пишет код для нескольких сервисов — парсера, analyzer, фронтенд-компонента. Я ревьюю результат, а не пишу с нуля.",{"type":21,"tag":22,"props":736,"children":737},{},[738,743],{"type":21,"tag":96,"props":739,"children":740},{},[741],{"type":26,"value":742},"Документация.",{"type":26,"value":744}," После каждого изменения AI обновляет внутреннюю документацию: архитектурные решения, known issues, deployment notes. Всё актуально в каждый момент времени.",{"type":21,"tag":22,"props":746,"children":747},{},[748,753],{"type":21,"tag":96,"props":749,"children":750},{},[751],{"type":26,"value":752},"Тесты.",{"type":26,"value":754}," AI генерирует тесты параллельно с кодом. Не «напиши потом тесты» — а сразу вместе с фичей.",{"type":21,"tag":22,"props":756,"children":757},{},[758,763],{"type":21,"tag":96,"props":759,"children":760},{},[761],{"type":26,"value":762},"Деплой.",{"type":26,"value":764}," Один скрипт: коммит, пуш, npm install, build 10 сервисов, перезапуск PM2, health-check. 3–5 минут от команды до рабочего продакшена.",{"type":21,"tag":34,"props":766,"children":768},{"id":767},"цифры",[769],{"type":26,"value":770},"Цифры",{"type":21,"tag":429,"props":772,"children":773},{},[774,790],{"type":21,"tag":433,"props":775,"children":776},{},[777],{"type":21,"tag":437,"props":778,"children":779},{},[780,785],{"type":21,"tag":441,"props":781,"children":782},{},[783],{"type":26,"value":784},"Метрика",{"type":21,"tag":441,"props":786,"children":787},{},[788],{"type":26,"value":789},"Значение",{"type":21,"tag":457,"props":791,"children":792},{},[793,806,819,832,845,858,871],{"type":21,"tag":437,"props":794,"children":795},{},[796,801],{"type":21,"tag":464,"props":797,"children":798},{},[799],{"type":26,"value":800},"Версия",{"type":21,"tag":464,"props":802,"children":803},{},[804],{"type":26,"value":805},"v1.1.43",{"type":21,"tag":437,"props":807,"children":808},{},[809,814],{"type":21,"tag":464,"props":810,"children":811},{},[812],{"type":26,"value":813},"PM2-процессов",{"type":21,"tag":464,"props":815,"children":816},{},[817],{"type":26,"value":818},"15",{"type":21,"tag":437,"props":820,"children":821},{},[822,827],{"type":21,"tag":464,"props":823,"children":824},{},[825],{"type":26,"value":826},"Активных парсеров",{"type":21,"tag":464,"props":828,"children":829},{},[830],{"type":26,"value":831},"10",{"type":21,"tag":437,"props":833,"children":834},{},[835,840],{"type":21,"tag":464,"props":836,"children":837},{},[838],{"type":26,"value":839},"Площадок",{"type":21,"tag":464,"props":841,"children":842},{},[843],{"type":26,"value":844},"10 федеральных",{"type":21,"tag":437,"props":846,"children":847},{},[848,853],{"type":21,"tag":464,"props":849,"children":850},{},[851],{"type":26,"value":852},"Тестов",{"type":21,"tag":464,"props":854,"children":855},{},[856],{"type":26,"value":857},"578",{"type":21,"tag":437,"props":859,"children":860},{},[861,866],{"type":21,"tag":464,"props":862,"children":863},{},[864],{"type":26,"value":865},"Коммитов",{"type":21,"tag":464,"props":867,"children":868},{},[869],{"type":26,"value":870},"200+",{"type":21,"tag":437,"props":872,"children":873},{},[874,879],{"type":21,"tag":464,"props":875,"children":876},{},[877],{"type":26,"value":878},"Время от идеи до prod",{"type":21,"tag":464,"props":880,"children":881},{},[882],{"type":26,"value":883},"1.5 месяца",{"type":21,"tag":34,"props":885,"children":887},{"id":886},"что-дальше",[888],{"type":26,"value":889},"Что дальше",{"type":21,"tag":125,"props":891,"children":892},{},[893,898,903,908],{"type":21,"tag":129,"props":894,"children":895},{},[896],{"type":26,"value":897},"Email-дайджест с аналитикой по трендам",{"type":21,"tag":129,"props":899,"children":900},{},[901],{"type":26,"value":902},"Расширение на больше площадок и регионов",{"type":21,"tag":129,"props":904,"children":905},{},[906],{"type":26,"value":907},"API для партнёров",{"type":21,"tag":129,"props":909,"children":910},{},[911],{"type":26,"value":912},"Предсказание доходности на основе исторических данных",{"type":21,"tag":914,"props":915,"children":916},"hr",{},[],{"title":8,"searchDepth":196,"depth":196,"links":918},[919,920,921,922,923,924,925],{"id":403,"depth":196,"text":406},{"id":419,"depth":196,"text":422},{"id":620,"depth":196,"text":623},{"id":666,"depth":196,"text":669},{"id":716,"depth":196,"text":719},{"id":767,"depth":196,"text":770},{"id":886,"depth":196,"text":889},"content:blog:2026-07-07-aklab-ai-development.md","blog\u002F2026-07-07-aklab-ai-development.md","blog\u002F2026-07-07-aklab-ai-development",{"_path":930,"_dir":6,"_draft":7,"_partial":7,"_locale":8,"title":931,"description":932,"date":933,"tags":934,"externalLinks":936,"body":938,"_type":203,"_id":986,"_source":205,"_file":987,"_stem":988,"_extension":208},"\u002Fblog\u002F2026-03-13-help-people","Помочь можно только тому, кто готов","О желании приносить пользу и о том, почему это не всегда получается","2026-03-13",[935,16],"личное",{"telegram":937},"tg:\u002F\u002Fresolve?domain=strunimisli&post=11",{"type":18,"children":939,"toc":984},[940,945,950,955,960,965,970,975],{"type":21,"tag":22,"props":941,"children":942},{},[943],{"type":26,"value":944},"Иногда ловлю себя на мысли, что очень хочу приносить пользу. Не просто быть рядом, а именно — быть полезным. Помогать близким, да и вообще — людям. Делать так, чтобы кому-то стало легче, понятнее, лучше.",{"type":21,"tag":22,"props":946,"children":947},{},[948],{"type":26,"value":949},"Умею, казалось бы, немало. Могу сайт помочь сделать. Могу разобраться с ИИ, внедрить, прокачать процессы. Казалось бы — бери и делай, приноси пользу.",{"type":21,"tag":22,"props":951,"children":952},{},[953],{"type":26,"value":954},"Но что-то не складывается.",{"type":21,"tag":22,"props":956,"children":957},{},[958],{"type":26,"value":959},"И ведь знаю я эту мудрость, которую не первый раз слышу: «Люди сопротивляются новому, даже если понимают, что оно к лучшему». Знаю — и всё равно каждый раз удивляюсь. Вроде человек сам просил помощи. Вроде сам понимает, что надо что-то менять. А потом — тишина. Или отговорки. Или просто игнор.",{"type":21,"tag":22,"props":961,"children":962},{},[963],{"type":26,"value":964},"Может, конечно, это я где-то не так подхожу. Может, не умею правильно донести. Может, навязываюсь там, где не надо.",{"type":21,"tag":22,"props":966,"children":967},{},[968],{"type":26,"value":969},"А может, всё просто — помочь можно только тому, кто сам готов эту помощь принять. Не за руку тянуть, а просто быть рядом, когда спросят.",{"type":21,"tag":22,"props":971,"children":972},{},[973],{"type":26,"value":974},"Но всё равно — хочется. Чтобы получалось. Чтобы не зря.",{"type":21,"tag":976,"props":977,"children":978},"blockquote",{},[979],{"type":21,"tag":22,"props":980,"children":981},{},[982],{"type":26,"value":983},"«...и может быть станем, станем мы друг другу нужней...» — иногда эта строчка из 7Б застревает в голове. Вот бы так. Вот бы получалось.",{"title":8,"searchDepth":196,"depth":196,"links":985},[],"content:blog:2026-03-13-help-people.md","blog\u002F2026-03-13-help-people.md","blog\u002F2026-03-13-help-people",{"_path":990,"_dir":6,"_draft":7,"_partial":7,"_locale":8,"title":991,"description":992,"date":993,"tags":994,"body":996,"_type":203,"_id":1118,"_source":205,"_file":1119,"_stem":1120,"_extension":208},"\u002Fblog\u002F2026-03-10-ai-changed-rules","AI изменил правила: как один разработчик заменяет команду","30 лет в IT научили меня одному — адаптируйся или проиграешь","2026-03-10",[14,16,995],"продуктивность",{"type":18,"children":997,"toc":1112},[998,1003,1009,1019,1029,1035,1078,1084,1089,1094,1100],{"type":21,"tag":22,"props":999,"children":1000},{},[1001],{"type":26,"value":1002},"За 30 лет в IT я видел много технологических революций. Но ни одна из них не была такой быстрой и глубокой, как AI.",{"type":21,"tag":34,"props":1004,"children":1006},{"id":1005},"было-стало",[1007],{"type":26,"value":1008},"Было \u002F Стало",{"type":21,"tag":22,"props":1010,"children":1011},{},[1012,1017],{"type":21,"tag":96,"props":1013,"children":1014},{},[1015],{"type":26,"value":1016},"Раньше:",{"type":26,"value":1018}," чтобы создать SaaS-продукт, нужна команда из 5-10 человек. Frontend, backend, дизайнер, DevOps, тестировщик.",{"type":21,"tag":22,"props":1020,"children":1021},{},[1022,1027],{"type":21,"tag":96,"props":1023,"children":1024},{},[1025],{"type":26,"value":1026},"Сейчас:",{"type":26,"value":1028}," один разработчик с AI-инструментами делает то же самое. Claude пишет код, GPT генерирует контент, Replicate создаёт изображения, а я собираю всё это в продукт.",{"type":21,"tag":34,"props":1030,"children":1032},{"id":1031},"мой-стек-продуктивности",[1033],{"type":26,"value":1034},"Мой стек продуктивности",{"type":21,"tag":125,"props":1036,"children":1037},{},[1038,1048,1058,1068],{"type":21,"tag":129,"props":1039,"children":1040},{},[1041,1046],{"type":21,"tag":96,"props":1042,"children":1043},{},[1044],{"type":26,"value":1045},"Claude Code",{"type":26,"value":1047}," — написание и рефакторинг кода",{"type":21,"tag":129,"props":1049,"children":1050},{},[1051,1056],{"type":21,"tag":96,"props":1052,"children":1053},{},[1054],{"type":26,"value":1055},"Yandex GPT",{"type":26,"value":1057}," — генерация контента на русском",{"type":21,"tag":129,"props":1059,"children":1060},{},[1061,1066],{"type":21,"tag":96,"props":1062,"children":1063},{},[1064],{"type":26,"value":1065},"GPT-4",{"type":26,"value":1067}," — сложные аналитические задачи",{"type":21,"tag":129,"props":1069,"children":1070},{},[1071,1076],{"type":21,"tag":96,"props":1072,"children":1073},{},[1074],{"type":26,"value":1075},"Replicate",{"type":26,"value":1077}," — генерация изображений",{"type":21,"tag":34,"props":1079,"children":1081},{"id":1080},"что-это-меняет",[1082],{"type":26,"value":1083},"Что это меняет",{"type":21,"tag":22,"props":1085,"children":1086},{},[1087],{"type":26,"value":1088},"Порог входа в создание продуктов снизился радикально. Теперь важна не размер команды, а качество идеи и способность быстро итерировать.",{"type":21,"tag":22,"props":1090,"children":1091},{},[1092],{"type":26,"value":1093},"Один человек с правильными инструментами может конкурировать с командами. Не потому что он лучше — потому что AI убрал bottleneck в исполнении.",{"type":21,"tag":34,"props":1095,"children":1097},{"id":1096},"главный-навык-2026-года",[1098],{"type":26,"value":1099},"Главный навык 2026 года",{"type":21,"tag":22,"props":1101,"children":1102},{},[1103,1105,1110],{"type":26,"value":1104},"Не программирование. Не дизайн. А умение правильно декомпозировать задачу и поставить её AI. Это новый вид инженерии — ",{"type":21,"tag":96,"props":1106,"children":1107},{},[1108],{"type":26,"value":1109},"инженерия промптов и процессов",{"type":26,"value":1111},".",{"title":8,"searchDepth":196,"depth":196,"links":1113},[1114,1115,1116,1117],{"id":1005,"depth":196,"text":1008},{"id":1031,"depth":196,"text":1034},{"id":1080,"depth":196,"text":1083},{"id":1096,"depth":196,"text":1099},"content:blog:2026-03-10-ai-changed-rules.md","blog\u002F2026-03-10-ai-changed-rules.md","blog\u002F2026-03-10-ai-changed-rules",{"_path":1122,"_dir":6,"_draft":7,"_partial":7,"_locale":8,"title":1123,"description":1124,"date":1125,"tags":1126,"externalLinks":1127,"body":1129,"_type":203,"_id":1158,"_source":205,"_file":1159,"_stem":1160,"_extension":208},"\u002Fblog\u002F2026-03-09-struny-myslej","Струны мыслей","Зачем я завёл личный канал — место для мыслей, музыки и честных записей","2026-03-09",[935],{"telegram":1128},"tg:\u002F\u002Fresolve?domain=strunimisli&post=2",{"type":18,"children":1130,"toc":1156},[1131,1136,1141,1146,1151],{"type":21,"tag":22,"props":1132,"children":1133},{},[1134],{"type":26,"value":1135},"Решил завести этот канал для себя. Не для проекта, не для аудитории — просто место, куда можно положить мысли, которые сами просятся наружу.",{"type":21,"tag":22,"props":1137,"children":1138},{},[1139],{"type":26,"value":1140},"Я Александр. Разработчик, предприниматель, музыкант. Странное сочетание, но мне кажется, именно оно делает меня тем, кто я есть. В голове постоянно что-то происходит — то про AI и технологии, то про то, как строить дела, то про то, как всё это не усложнять. А ещё есть музыка. Она занимает огромное место в моей душе, и здесь я буду делиться своими произведениями — не потому что они идеальные, а потому что они мои.",{"type":21,"tag":22,"props":1142,"children":1143},{},[1144],{"type":26,"value":1145},"Это не бизнес-канал. Это дневник. Записи о том, что думаю, пока еду куда-то или сижу ночью с гитарой. Мысли об AI, который меня завораживает. Размышления о стартапах — не как учить, а как самому ошибаться и учиться. Продуктивность — но без токсичного позитива, просто честно о том, что работает и что нет.",{"type":21,"tag":22,"props":1147,"children":1148},{},[1149],{"type":26,"value":1150},"А ещё здесь будет музыка. Не концертные записи и не продакшн уровня студии — живой звук, мысли в нотах, иногда просто настроение, которое вылилось в мелодию.",{"type":21,"tag":22,"props":1152,"children":1153},{},[1154],{"type":26,"value":1155},"Если это кому-то откликнется — хорошо. Если нет — тоже.",{"title":8,"searchDepth":196,"depth":196,"links":1157},[],"content:blog:2026-03-09-struny-myslej.md","blog\u002F2026-03-09-struny-myslej.md","blog\u002F2026-03-09-struny-myslej",{"_path":1162,"_dir":6,"_draft":7,"_partial":7,"_locale":8,"title":1163,"description":1164,"date":1165,"tags":1166,"body":1168,"_type":203,"_id":1328,"_source":205,"_file":1329,"_stem":1330,"_extension":208},"\u002Fblog\u002F2026-03-08-architecture","Архитектура TiROBOTS: как устроена AI-платформа","Vue 3 + Strapi 5 + Yandex GPT — как всё это работает вместе","2026-03-08",[1167,419,372,371],"tirobots",{"type":18,"children":1169,"toc":1322},[1170,1175,1181,1224,1230,1235,1258,1263,1269,1277,1282,1288],{"type":21,"tag":22,"props":1171,"children":1172},{},[1173],{"type":26,"value":1174},"Когда я начинал TiROBOTS, стояла задача: построить платформу, которая будет легко масштабироваться и поддерживаться одним разработчиком.",{"type":21,"tag":34,"props":1176,"children":1178},{"id":1177},"стек",[1179],{"type":26,"value":1180},"Стек",{"type":21,"tag":125,"props":1182,"children":1183},{},[1184,1194,1204,1214],{"type":21,"tag":129,"props":1185,"children":1186},{},[1187,1192],{"type":21,"tag":96,"props":1188,"children":1189},{},[1190],{"type":26,"value":1191},"Frontend:",{"type":26,"value":1193}," Vue 3 + Tailwind CSS",{"type":21,"tag":129,"props":1195,"children":1196},{},[1197,1202],{"type":21,"tag":96,"props":1198,"children":1199},{},[1200],{"type":26,"value":1201},"Backend:",{"type":26,"value":1203}," Strapi 5 (headless CMS)",{"type":21,"tag":129,"props":1205,"children":1206},{},[1207,1212],{"type":21,"tag":96,"props":1208,"children":1209},{},[1210],{"type":26,"value":1211},"AI:",{"type":26,"value":1213}," Yandex GPT для текстов, Replicate для изображений",{"type":21,"tag":129,"props":1215,"children":1216},{},[1217,1222],{"type":21,"tag":96,"props":1218,"children":1219},{},[1220],{"type":26,"value":1221},"Инфраструктура:",{"type":26,"value":1223}," PM2, Nginx, Ubuntu",{"type":21,"tag":34,"props":1225,"children":1227},{"id":1226},"почему-strapi",[1228],{"type":26,"value":1229},"Почему Strapi",{"type":21,"tag":22,"props":1231,"children":1232},{},[1233],{"type":26,"value":1234},"Strapi даёт из коробки:",{"type":21,"tag":125,"props":1236,"children":1237},{},[1238,1243,1248,1253],{"type":21,"tag":129,"props":1239,"children":1240},{},[1241],{"type":26,"value":1242},"REST и GraphQL API",{"type":21,"tag":129,"props":1244,"children":1245},{},[1246],{"type":26,"value":1247},"Админку для контент-менеджмента",{"type":21,"tag":129,"props":1249,"children":1250},{},[1251],{"type":26,"value":1252},"Систему ролей и прав",{"type":21,"tag":129,"props":1254,"children":1255},{},[1256],{"type":26,"value":1257},"Кастомные контроллеры",{"type":21,"tag":22,"props":1259,"children":1260},{},[1261],{"type":26,"value":1262},"Это позволило сосредоточиться на бизнес-логике, а не на бойлерплейте.",{"type":21,"tag":34,"props":1264,"children":1266},{"id":1265},"архитектура-ai-пайплайна",[1267],{"type":26,"value":1268},"Архитектура AI-пайплайна",{"type":21,"tag":691,"props":1270,"children":1272},{"code":1271},"Тема → Генерация текста (GPT) → Ревью (Главный редактор) → Генерация изображения (Replicate) → Публикация\n",[1273],{"type":21,"tag":241,"props":1274,"children":1275},{"__ignoreMap":8},[1276],{"type":26,"value":1271},{"type":21,"tag":22,"props":1278,"children":1279},{},[1280],{"type":26,"value":1281},"Каждый этап — отдельный сервис. Если AI сгенерировал плохой текст, главный редактор отправляет на переработку.",{"type":21,"tag":34,"props":1283,"children":1285},{"id":1284},"уроки",[1286],{"type":26,"value":1287},"Уроки",{"type":21,"tag":1289,"props":1290,"children":1291},"ol",{},[1292,1302,1312],{"type":21,"tag":129,"props":1293,"children":1294},{},[1295,1300],{"type":21,"tag":96,"props":1296,"children":1297},{},[1298],{"type":26,"value":1299},"Не усложняй раньше времени.",{"type":26,"value":1301}," Начал с монолита, разделю когда понадобится",{"type":21,"tag":129,"props":1303,"children":1304},{},[1305,1310],{"type":21,"tag":96,"props":1306,"children":1307},{},[1308],{"type":26,"value":1309},"AI нужен контекст.",{"type":26,"value":1311}," Чем больше контекста даёшь модели, тем лучше результат",{"type":21,"tag":129,"props":1313,"children":1314},{},[1315,1320],{"type":21,"tag":96,"props":1316,"children":1317},{},[1318],{"type":26,"value":1319},"Мониторинг критичен.",{"type":26,"value":1321}," Когда роботы работают 24\u002F7, нужно знать что происходит",{"title":8,"searchDepth":196,"depth":196,"links":1323},[1324,1325,1326,1327],{"id":1177,"depth":196,"text":1180},{"id":1226,"depth":196,"text":1229},{"id":1265,"depth":196,"text":1268},{"id":1284,"depth":196,"text":1287},"content:blog:2026-03-08-architecture.md","blog\u002F2026-03-08-architecture.md","blog\u002F2026-03-08-architecture",{"_path":1332,"_dir":6,"_draft":7,"_partial":7,"_locale":8,"title":1333,"description":1334,"date":1335,"tags":1336,"body":1338,"_type":203,"_id":1456,"_source":205,"_file":1457,"_stem":1458,"_extension":208},"\u002Fblog\u002F2026-03-07-how-it-started","Как я решил автоматизировать контент-маркетинг","От идеи до продакшена — один разработчик и один AI","2026-03-07",[14,1167,1337],"история",{"type":18,"children":1339,"toc":1449},[1340,1345,1351,1356,1362,1367,1373,1378,1401,1406,1412,1417,1440,1444],{"type":21,"tag":22,"props":1341,"children":1342},{},[1343],{"type":26,"value":1344},"Всё началось с простого наблюдения: ведение контент-каналов отнимает безумное количество времени. Придумать тему, написать текст, сделать картинку, опубликовать в нужное время — и так каждый день.",{"type":21,"tag":34,"props":1346,"children":1348},{"id":1347},"проблема",[1349],{"type":26,"value":1350},"Проблема",{"type":21,"tag":22,"props":1352,"children":1353},{},[1354],{"type":26,"value":1355},"Я вёл несколько Telegram-каналов и тратил на это 10-15 часов в неделю. При этом качество контента было нестабильным — когда устаёшь, посты получаются хуже.",{"type":21,"tag":34,"props":1357,"children":1359},{"id":1358},"идея",[1360],{"type":26,"value":1361},"Идея",{"type":21,"tag":22,"props":1363,"children":1364},{},[1365],{"type":26,"value":1366},"А что если AI может не просто помогать с текстом, а полностью вести канал? С определённым tone of voice, стратегией, расписанием?",{"type":21,"tag":34,"props":1368,"children":1370},{"id":1369},"первые-эксперименты",[1371],{"type":26,"value":1372},"Первые эксперименты",{"type":21,"tag":22,"props":1374,"children":1375},{},[1376],{"type":26,"value":1377},"Начал с простого — скрипт, который:",{"type":21,"tag":1289,"props":1379,"children":1380},{},[1381,1386,1391,1396],{"type":21,"tag":129,"props":1382,"children":1383},{},[1384],{"type":26,"value":1385},"Берёт тему из списка",{"type":21,"tag":129,"props":1387,"children":1388},{},[1389],{"type":26,"value":1390},"Генерирует текст через Yandex GPT",{"type":21,"tag":129,"props":1392,"children":1393},{},[1394],{"type":26,"value":1395},"Создаёт изображение через Replicate",{"type":21,"tag":129,"props":1397,"children":1398},{},[1399],{"type":26,"value":1400},"Публикует в Telegram по расписанию",{"type":21,"tag":22,"props":1402,"children":1403},{},[1404],{"type":26,"value":1405},"Результат превзошёл ожидания. Посты были не хуже написанных вручную, а иногда даже лучше — AI не устаёт и не теряет фокус.",{"type":21,"tag":34,"props":1407,"children":1409},{"id":1408},"от-скрипта-к-платформе",[1410],{"type":26,"value":1411},"От скрипта к платформе",{"type":21,"tag":22,"props":1413,"children":1414},{},[1415],{"type":26,"value":1416},"Один скрипт превратился в платформу TiROBOTS. Добавил:",{"type":21,"tag":125,"props":1418,"children":1419},{},[1420,1425,1430,1435],{"type":21,"tag":129,"props":1421,"children":1422},{},[1423],{"type":26,"value":1424},"Веб-интерфейс для управления",{"type":21,"tag":129,"props":1426,"children":1427},{},[1428],{"type":26,"value":1429},"Роль «Главного редактора» — задаёт стратегию",{"type":21,"tag":129,"props":1431,"children":1432},{},[1433],{"type":26,"value":1434},"Несколько AI-роботов с разными специализациями",{"type":21,"tag":129,"props":1436,"children":1437},{},[1438],{"type":26,"value":1439},"Аналитику эффективности",{"type":21,"tag":34,"props":1441,"children":1442},{"id":886},[1443],{"type":26,"value":889},{"type":21,"tag":22,"props":1445,"children":1446},{},[1447],{"type":26,"value":1448},"Сейчас TiROBOTS — это полноценная платформа для автоматизации контент-маркетинга. Но я вижу её будущее шире — как хаб AI-роботов для разных задач бизнеса.",{"title":8,"searchDepth":196,"depth":196,"links":1450},[1451,1452,1453,1454,1455],{"id":1347,"depth":196,"text":1350},{"id":1358,"depth":196,"text":1361},{"id":1369,"depth":196,"text":1372},{"id":1408,"depth":196,"text":1411},{"id":886,"depth":196,"text":889},"content:blog:2026-03-07-how-it-started.md","blog\u002F2026-03-07-how-it-started.md","blog\u002F2026-03-07-how-it-started",{"_path":1460,"_dir":6,"_draft":7,"_partial":7,"_locale":8,"title":1461,"description":1462,"date":1463,"tags":1464,"body":1465,"_type":203,"_id":1499,"_source":205,"_file":1500,"_stem":1501,"_extension":208},"\u002Fblog\u002F2020-01-01-deneg-kotorykh-net","Деньги, которых нет","Человек, который обналичил всё","2020-01-01",[1337,16],{"type":18,"children":1466,"toc":1497},[1467,1472,1477,1482,1487,1492],{"type":21,"tag":22,"props":1468,"children":1469},{},[1470],{"type":26,"value":1471},"У меня была беседа с человеком, который успешно играл на бирже и однажды решил вывести все деньги в кэш.",{"type":21,"tag":22,"props":1473,"children":1474},{},[1475],{"type":26,"value":1476},"Уж так он успешно до этого играл, что денег оказалось очень много. Вот прям реально несколько чемоданов.",{"type":21,"tag":22,"props":1478,"children":1479},{},[1480],{"type":26,"value":1481},"Это, как он рассказывал, тоже было недёшево – комиссия за обналичивание такой суммы была запредельной, но он всё же пошел на эту трату, так как был твёрд в своем решении. В этот момент, говорит, когда ему озвучили размер комиссионных, он в первый раз почувствовал укол какой-то плохо еще осознаваемой мысли.",{"type":21,"tag":22,"props":1483,"children":1484},{},[1485],{"type":26,"value":1486},"Ну вот, говорит, посидел на чемоданах пару дней, он пошел и купил за наличные панамеру. Мог, в принципе, какую угодно тачку купить, но эта вот попала под руку, как говорится. Эта покупка была похожа на небольшой перерасчет портфеля акций в связи с коррекцией рынка. Пока он не видел этих денег вживую, он по-другому ощущал их ценность, поэтому для него было открытием, что оказывается вымутить понамеру, а для держателя капитала это можно объяснить коррекцией.",{"type":21,"tag":22,"props":1488,"children":1489},{},[1490],{"type":26,"value":1491},"Потом он сделал еще несколько покупок, но быстро понял, что это тупо. Тупо держать такую большую сумму в чемоданах, да еще и собранных в одном месте. Тупо, что это место – квартира. Тупо вообще вся эта затея.",{"type":21,"tag":22,"props":1493,"children":1494},{},[1495],{"type":26,"value":1496},"Деньги были переведены обратно в безнал.",{"title":8,"searchDepth":196,"depth":196,"links":1498},[],"content:blog:2020-01-01-deneg-kotorykh-net.md","blog\u002F2020-01-01-deneg-kotorykh-net.md","blog\u002F2020-01-01-deneg-kotorykh-net",{"_path":1503,"_dir":6,"_draft":7,"_partial":7,"_locale":8,"title":1504,"description":1505,"date":1463,"tags":1506,"body":1507,"_type":203,"_id":1531,"_source":205,"_file":1532,"_stem":1533,"_extension":208},"\u002Fblog\u002F2020-01-01-dragotsennyj-kamen","Драгоценный камень в куче угля","Не нулевая вероятность",[1337,16],{"type":18,"children":1508,"toc":1529},[1509,1514,1519,1524],{"type":21,"tag":22,"props":1510,"children":1511},{},[1512],{"type":26,"value":1513},"Однажды я нашёл в куче угля маленький рубин. Дело было так. Еще с детства у меня в голове отложилась информация, что в угле можно найти много чего интересного. Например, ракушку древнего моллюска. Потом я узнал как появляются драгоценные камни и где их чаще всего находят. В принципе, для получения каменного угля и для получения драгоценных камней необходимы сходные процессы – высокое давление и температура. Поэтому, есть не нулевая вероятность найти в куче угля драгоценный камень.",{"type":21,"tag":22,"props":1515,"children":1516},{},[1517],{"type":26,"value":1518},"Дело происходило, когда я служил в армии. Привезли уголь и сгрузили его на территории склада, к которому мы были прикомандированы. И вот сидели мы как-то с пацанами рядом с этой кучей, я им рассказываю про эту вот не нулевую вероятность и у них на глазах начинаю искать. Поискав какое-то время, бросаю это занятие, ребята посмеиваются. Потом, на следующий день я опять присаживался рядом с кучей и сидел, внимательно просматривая каждый квадратный сантиметр. Прошло несколько дней. И вот однажды я нашёл! Маленький камушек рубинового цвета. Кто-то из парней предложил попробовать поцарапать стекло этим камушком. Мол, если расцарапает, то да действительно рубин. У меня было зеркальце и мы попробовали им поцарапать поверхность. Камешек уверенно прорезал борозду на стекле!",{"type":21,"tag":22,"props":1520,"children":1521},{},[1522],{"type":26,"value":1523},"К чему я это рассказываю?",{"type":21,"tag":22,"props":1525,"children":1526},{},[1527],{"type":26,"value":1528},"Я много раз был свидетелем того, как происходили события, вероятность которых была крайне мала.",{"title":8,"searchDepth":196,"depth":196,"links":1530},[],"content:blog:2020-01-01-dragotsennyj-kamen.md","blog\u002F2020-01-01-dragotsennyj-kamen.md","blog\u002F2020-01-01-dragotsennyj-kamen",{"_path":1535,"_dir":6,"_draft":7,"_partial":7,"_locale":8,"title":1536,"description":1537,"date":1463,"tags":1538,"body":1540,"_type":203,"_id":1549,"_source":205,"_file":1550,"_stem":1551,"_extension":208},"\u002Fblog\u002F2020-01-01-lyudi-pozhivshie","Люди, пожившие на этом свете","Дети помогают не сойти с ума",[1539,16],"размышление",{"type":18,"children":1541,"toc":1547},[1542],{"type":21,"tag":22,"props":1543,"children":1544},{},[1545],{"type":26,"value":1546},"Люди, пожившие на этом свете, наполнятся воспоминаниями и размышлениями о событиях, которые травмируют их психику. Дети помогают не сойти с ума. Это банальная мысль – рождаемость должна быть, как минимум на том же уровне, как и смертность, а лучше выше, чтобы цивилизация развивалась. Но функция детей не только продолжение рода, но и помощь взрослым. Без них взрослые бы «загнались».",{"title":8,"searchDepth":196,"depth":196,"links":1548},[],"content:blog:2020-01-01-lyudi-pozhivshie.md","blog\u002F2020-01-01-lyudi-pozhivshie.md","blog\u002F2020-01-01-lyudi-pozhivshie",{"_path":1553,"_dir":6,"_draft":7,"_partial":7,"_locale":8,"title":1554,"description":1555,"date":1463,"tags":1556,"body":1557,"_type":203,"_id":1581,"_source":205,"_file":1582,"_stem":1583,"_extension":208},"\u002Fblog\u002F2020-01-01-pustye-otnosheniya","Пустые, ненужные отношения","Когда барахлит компас, смотрите на звёзды",[1539],{"type":18,"children":1558,"toc":1579},[1559,1564,1569,1574],{"type":21,"tag":22,"props":1560,"children":1561},{},[1562],{"type":26,"value":1563},"Как так получилось, что то, что имело большую ценность, стало пустым и ненужным? Я пытаюсь разгадать, что это? К чему этот урок? И закончен ли он?",{"type":21,"tag":22,"props":1565,"children":1566},{},[1567],{"type":26,"value":1568},"Может то, что мне сейчас кажется пустым, попозже будет видеться обратным?",{"type":21,"tag":22,"props":1570,"children":1571},{},[1572],{"type":26,"value":1573},"Чтобы продвигаться, нам необходимо принимать решения. Каждое принятое решение – это смена, корректировка курса. И получается, что мой корабль попал в магнитную аномалию. Компас показывает удивительное…",{"type":21,"tag":22,"props":1575,"children":1576},{},[1577],{"type":26,"value":1578},"Когда барахлит компас, отложите в сторону карты. Просто внимательно смотрите вперед, чтобы вовремя обруливать препятствия и ждите ночей, чтобы ориентироваться по звёздам.",{"title":8,"searchDepth":196,"depth":196,"links":1580},[],"content:blog:2020-01-01-pustye-otnosheniya.md","blog\u002F2020-01-01-pustye-otnosheniya.md","blog\u002F2020-01-01-pustye-otnosheniya",{"_path":1585,"_dir":6,"_draft":7,"_partial":7,"_locale":8,"title":1586,"description":1587,"date":1463,"tags":1588,"body":1589,"_type":203,"_id":1657,"_source":205,"_file":1658,"_stem":1659,"_extension":208},"\u002Fblog\u002F2020-01-01-sobralsya-ya-umirat","Собрался я умирать, ребята…","Не переживайте, речь не о суициде",[1539],{"type":18,"children":1590,"toc":1655},[1591,1595,1600,1605,1610,1615,1620,1625,1630,1635,1640,1645,1650],{"type":21,"tag":22,"props":1592,"children":1593},{},[1594],{"type":26,"value":1586},{"type":21,"tag":22,"props":1596,"children":1597},{},[1598],{"type":26,"value":1599},"Не переживайте, речь не о суициде. Просто что-то сегодня замкнуло в моей голове и как-то стало очень понятно, что времени-то всё меньше! А я туплю.",{"type":21,"tag":22,"props":1601,"children":1602},{},[1603],{"type":26,"value":1604},"Задал себе такой вот вопрос – вот если умру прям сейчас, что останется недоделанным? К осуществлению каких целей, желаний я даже не приступал, откладывая их «до лучших времен»?",{"type":21,"tag":22,"props":1606,"children":1607},{},[1608],{"type":26,"value":1609},"Ну набралось у меня парочка, да и то, в принципе, не такие уж и критично важные… Я уже так давно живу с пониманием механизма материализации мысли, что все мои мечты уже сбылись. Только и успеваю придумывать что-нибудь новое, потом реализовывать.",{"type":21,"tag":22,"props":1611,"children":1612},{},[1613],{"type":26,"value":1614},"В конечном итоге, каждый получает то, что он хочет. Та ситуация, в которой вы сейчас находитесь, образовалась в результате ваших стремлений и связанных с ними решений.",{"type":21,"tag":22,"props":1616,"children":1617},{},[1618],{"type":26,"value":1619},"Если вы предприниматель со стажем, то вы меня поймете. Когда над тобой нет начальника, то вы сами определяете, чем вам и когда заниматься. Это классная штука – свобода, но есть обратная сторона у этой медали. Впрочем, это не медаль. Свободу не вручают и не выдают в кассе. Свободу берут. И вот я беру уже эту свободу с 2003 года, как открыл свое первое юрлицо. Сначала о чем-то просто мечтаю, если мечта манит, то меняю статус «мечта» на «цель», потом делаю шаг на пути к ней, другой, третий и всегда (!) обнаруживаю, что мне помогают. Разное в помощь. Люди, конечно же, в первую очередь. Но частенько случаются случайности, типа того, как подходишь к пешеходному переходу и в этот момент, как раз загорается зеленый свет. Ну ладно, речь не о вселенской помощи.",{"type":21,"tag":22,"props":1621,"children":1622},{},[1623],{"type":26,"value":1624},"Я понял, что не так уж много, как оказалось, у меня таких мечт, которые я откладывал в долгий ящик… А мечты, которые я не успел воплотить – это и не мечты вовсе, а просто видение будущего. Вот будут еще дирижабли летать повсеместно, увидите сами!",{"type":21,"tag":22,"props":1626,"children":1627},{},[1628],{"type":26,"value":1629},"Да и хрен с ними, мне тут подумалось, с этими неисполненными мечтами. Отпустил их и понял… что готов умереть. Ничего такого страшного не произойдет. Я везде, где надо, продублировал доступы надежным людям к всяким там сайтам и панелям управления, ну а то, что загнется без меня, значит не так и нужно было…",{"type":21,"tag":22,"props":1631,"children":1632},{},[1633],{"type":26,"value":1634},"Эта вот «готовность» меня ошеломила.",{"type":21,"tag":22,"props":1636,"children":1637},{},[1638],{"type":26,"value":1639},"А вот дальше пришло осознание, что это есть главное отличие нас, мужчин, от женщин. Женщина должна жить ради жизни, а от мужчины требуется готовность умереть ради неё.",{"type":21,"tag":22,"props":1641,"children":1642},{},[1643],{"type":26,"value":1644},"Только не надо путать готовность и желание)",{"type":21,"tag":22,"props":1646,"children":1647},{},[1648],{"type":26,"value":1649},"Новый уровень свободы.",{"type":21,"tag":22,"props":1651,"children":1652},{},[1653],{"type":26,"value":1654},"А в ситуации, когда внутри нас борются два противоречивых желания, побеждает тот волк, которого мы лучше кормим",{"title":8,"searchDepth":196,"depth":196,"links":1656},[],"content:blog:2020-01-01-sobralsya-ya-umirat.md","blog\u002F2020-01-01-sobralsya-ya-umirat.md","blog\u002F2020-01-01-sobralsya-ya-umirat",{"_path":1661,"_dir":6,"_draft":7,"_partial":7,"_locale":8,"title":1662,"description":1663,"date":1463,"tags":1664,"body":1665,"_type":203,"_id":1704,"_source":205,"_file":1705,"_stem":1706,"_extension":208},"\u002Fblog\u002F2020-01-01-topchemy-na-meste","Топчемся на месте или двигаемся?","Стремление к гармонии — главный императив",[1539],{"type":18,"children":1666,"toc":1702},[1667,1672,1677,1682,1687,1692,1697],{"type":21,"tag":22,"props":1668,"children":1669},{},[1670],{"type":26,"value":1671},"Мы представляем из себя то, о чём думаем целыми днями. В каждом мгновении, которое мы проживаем, мы имеем возможность поменять направление нашего движения. Конечно, есть такое понятие, как инерция и поэтому после поворота руля, корабль еще всё равно двигается в прежнем направлении. Кроме того, иногда нужно сменить курс, чтобы обогнуть какое-то препятствие и в этот момент, со стороны кажется, что мы двигаемся совсем не в том направлении, в котором надо бы. Мы не плывем по течению, не плывем против течения, мы плывём к цели! Лавируя между кусками дерьма, плывущиму навстречу, мы можем даже в какой-то момент оказаться на месте, где уже были раньше и тогда кто-то имеет право сказать, что мы топчемся на месте. Но! Мы живы, мы вместе, а значит всё хорошо. Главное не забывать о цели. Вот о ней я и хочу порассуждать.",{"type":21,"tag":22,"props":1673,"children":1674},{},[1675],{"type":26,"value":1676},"За последнее время я все чаще дискутирую с разными людьми о цели бизнеса. В уставе каждой компании сказано, что цель бизнеса – прибыль. Поэтому, бизнесмены сначала очень удивляются и смотрят на меня, как на дурака, когда я им заявляю, что никогда не ставил прибыль во главу угла. Я хочу большего, чем просто прибыль. Стремление к гармонии – вот главный мой императив. А что такое гармония? Универсального ответа, справедливого для всех, наверное нет. Да я и не хочу говорить за всех. Скажу за себя – гармония это когда совесть не болит. А у меня она не болит. Я знаю, что есть за мной грешки, типа не заплаченных вовремя пенсионных взносов или налогов, но всё равно не болит! И не потому, что знаю, как распределяются эти налоги, а потому знаю, что я, как единица, приношу ПОЛЬЗУ окружающим меня людям. Польза эта выражается по разному. Это может быть быстрая реакция на сломавшийся сервер, может просто подбадривающие слова, а может и обратное – вот к примеру, вчера я сознательно отключил сервер одной фирме, которая уже пять месяцев не платит за хостинг. У нас там такие отношения с владельцами компании, что я могу быть спокоен – эти неоплаченные месяцы в конце концов будут всё же оплачены. Я и не отключал, просто напоминал об этом периодически управляющим. У меня есть понимание, что тот факт, что я всё же отключил сервер, создало проблемы для управляющих и, может быть, их даже могут уволить. Но уволят их за халатность, а это значит эта компания получит шанс стать лучше (если, конечно, на их место придут менее халатные люди). А те, кого уволят, получат шанс задуматься над своими ошибками и больше их не совершать.",{"type":21,"tag":22,"props":1678,"children":1679},{},[1680],{"type":26,"value":1681},"Кто-то согласен работать с мудаками, лишь бы они деньги платили. Они любят говорить фразу: «Ничего личного – это бизнес». А я не такой! Как только я вычисляю мудака, я стремлюсь порвать с ним отношения. И не жалко мне незаработанных миллионов!",{"type":21,"tag":22,"props":1683,"children":1684},{},[1685],{"type":26,"value":1686},"Такая стратегия возможна, только когда есть на кого опереться. Я и опираюсь. Опираюсь на родителей, живя со своей женой в одной с ними квартире. Опираюсь на жену, когда не приношу по несколько месяцев денег в дом и мы оплачиваем продукты и секции там всякие, на которые ходит ребенок, её зарплатой. Опираюсь на друзей, когда прихожу к ним, чтобы погреться немного.",{"type":21,"tag":22,"props":1688,"children":1689},{},[1690],{"type":26,"value":1691},"Опираюсь и знаю, что моя стратегия, как бумеранг, приносит мне счастье. Не контактировать с мудаками – это ли не счастье? Не счастье ли иметь теплые дружественные отношения с клиентами? А не счастье ли, когда твой сотрудник, говорит самокритично о своей работе? Я уже долго следую своей стратегии и это дает плоды – мудаков в моем близком окружении нет. Я счастлив) А еще я убежден, что следуя этой стратегии дальше, наша с тобой, Светик, фирма наберет обороты, достаточные, чтобы обрести финансовую независимость.",{"type":21,"tag":22,"props":1693,"children":1694},{},[1695],{"type":26,"value":1696},"Мы не топчемся на месте. Мы развиваемся и этот процесс не всегда напоминает рост дерева. Потому что мы не деревья. Мы делаем ошибки, учимся на них. Или не учимся и тогда, ситуации повторяются, пока мы не научимся.",{"type":21,"tag":22,"props":1698,"children":1699},{},[1700],{"type":26,"value":1701},"У меня спрашивают, трудно ли быть предпринимателем. Надо просто любить людей, отвечаю я им. И вот этому-то и приходится всё время учиться. Как только научишься немного, обретешь внутренний стержень. Учась дальше, обретаешь надежную команду. Продвигаясь дальше в своем обучении, обретаешь хороших клиентов. А там и благоденствие недалеко!",{"title":8,"searchDepth":196,"depth":196,"links":1703},[],"content:blog:2020-01-01-topchemy-na-meste.md","blog\u002F2020-01-01-topchemy-na-meste.md","blog\u002F2020-01-01-topchemy-na-meste",1784082563990]