AITODO — Мой день
Редизайн aitodo вокруг одной страницы «Мой день»: режим дня + задачи на таймлайне, фокус, клиенты, бэклог, ИИ-строка. Концепция: myvisionagency.ru/lab/aitodo-day
В РАБОТЕS1 · С1 · Мой день5/6
Цель: Страница /my-day: таймлайн (режим дня + задачи), режим в БД, галочки, панели Фокус/Бэклог
готовS2 · С2 · Клиенты3/3
Цель: Сущность clients + touches, страница-пайплайн, панель «сегодня написать» на Моём дне
готовS3 · С3 · Лия-руки1/1
Цель: ИИ-строка на Моём дне: создание задач/бэклог/перенос через tool-парсер с превью-подтверждением
готовS4 · С4 · Полировка3/3
Цель: Вкладка «Неделя», объединение двух страниц фокуса, drag идей из бэклога на таймлайн
готовS5 · С5 · Лия видит всё4/4
Цель: Клиенты и режим дня в телеграм-Лие (lia-v2) + веб ИИ-строке; клиенты в утреннем брифе
готовS6 · С6 · Виджеты для ПК9/9
Цель: Десктопные виджеты Windows (спорт, задачи/бэклог, фокус поверх окон, музыка) с синхронизацией через API aitodo
ревьюS7 · С7 · Проекты и рабочий день8/8
Цель: Раздел «Проекты» (проекты по группам, спринты со сроком, задачи, бэклог проекта), привязка задач и бэклога к проекту, виджеты «Проекты» и «Мой день»
В РАБОТЕS8 · С8 · Входящие: одно место для всего20/21
Цель: Одно место, куда падает что угодно из любого канала (текст, пересылка, голос, файл) и не теряется: сущность «входящие», Лия как приёмник, виджет и страница для разбора
ревьюS9 · С9 · План дня и поля задачи6/6
Цель: Один список разбора, перенос задач мышкой на время, честные поля задачи и пометка встречи
В РАБОТЕS10 · Проверки по сроку0/1
Цель: Отложенные проверки: сработало ли то, что чинили
ревьюS11 · С11 · Битрикс: задачи и встречи с работы5/5
Цель: Забирать задачи и встречи из рабочего портала в план дня, уведомлять в телеграм
ревьюS12 · С12 · Качество разбора встреч5/5
Цель: Русский язык без иероглифов, отбор задач от болтовни, контекст встречи в каждом пункте
готовS13 · С13 · Знания по проектам4/8
Цель: Единый склад материалов по проектам и контекст, который ИИ находит сам
Ворклог (места остановки)
Спроектирован склад знаний по проектам (страница /lab/aitodo-znaniya) и сделан первый этап: у проекта появились контур, вид, паспорт и алиасы, плюс поиск проекта по фразе человека. Проверено на живых данных: «фл» находит Фит Лид, «навесы» — клиента, двусмысленное «контент завод» просит уточнить. Контуры и алиасы проставлены у шести проектов. Ключевое архитектурное правило зафиксировано: сначала код сужает до проекта, потом поиск по смыслу внутри границ.
→ 1) Владельцу заполнить тексты паспортов на /projects. 2) Решить контур «Пульс цен» и создавать ли три бренда первой работы. 3) Второй этап: материалы, куски, векторный поиск, страница «Знания». 4) Не забыть: перезапуск разбора встречи 9 по просьбе владельца («давай потом»).
Разбор встреч: починены три жалобы владельца. Иероглифы в задачах (китайская модель уплывала на свой язык) — правило в промптах плюс проверка кодом с повтором. Мусорные задачи («Допилить», «Нажать ещё раз») — причина была в самом промпте, который требовал выписывать всё подряд; добавлены правила и отбор кодом перед Входящими. Контекст встречи (название, тема, дата) теперь виден в каждом пункте и в бэклоге, задача помнит встречу через meeting_id, миграция 028. Плюс починен виджет: окно замирало на «Разбираю встречу», потому что отрисовка падала на решениях-объектах.
→ 1) Предложено владельцу перезапустить разбор встречи 9 «навесы» (около 2-3 руб): даст тему по-русски и меньше мусора, дублей не будет — в повторном разборе есть защита по отметкам inbox_item_id. Ждём «да». 2) Проверить на следующей записанной встрече, что иероглифов больше нет и задач стало меньше при том же смысле. 3) Не сделано из плана: контуры работа1/работа2/своё, Outlook, вместимость дня.
Спроектировал систему (страница myvisionagency.ru/lab/aitodo-sistema): встречи до конца, три контура, связь календарей, что ещё оптимизировать. Затем сделал первую часть по факту — чтение Битрикса: 4 живые задачи и 2 встречи перенесены в план, встречи видны в «Моём дне» на правильном времени. Две ловушки портала разобраны и записаны в код: право «task» в единственном числе и перевёрнутый фильтр «!=STATUS» со списком. Плюс смещение UTC-отметок календаря на пояс. Наружу пока не пишем: портал рабочий, запись — отдельное решение.
→ 1) Первое уведомление в телеграм пришло с путаницей: из-за перевёрнутого фильтра в него попали две уже закрытые задачи. Фильтр исправлен, задачи убраны, второе сообщение верное. 2) Outlook: проверить, пускает ли обычного пользователя к своему календарю (десять минут), от этого зависит запись. 3) Контуры (работа 1 / работа 2 / своё) ещё не сделаны — задачи из Битрикса пока помечаются словом «битрикс». 4) Отложенные задачи портала (статус 6) не тянем — решить, надо ли.
Виджет встреч: часы считались двумя таймерами и удваивали длительность (получасовая встреча уезжала на сервер как час) — теперь время от метки, плюс спасение из зависшей отправки (через 6 минут кнопка «Проверить разбор»). Разбор встречи: включил режим json и глушение размышления у модели (она присылала свой монолог вместо ответа и теряла окна), чистку латинских двойников в русских словах, повтор окна при сбое. Расшифровка: выкидываю выдумки Whisper на тишине («продолжение следует», подписи субтитров) и повторы — на встрече 4 это 126 отрезков из 380. AITODO: шесть правок пользователя — один список разбора, страница планирования дня с переносом мышкой, конвертация со временем, перенос задач в «Моём дне», поля «Когда начать» и «Сколько времени», описание с файлами и пометка встречи. Миграция 026 на проде, проверено в браузере.
→ 1) Проверить на следующей записи встречи, ушло ли удвоение фраз внутри реплики: если осталось — причина в самом звуке (эхо из колонок в микрофон), а не в расшифровке. 2) Отдельная поломка, не трогал: крон ИИ-офиса сыплет «run_cron_task() takes 3 positional arguments but 4 were given». 3) Проверка здоровья бэкенда в docker дёргает curl, которого нет в образе — контейнер вечно «unhealthy». 4) Статус в карточке задачи остался системным select — предложить заменить на кнопки, как приоритет.
Модель разбора переведена на DeepSeek V4 Flash: дешевле gpt-4o-mini и заметно точнее в формулировках и в деталях. По пути добавлена устойчивость к обрезанным и пустым ответам, разведены решения и задачи, и найдена грабля OpenRouter: просьба о скорости без фильтра точности уводит к пожатой копии модели, из русского текста выпадают буквы. Документы и PDF по обеим встречам перевыпущены.
→ Владелец подтвердил: боты в Телемост не нужны, всё идёт через виджет на его ПК. Значит следующее по этой линии — автоподсказка «идёт разговор, писать?» по занятому микрофону и наблюдатель за папками записей. Кроме этого не сделано: вечерний разбор и план на завтра, страница встреч в вебе, посадки-пульты. Проверить мышью кнопку «Дослать запись». Во «Входящих» скопилось 30 пунктов с двух встреч — им нужен разбор.
Главная претензия владельца закрыта: задачи больше не приписываются ему поголовно. Ответственный выводится кодом из метки дорожки (микрофон против звука системы), а не из слова «я» в реплике. На живой встрече это дало 2 своих задачи вместо 15 и корректную передачу дел дизайнеру.
→ Владелец спрашивает про готовые опенсорс и коммерческие решения. Ответ: расшифровка и роли у нас уже дешёвые и рабочие, слабое место — модель разбора. Предложить А/Б: тот же транскрипт на сильной модели (около 6-8 рублей на встрече 43 минуты) против текущего gpt-4o-mini за рубль. Для имён вместо «Собеседник» — локальная диаризация WhisperX плюс pyannote на его RTX 3050, бесплатно. Ждём решения.
Запись встречи не уходила на сервер: nginx пускал 10 МБ, а запись на 1,5 часа весит 28. Лимит поднят до 300 МБ, таймауты разбора до 30 минут, запись дослана из файлов на диске. По пути найдено и починено ещё четыре вещи: склейка двух дорожек без времени (диалог рассыпался, окно было одно), кривая кодировка папки встреч из старой сборки, страница ошибки nginx вместо человеческого текста, и склейка повторов, которая теряла задачи. Добавлена кнопка «Дослать запись».
→ Хочет ли владелец перегнать запись 1 ч 35 мин заново ради таймкодов и правильного диалога по ролям (около 12 рублей за распознавание двух дорожек). Решение по модели разбора: разброс между прогонами на gpt-4o-mini заметный. Проверить мышью кнопку «Дослать запись». Не сделано: вечерний разбор и план на завтра, автоподсказка записи по занятому микрофону, наблюдатель за папками записей, страница встреч в вебе, посадки-пульты.
Владелец был прав: разбор охватывал только начало встречи. Расшифровка оказалась полной, виновата была одна просьба на все 43 минуты. Разбор переделан на окна с последующей сшивкой кодом и смысловой склейкой повторов: на той же записи решений стало 8 вместо 2, задач 12 вместо 2, факты по всей встрече. Заодно вычищены слово null в ответственном и сроке, фальшивые «0% времени» у упомянутых людей, а задачи без владельца теперь доезжают до «Входящих».
→ Решение владельца по модели разбора: сейчас gpt-4o-mini и около 1 рубля за встречу; сильная модель даст более точные формулировки за ~5 рублей. Роли по-прежнему не разделяются на записях с одной дорожкой. Не сделано: вечерний разбор и план на завтра, автоподсказка записи по занятому микрофону, наблюдатель за папками записей, страница встреч в вебе, посадки-пульты.
Встречи теперь дают два документа: подробный md с таймкодами, задачами по людям и тем, что требует подтверждения, и синопсис одной страницей в PDF. Для этого расшифровка переведена на сегменты с временем, промпт разбора расширен, добавлены маршруты документов и пересборки разбора. Виджет пишет файлы и печатает PDF сам. Отдельно выяснилось, что владелец всё время работал на сборке от 12 августа: пересобрал и запустил актуальную.
→ Решение владельца: модель разбора (0,3 руб мало деталей против ~5 руб подробно, пересборка без повторной расшифровки уже готова). Не сделано: вечерний разбор и план на завтра, автоподсказка записи по занятому микрофону, наблюдатель за папками записей, страница встреч в вебе, посадки-пульты.
Календарь виджета доведён по замечаниям: день, время и длительность в форме постановки стали полями, клик по задаче открывает карточку с правкой и действиями (была заглушка). Прогнали разбор на живой 43-минутной встрече: 24 секунды на расшифровку, около 3 рублей, саммари и решения по делу, две задачи уехали во «Входящие» сами. Подтвердилось ограничение: из записи с одной сведённой дорожкой роли не достать, «кто что говорил» получается только при записи двумя дорожками или за платную разметку.
→ Владелец: проверить мышью правку времени и карточку задачи; решить, перегонять ли ту встречу за ~23 ₽ ради ролей; писать следующие встречи виджетом «Встреча», чтобы роли были бесплатно. Не сделано: вечерний разбор и план на завтра, автоподсказка записи по занятому микрофону, наблюдатель за папками записей, страница встреч в вебе, посадки-пульты. Установщик 1.1.1 устарел: в нём нет виджетов «Встреча», «Входящие» и недели в календаре.
Спринт 8: «Входящие» появились везде (бэкенд, API, страница /inbox, виджет), Лия стала приёмником (пересылки, файлы, голос, инструмент «запиши»), расшифровка переведена на Groq по 3,6 ₽ за час, сделан виджет записи встреч с двумя дорожками и разбор встречи (саммари, кто что говорил, решения, задачи с ответственными; свои задачи автоматом во «Входящие», чужие в «ждём от других»). Календарь: в виджете появилась неделя колонками с раскладкой по часам, прибитая шапка дней, клик по клетке, легенда цветов и разворот окна; в вебе починен щелчок по времени (было 15:15 вместо 15:00).
→ Владелец: тестовая запись встречи на 30 секунд перед реальным созвоном; проверить пересылку в Лию с телефона; завести проекты Пульс цен и Фит Лид, чтобы в календаре заработали цвета (сейчас все задачи без проекта и легенда показывает только «моя задача»). Не сделано: вечерний разбор и план на завтра, автоподсказка записи по занятому микрофону, наблюдатель за папками записей, страница встреч в вебе, посадки-пульты. Установщик надо пересобрать: 1.1.1 без виджетов «Встреча» и «Входящие».
Хвост сессии: виджеты не были запущены (версия из исходников не переживает перезагрузку ПК, установщик 1.1.1 собран, но ещё не установлен) — владелец не мог их найти. Запустил, поднял окна наверх, показал путь к установщику и открыл папку. Кода не менял.
→ Владелец ставит desktop/release/Виджеты aitodo Setup 1.1.1.exe (закрыв версию из исходников через трей). Согласован, но НЕ начат спринт 8 «Пульт: четыре посадки»: посадка = группа проектов, подраздел = проект; посадки Пульс цен, Фит Лид (Фит Лид/СММ агент/Искра), Клиенты, Мои проекты (Контент завод 24, ЛидФордж, ИИ Полигон); дизайн «тёмный пульт, крупные цифры, всё в одном экране», горячие даты = просроченные дедлайны + 7 дней + конец активного спринта + проверки по сроку из Atlas /api/dev (потребует токен дашборда в .env на aitodo). Ждёт «ок» на план.
Правка по замечанию владельца: виджет «Мой день» рисовал режим дня и задачи одним списком, а в вебе это две дорожки. Переделан в такой же таймлайн: жёлоб часов, дорожка «Режим дня», дорожка «Задачи и встречи», блоки по времени, подсветка текущего, красная линия «сейчас», автопрокрутка к текущему часу, пересечения задач делят дорожку по колонкам, шапка с кнопками прибита сверху. Заодно найден баг класса «атрибут hidden перебивался классами с собственным display» — скрытая форма «Поставить на время» была видна всегда; добавлено общее правило в css. Установщик пересобран как 1.1.1.
→ Владелец ставит 1.1.1 и смотрит день в работе. Дорожка «Задачи и встречи» пока пустая: задач на сегодня нет, наполнится когда пойдут задачи из проектов.
Спринт 7 «Проекты и рабочий день» собран и выкачен. В aitodo появился раздел /projects: проекты по группам (Работа, Свои проекты, Клиенты) с цветом и счётчиками, спринты со сроком и целью, задачи с оценкой, бэклог внутри проекта, перенос задачи в «Мой день» на слот. Задача теперь знает свой проект и спринт, поэтому общий бэклог фильтруется по проекту, а на таймлайне задачи окрашены цветом проекта. В приложении на ПК два новых виджета: «Проекты» и «Мой день». Найдено и починено по ходу: связь tasks.project_id стояла без обнуления (удаление проекта упало бы), новый активный спринт гасил сам себя, страница бэклога показывала 16 идей из 21, виджет «Задачи» не показывал подпункты (сервер отдаёт subtasks, а читался checklist), перенос в день без времени садился на 00:00. Проверено ответами сервера, запросами в базу, прогоном мышью в браузере и снимками окон виджетов; тестовые проект и задачи удалены.
→ Владелец заводит свои проекты (Пульс цен, Фит лид, Контент завод, ЛидФордж, клиенты) и раскладывает по группам, ставит установщик 1.1.0 из desktop/release. Проверить мышью: смена статуса задачи, перенос в спринт списком, оценка в минутах, архив проекта, действия в новых виджетах. Не закрыто: работа без сети, перезагрузка с включённым фокусом, агент-ревьюер. Отдельно висит healthcheck бэкенда: зовёт curl, которого нет в образе, контейнер вечно unhealthy.
Виджеты для ПК доведены до рабочего вида. Учётка привязана разовым долгим ключом в шифрованном хранилище Windows: экран входа больше не спрашивает ничего, остался запасным путём. Найдено и починено по ходу: автозапуск из исходников прописывал electron.exe без папки приложения (Windows на входе показывал стандартное окно Electron со ссылками на репозиторий), теперь автозапуск только для установленной версии; папка настроек принудительно одна для обеих версий (app.setName), иначе после установки пришлось бы входить заново; битый файл состояния молча сбрасывал настройки и очередь неотправленных отметок, теперь метка порядка байтов срезается, а нечитаемый файл откладывается как state.json.broken. Доказано снимками: живые данные, обнуление суток по местной полуночи, фокус поверх развёрнутого браузера, чтение папки с музыкой. Тестовые данные и лишние нормы вычищены, тестовые сессии фокуса остановлены.
→ Владелец ставит установщик из desktop/release и закрывает версию из исходников через трей. После установки проверить мышью: свернуть, закрыть, вернуть из трея, создать и удалить норму, записать задачу в бэклог, выбрать свою папку с музыкой. Не закрыто: живая проверка без сети, перезагрузка с включённым фокусом, агент-ревьюер. Отдельно висит: healthcheck бэкенда в docker-compose.yml зовёт curl, которого нет в образе, контейнер поэтому вечно unhealthy.
Спринт 6 «Виджеты для ПК». Бэкенд выкачен на прод: daily_target у workout_types (миграция 021), GET /api/workouts/today с часовым поясом, tz_offset_minutes в статистике фокуса. Проверено ответами сервера и запросами в базу, включая границу суток (01:05 Екб попадает в сегодня) и доступ чужого пользователя (404 и пустые списки), тестовые данные вычищены. Собрано десктопное приложение в desktop/: Electron без нативных модулей, трей, автозапуск, три виджета, музыка из локальной папки, очередь отправки для работы без сети. Установщик 1.0.0 собран, приложение запускается, раскладка окон проверена скриншотом.
→ Владелец входит в приложение своей почтой и паролем, после этого прогнать вживую: завести норму, отметить подход, записать задачу в бэклог, включить фокус поверх браузера и VS Code, подключить папку с музыкой. Затем агент-ревьюер и закрытие ACCEPTANCE. Отдельно: healthcheck бэкенда в docker-compose.yml зовёт curl, которого нет в образе, поэтому контейнер вечно unhealthy.
UX-правки Моего дня по фидбеку: таймлайн 05:00-22:00 (с авторастяжкой при выходе за рамки); клик по пустому месту в дорожке Задачи открывает форму создания задачи с этим временем (шаг 15 мин), клик в дорожке Режим дня — добавление блока режима с префиллом времени; в панели Бэклог поле быстрого ввода идеи (Enter) без перехода на /backlog.
→ Владелец пользуется, копим фидбек.
Лия теперь видит клиентов и режим дня. ВАЖНОЕ ОТКРЫТИЕ: живой телеграм-бот = lia-v2 (/opt/lia-v2, контейнер lia-backend, network host, aitodo API через localhost:8000 + X-User-Id), а telegram-bot из TODO-New выключен. В lia-v2 добавлены 8 тулов (клиенты: список/сегодня/добавить/обновить/касание; режим: день/отметить/добавить блок), клиенты и режим в утреннем брифе 08:00 Екб. Веб ИИ-строка научилась «добавь клиента Сергей с Авито, написать в четверг» и «написал Марине, следующее касание вторник». Всё задеплоено, 51 тул зарегистрирован, эндпоинты проверены через X-User-Id.
→ Владелец тестит: в TG спросить Лию «кому написать сегодня?», «добавь клиента...», «отметь спорт»; в вебе — чипы ИИ-строки. Возможное следующее: отдельное напоминание о просроченных касаниях днём, голосом в TG.
Закрыты С2 и С4. Клиенты: мини-пайплайн (6 статусов, источники, касания с датой следующего касания, архив), страница /clients, панель «сегодня написать» на /my-day, пункт в TopNav, миграция 020. С4: вкладка «Неделя» на /my-day, drag идей из бэклога прямо на таймлайн, полоска супер-фокуса на /focus. Всё задеплоено на aitodo.myvisionagency.ru, alembic 020 (stamp — таблицы создал create_all).
→ Все 4 спринта концепции закрыты. Владелец проверяет глазами: /clients (добавить первых клиентов), неделя, drag. Возможные следующие шаги по фидбеку: клиенты в ИИ-строке Лии («добавь клиента Сергей с Авито»), напоминания о касаниях в Telegram, сжатие «Ещё».
По фидбеку владельца подтянул прод к макету: верхняя навигация вместо сайдбара на 18 пунктов (везде) + полная ИИ-строка Лии на «Моём дне» (создание задач/бэклога фразой, перенос, отметка выполненного — всегда через превью-подтверждение). Бэкенд /api/ai-command/parse на gpt-4o-mini (существующий ключ проекта), LLM только парсит намерение, исполнение — детерминированные API. Задеплоено на aitodo.myvisionagency.ru.
→ Владелец проверяет глазами: верхнее меню, /my-day с ИИ-строкой (примеры-чипы). Дальше С2 «Клиенты» (clients+touches+пайплайн+пункт в нав) и С4 (неделя, объединение фокуса, drag бэклога).