Нарезка задач под целевое состояние: PWA, вход, хранилище

Роадмап: web-access переименована под приложение, которое ставится на
телефон; заведена цель ready-notification — уведомление о готовности
без открытого приложения.

Беклог: десять задач. Многопользовательская цепочка (oidc-login,
record-ownership, telegram-account-link), веб (json-api-for-spa,
spa-skeleton, upload-and-status-screen, records-list-screen,
installable-pwa), уведомления через apprise и ntfy, разведка выбора
фреймворка. Очередь: долги, хранилище, вход, приложение.

Решение сменилось с htmx на SPA, поэтому conventions/web-ui.md снята
целиком и оставлена честной строкой до итога разведки. Открытые вопросы
архитектуры, границы паспорта и триггеры метки ревью приведены в
соответствие.
This commit is contained in:
av
2026-08-10 21:36:54 +03:00
parent 4d1c2bf44c
commit 115b3796e8
19 changed files with 536 additions and 160 deletions
+16 -9
View File
@@ -1,19 +1,26 @@
# 🎯 Записи загружаются и читаются в браузере
# 🎯 Записи загружаются и читаются в приложении, которое ставится на телефон
- **Тип:** goal
- **Секция:** Запланировано
- **Зачем:** Сегодня записи принимает только бот и голый HTTP API без интерфейса: отдать сервис человеку, у которого нет Telegram, нечем.
Приложение получает поверхность, на которой запись загружают и забирают текст,
не открывая Telegram и не вызывая API руками. Конвейер обработки при этом
остаётся прежним — меняется только вход и способ показать результат.
не открывая Telegram и не вызывая API руками. Ставится оно на телефон и
открывается с ярлыка, как обычное приложение. Конвейер обработки при этом
остаётся прежним — меняется вход и способ показать результат.
Границы взяты уже: запись звука в самом приложении и работа без сети за целью
**не стоят** — файл выбирают в системном диалоге, а без сети приложение
показывает, что связи нет.
## Завершение
1. Страница принимает файл формой и заводит задачу — ту же, что заводит бот.
2. Состояние задачи видно на странице и обновляется само, пока задача не дошла
до `done` или `failed`; отказ показывается человекочитаемым текстом.
3. Готовый текст читается и копируется со страницы целиком, без деления на
части.
1. Экран принимает файл и заводит задачу — ту же, что заводит бот.
2. Состояние задачи видно на экране и обновляется само, пока задача не дошла до
`done` или `failed`; отказ показывается человекочитаемым текстом.
3. Готовый текст читается и копируется с экрана целиком, без деления на части.
4. Список своих записей открывается и листается.
5. Всё перечисленное работает без JavaScript — формой и переходом по ссылке.
5. Приложение ставится на телефон из браузера и запускается с ярлыка на
отдельном экране, без адресной строки.
6. Открытое без сети, приложение показывает это состоянием, а не пустой
страницей и не ошибкой браузера.