feat: env-driven upload limits + request timeout, inline video playback, range requests
- Add UPLOAD_FILE_LIMIT_MB/UPLOAD_TOTAL_LIMIT_MB env (defaults 50/200), compute request timeout from total limit or UPLOAD_REQUEST_TIMEOUT_MS - Expose upload limits via /api/public-settings and sync in frontend (remove hardcoded 50MB assumption) - Add byte-range support in storage (getRange/streamRangeTo) and serve Content-Range/Accept-Ranges for S3/local - Implement inline playable video delivery for browser formats (mp4/m4v/webm/ogv) with ?play=1, range requests, proper 206/416 - Add video modal in journal UI with player and download fallback - Update docs (AGENTS.md/PRD.md/README.md), styles for video modal, add instructions/TODO.md and screenshots - Extend MIME types for media
@@ -0,0 +1,92 @@
|
||||
# TODO — Инструкция по системе WhatIDo (со скриншотами)
|
||||
|
||||
Статус: `☐` todo · `☑` готово · `◐` в работе
|
||||
|
||||
Цель: папка `instructions/` с полной русскоязычной инструкцией для администратора/преподавателя,
|
||||
**каждый раздел проиллюстрирован реальными скриншотами живого стенда** (стенд поднят,
|
||||
в БД 358 записей, 151 ученик, 22 группы, 72 модуля, 35 ссылок — данные реальные, не моки).
|
||||
|
||||
## Часть 0. Подготовка
|
||||
|
||||
- [x] 0.1 Поднять стенд: `docker compose ps` — app на `http://localhost:3003`
|
||||
- [x] 0.2 Проверить доступность `GET /` → 200, `GET /api/public-settings` → `system_name=KIBERone`
|
||||
- [x] 0.3 Получить учётку админа (`admin` / `ADMIN_PASSWORD`), `POST /api/auth/login` → токен
|
||||
- [x] 0.4 Инвентаризация всех страниц `public/*.html` (меню, ID, русские подписи, роли)
|
||||
- [x] 0.5 Снять инвентарь данных в БД, чтобы скриншоты были непустыми
|
||||
- [x] 0.6 Создать папку `instructions/` и этот TODO
|
||||
|
||||
## Часть 1. Публичная часть — то, что видит ученик
|
||||
|
||||
- [x] 1.1 `index.html` — форма «Что мы узнали на занятии»: общий вид, шапка, футер
|
||||
- [x] 1.2 Блок «Фото»: превью, кнопка «Камера», модалка камеры (снять/отмена)
|
||||
- [x] 1.3 Блок «Файлы проекта»: выбор, вставка из буфера, список с размерами, очистка
|
||||
- [x] 1.4 Блок полей: ФИО, Группа, Тема модуля, «Что сделал» (+ автодополнение)
|
||||
- [x] 1.5 Кнопка «Отправить» + панель успеха `#sentPanel` с таймером антиспама
|
||||
- [x] 1.6 Ошибки/повторная отправка, тосты
|
||||
|
||||
## Часть 2. Вход и оболочка админки
|
||||
|
||||
- [x] 2.1 `login.html` — форма входа (логин, пароль, honeypot, ошибки)
|
||||
- [x] 2.2 `admin.js` — сайдбар: логотип, user-box, две группы меню, версия
|
||||
- [x] 2.3 Выпадающий список уведомлений в сайдбаре + бейдж
|
||||
|
||||
## Часть 3. Разделы по порядку (основное → администрирование)
|
||||
|
||||
- [x] 3.1 **Дашборд** — плитки статистики, динамика за 14 дней, последние записи, активные группы, топ учеников, быстрые действия
|
||||
- [x] 3.2 **Журнал** — фильтры, список/карточки, пагинация, карточка записи
|
||||
- [x] 3.3 Журнал — модалка «Редактирование записи» (+ `✨` ИИ-исправление, `ИИ предлагает вариант`)
|
||||
- [x] 3.4 Журнал — «Улучшение фото»: сравнение до/после, слайдеры, режимы ИИ, история версий
|
||||
- [x] 3.5 Журнал — модалка «Создать ссылку»
|
||||
- [x] 3.6 **Ученики** — список, фильтры, пагинация, кнопки действий
|
||||
- [x] 3.7 Ученики — пакетное добавление, прикрепление к группе
|
||||
- [x] 3.8 Ученики — «Данные профиля» (все поля отчёта)
|
||||
- [x] 3.9 Ученики — «Экспорт отчёта» (ZIP)
|
||||
- [x] 3.10 **Группы** — карточки, расписание, филиал/тутор
|
||||
- [x] 3.11 Группы — галерея фото группы (загрузка, обложка, порядок, правка)
|
||||
- [x] 3.12 Группы — «Архив файлов группы» (ZIP-выгрузка)
|
||||
- [x] 3.13 **Фото** — все фото, фильтры по источнику, карточки
|
||||
- [x] 3.14 **Файлы** — прикреплённые / откреплённые
|
||||
- [x] 3.15 **Ссылки** — список share-ссылок, бейджи, создание
|
||||
- [x] 3.16 **Корзина** — восстановление, «помеченные на удаление»
|
||||
- [x] 3.17 **Темы модулей** — список, модалка модуля, пакетное добавление
|
||||
- [x] 3.18 **Филиалы** — CRUD
|
||||
- [x] 3.19 **Пользователи** — таблица, модалка, мультивыбор филиалов
|
||||
- [x] 3.20 **Воркер ИИ** — статус, очередь, последние проверки, фото-задания, ошибки
|
||||
- [x] 3.21 **Аудит** — таблица действий, модалка «Детали действия» с диффом
|
||||
- [x] 3.22 **Блокировки** — таблица IP, модалка ручного бана
|
||||
- [x] 3.23 **Уведомления** — полная история, фильтр, «прочитать все», «очистить всё»
|
||||
- [x] 3.24 **Настройки** — 13 секций (система, стек, брендинг, антиспам, ссылки, футер, фото, фото-ИИ, уведомления, ИИ, бэкапы, корзина, блокировки)
|
||||
|
||||
## Часть 4. Публичные страницы по ссылкам
|
||||
|
||||
- [x] 4.1 `share.html` (`/s/<token>`) — карточки записей, фото группы, cookie-баннер, лайтбокс
|
||||
- [x] 4.2 `share.html` — защита паролем `#passwordModal`
|
||||
- [x] 4.3 `report.html` (`/r/<token>`) — публичный отчёт: hero, «Обо мне», хроника, работы, файлы, фото, контакты
|
||||
- [x] 4.4 `error.html` — страница ошибки 404
|
||||
|
||||
## Часть 5. Сборка инструкции
|
||||
|
||||
- [x] 5.1 Скриншоты → `instructions/img/` с нумерацией
|
||||
- [x] 5.2 `instructions/README.md` — оглавление, роли, вход, быстрый старт
|
||||
- [x] 5.3 Постраничные файлы инструкции `01-…` … `05-…` с вставленными картинками
|
||||
- [x] 5.4 `instructions/CHEATSHEET.md` — краткая шпаргалка + горячие клавиши/API
|
||||
- [x] 5.5 Проверка: все ссылки на изображения существуют, нет битых `.md`
|
||||
|
||||
## Итог
|
||||
|
||||
| Артефакт | Описание |
|
||||
|---|---|
|
||||
| `instructions/README.md` | Оглавление + обзор системы + порядок работы |
|
||||
| `instructions/01-public-form.md` | Публичная форма ученика (пошагово) |
|
||||
| `instructions/02-login-shell.md` | Вход, сайдбар, уведомления |
|
||||
| `instructions/03-dashboard.md` | Дашборд |
|
||||
| `instructions/04-journal.md` | Журнал: фильтры, редактирование, фото-ИИ, ссылки |
|
||||
| `instructions/05-students.md` | Ученики: профили, группы, экспорт |
|
||||
| `instructions/06-groups-photos-files.md` | Группы, Фото, Файлы |
|
||||
| `instructions/07-links-trash.md` | Ссылки, Корзина |
|
||||
| `instructions/08-admin-sections.md` | Модули, Филиалы, Пользователи, Блокировки |
|
||||
| `instructions/09-worker-audit-notifications.md` | Воркер ИИ, Аудит, Уведомления |
|
||||
| `instructions/10-settings.md` | Настройки: все 13 секций |
|
||||
| `instructions/11-share-report-pages.md` | Публичные `/s/` и `/r/` страницы |
|
||||
| `instructions/CHEATSHEET.md` | Шпаргалка |
|
||||
| `instructions/img/*.png` | Скриншоты |
|
||||
|
After Width: | Height: | Size: 52 KiB |
|
After Width: | Height: | Size: 62 KiB |
|
After Width: | Height: | Size: 90 KiB |
|
After Width: | Height: | Size: 55 KiB |
|
After Width: | Height: | Size: 43 KiB |
|
After Width: | Height: | Size: 46 KiB |
|
After Width: | Height: | Size: 18 KiB |
|
After Width: | Height: | Size: 19 KiB |
|
After Width: | Height: | Size: 514 KiB |
|
After Width: | Height: | Size: 171 KiB |
|
After Width: | Height: | Size: 514 KiB |
|
After Width: | Height: | Size: 1.4 MiB |
|
After Width: | Height: | Size: 1.4 MiB |
|
After Width: | Height: | Size: 154 KiB |
|
After Width: | Height: | Size: 135 KiB |
|
After Width: | Height: | Size: 260 KiB |
|
After Width: | Height: | Size: 164 KiB |
|
After Width: | Height: | Size: 156 KiB |
|
After Width: | Height: | Size: 256 KiB |
|
After Width: | Height: | Size: 141 KiB |
|
After Width: | Height: | Size: 158 KiB |
|
After Width: | Height: | Size: 159 KiB |
|
After Width: | Height: | Size: 80 KiB |
|
After Width: | Height: | Size: 1.5 MiB |
|
After Width: | Height: | Size: 681 KiB |
|
After Width: | Height: | Size: 508 KiB |
|
After Width: | Height: | Size: 947 KiB |
|
After Width: | Height: | Size: 318 KiB |
|
After Width: | Height: | Size: 261 KiB |
|
After Width: | Height: | Size: 334 KiB |
|
After Width: | Height: | Size: 200 KiB |
|
After Width: | Height: | Size: 118 KiB |
|
After Width: | Height: | Size: 99 KiB |
|
After Width: | Height: | Size: 142 KiB |
|
After Width: | Height: | Size: 162 KiB |
|
After Width: | Height: | Size: 56 KiB |
|
After Width: | Height: | Size: 66 KiB |
|
After Width: | Height: | Size: 64 KiB |
|
After Width: | Height: | Size: 77 KiB |
|
After Width: | Height: | Size: 58 KiB |
|
After Width: | Height: | Size: 68 KiB |
|
After Width: | Height: | Size: 448 KiB |
|
After Width: | Height: | Size: 450 KiB |
|
After Width: | Height: | Size: 192 KiB |
|
After Width: | Height: | Size: 167 KiB |
|
After Width: | Height: | Size: 158 KiB |
|
After Width: | Height: | Size: 183 KiB |
|
After Width: | Height: | Size: 197 KiB |
|
After Width: | Height: | Size: 146 KiB |
|
After Width: | Height: | Size: 111 KiB |
|
After Width: | Height: | Size: 592 KiB |
|
After Width: | Height: | Size: 647 KiB |
|
After Width: | Height: | Size: 372 KiB |
|
After Width: | Height: | Size: 37 KiB |
|
After Width: | Height: | Size: 274 KiB |
|
After Width: | Height: | Size: 123 KiB |
|
After Width: | Height: | Size: 84 KiB |
|
After Width: | Height: | Size: 76 KiB |
|
After Width: | Height: | Size: 124 KiB |
|
After Width: | Height: | Size: 65 KiB |
|
After Width: | Height: | Size: 42 KiB |
|
After Width: | Height: | Size: 20 KiB |