- паспорт: сервис объявлен архивом с бессрочным хранением записей и текстов, машинная вычитка расшифровки внутри границ, приложение — основной вход; добавлены две границы: не файловое хранилище общего назначения и не биллинг; - заведены цели upload-reliability, user-settings, usage-stats и тринадцать задач; очередь пересобрана — сперва починки, затем разведки о хранилище, затем доступ и владелец, и только потом экраны; - архитектура: четыре новых открытых вопроса — приём большого файла, учёт расхода, срок хранения, потолок шести часов.
6.0 KiB
6.0 KiB
Роадмап
Состояние проекта: что приложение уже умеет и чего ещё не умеет.
Цель — возможность приложения: файл типа goal (🎯) в
items/. Её задачи здесь не перечисляются — перечень даёт
tasks.py list --goal <слаг>.
- Запланировано — очередь значима и обосновывается прозой;
- Направления — очереди нет, тянутся долго;
- Сопровождение — чем держат проект: инструмент, процесс, эксплуатация. Не возможности приложения, и отдельно — чтобы не читаться как обещание продукта;
- Готово — достигнутое: строку пишет
tasks.py close <цель> --implemented, ссылки на файл в ней нет — файл удаляется, поведение живёт в спеках. Стоит последней: копится.
Секции канонические и переименованию проектом не подлежат:
у каждой свой смысл, и в достигнутое пишет сам close. Порядок
тоже канонический. Английский
вариант — Planned | Directions | Operations | Done, один язык на весь
индекс.
Запланировано
- 🎯 Сервисом пользуются несколько человек, и записи одного не видны другому — У задачи нет владельца, а HTTP API открыт наружу без аутентификации: пригласить второго человека сейчас значит открыть ему чужие расшифровки.
- 🎯 Записи загружаются и читаются в приложении, которое ставится на телефон — Сегодня записи принимает только бот и голый HTTP API без интерфейса: отдать сервис человеку, у которого нет Telegram, нечем.
- 🎯 Загрузка большого файла доходит до сервиса и не повторяется впустую — Приём рассчитан на голосовое в пару мегабайт: обрыв на середине гигабайтного файла начинает загрузку заново, а один и тот же файл распознаётся повторно за наши деньги.
- 🎯 Пользователь настраивает, что сервис делает с его записями — Уровни текста считает платная модель, а уведомления приходят одним общим способом: отказаться от лишнего и выбрать свой канал пользователю нечем.
- 🎯 Пользователь узнаёт о готовности текста, не держа приложение открытым — Расшифровка занимает минуты, и всё это время человек либо смотрит на экран с опросом статуса, либо забывает вернуться.
Направления
- 🎯 Принимается запись любого формата, включая дорожку из видео — Конвертер вызывается одной командой ffmpeg, проверенной на голосовых Telegram; что он берёт помимо них, никто не мерил.
- 🎯 Запись длиной до шести часов доходит до текста — Потолок не замерен ни на одном звене: Telegram не отдаёт больше 20 МиБ, границы модели deferred-general неизвестны, а перезапуск на середине начинает распознавание заново.
- 🎯 Приложение показывает, о чём запись, не читая её целиком — Расшифровка часового разговора — это стена текста: найти в списке нужную запись и вспомнить, о чём она, сегодня нечем.
Сопровождение
- 🎯 Состояние сервиса видно без чтения логов — Отказ замечает пользователь, а не владелец: оповещения нет, а путь записи по конвейеру собирается глазами по логам контейнера.
- 🎯 Владелец видит, кто сколько загрузил и во что это обошлось — Распознавание и языковая модель оплачиваются по факту, а счёт приходит одной суммой: кто её набрал, из сервиса не выясняется.
Готово
- 2025-08-14
telegram-transcription— Голосовое сообщение из Telegram возвращается текстом. Первый вход сервиса: бот принимает голосовое, аудиофайл и документ с аудио и отвечает расшифровкой. - 2025-08-08
api-transcription— Запись, отданная по HTTP, возвращается текстом. Программный вход: файл отдаётся формой, готовность и текст забираются опросом статуса задачи.