diff --git a/TZ_GALIKON.html b/TZ_GALIKON.html new file mode 100644 index 0000000..fe92a9f --- /dev/null +++ b/TZ_GALIKON.html @@ -0,0 +1,426 @@ + + + + +ТЗ Галикон + + + +

Техническое задание: Галикон

+
+

1. Общее описание

+
+

**Название:** Галикон — мобильное веб-приложение для спортсменов, тренеров и родителей.

+
+

**Цель:** Единая платформа для юных спортсменов (дети от 10 лет): дневник тренировок, контроль здоровья, рейтинги, чаты, игры, нормативы, сравнение с чемпионами. Аналогов в мире нет.

+
+

Пользователи:

+

- Спортсмен (основной пользователь)

+

- Тренер (видит своих учеников)

+

- Родитель (видит профиль ребёнка)

+

- Администратор (управление пользователями)

+
+
+

2. Технический стек

+
+ + +
СлойТехнология
+ +
+
+

3. Функциональные требования

+
+

3.1. Регистрация и вход

+
+

Регистрация — 8 шагов:

+
  • ФИО (string, обязательно)
  • +
  • Логин (латиница, уникальный) + пароль (хеширование bcrypt, минимум 6 символов)
  • +
  • Вид спорта (select из 39 олимпийских видов)
  • +
  • Роль: спортсмен / тренер / родитель (если родитель — поле «Имя ребёнка»)
  • +
  • Дата рождения → возраст вычисляется автоматически. Аватарка (эмодзи на выбор) или загрузка фото (JPEG/PNG, макс 5 МБ)
  • +
  • Страна (select) → город (datalist с подсказками по стране)
  • +
  • Клуб, тренер (ФИО), разряд/звание, цель (произвольный текст)
  • +
  • Телефон (обязательно, валидация формата) + Email (обязательно)
  • +
    +

    Вход:

    +

    - Логин + пароль

    +

    - JWT access token (15 мин) + refresh token (30 дней)

    +

    - Rate limiting: 5 попыток → блокировка на 1 минуту

    +

    - Автовыход через 30 минут бездействия

    +
    +

    Безопасность:

    +

    - Пароли: bcrypt с солью

    +

    - CSP-заголовки

    +

    - Санитизация всех пользовательских вводов (XSS-защита)

    +

    - HTTPS обязательно

    +

    - CORS только для доверенных доменов

    +
    +
    +

    3.2. Профиль спортсмена

    +
    +

    Отображение:

    +

    - Аватар, ФИО, вид спорта, роль

    +

    - Дата рождения, возраст, страна, город

    +

    - Клуб, тренер, разряд, цель

    +

    - Телефон, email

    +
    +

    Значки (геймификация):

    +

    Автоматический подсчёт по данным пользователя:

    +

    - 🏊 Первая тренировка (1+ запись в дневнике)

    +

    - 📖 10 тренировок

    +

    - 🔥 30 тренировок

    +

    - 🏆 Рекордсмен (есть достижения)

    +

    - 🎯 Снайпер (победа в игре «Угадай число»)

    +

    - ⚡ Молния (реакция < 300 мс)

    +

    - 🧠 Знаток (викторина 5+/8)

    +

    - 💪 100 км (суммарный километраж > 100)

    +
    +

    Достижения:

    +

    Пользователь добавляет: название, дата, описание. Отображаются списком.

    +
    +

    Отчёт для тренера (PDF):

    +

    - Генерация PDF на сервере (Puppeteer / wkhtmltopdf)

    +

    - Содержит: ФИО, спорт, клуб, тренер, разряд, цель, значки, достижения, последние 10 записей дневника

    +
    +
    +

    3.3. Дневник тренировок

    +
    +

    Поля записи:

    +

    - Дата (date, обязательно)

    +

    - Тип тренировки (select: Скорость / Техника / Выносливость / ОФП / Соревнование)

    +

    - Километраж (число, км)

    +

    - Лучшее время (строка)

    +

    - Самочувствие (1-5)

    +

    - Заметка (текст)

    +
    +

    История:

    +

    - Список записей, сортировка по дате (новые сверху)

    +

    - Удаление записи

    +
    +

    Агрегация (для тренера):

    +

    - Всего тренировок

    +

    - Суммарный километраж

    +

    - Среднее самочувствие

    +

    - График прогресса по времени (библиотека Chart.js)

    +
    +
    +

    3.4. Календарь соревнований

    +
    +

    Добавление события:

    +

    - Название (string)

    +

    - Дата (date)

    +

    - Место (string)

    +
    +

    Отображение:

    +

    - Предстоящие (сортировка по дате)

    +

    - Прошедшие (сортировка по дате, обратная)

    +
    +

    Дополнительно (желательно):

    +

    - Push-уведомление за день до события

    +

    - Цветовое кодирование по типу (соревнование / сборы / тренировка)

    +
    +
    +

    3.5. Чаты

    +
    +

    Архитектура:

    +

    - WebSocket-соединение (Socket.io)

    +

    - Комнаты: личные (1-на-1), групповые

    +

    - Сообщения хранятся в PostgreSQL

    +

    - Индикатор «прочитано/не прочитано»

    +
    +

    Функции:

    +

    - Список чатов с другими пользователями

    +

    - Фильтр по роли: Все / Спортсмены / Тренеры / Родители

    +

    - Отправка текстовых сообщений

    +

    - Счётчик непрочитанных

    +

    - Групповые чаты (создание, добавление участников)

    +
    +

    Встроенные игры (в чате):

    +
  • **Крестики-нолики** — пошаговая игра, синхронизация через WebSocket
  • +
  • **Угадай число (1-100)** — 7 попыток, победа < 5 попыток = +2 звезды
  • +
  • **Реакция** — измерение времени реакции, рекорд < 300 мс = +1 звезда
  • +
  • **Спорт-викторина** — 8 вопросов, результат 5+/8 = +1-5 звёзд
  • +
    +
    +

    3.6. Рейтинговая система

    +
    +

    Звёзды начисляются за:

    +

    - Победы в играх

    +

    - Высокие результаты викторины

    +

    - Голоса других пользователей

    +
    +

    Рейтинг:

    +

    - Топ-5 спортсменов по звёздам

    +

    - Отображение: место, ФИО, звёзды, результаты викторины, победы в играх

    +

    - Топ-3 выделены золотом/серебром/бронзой

    +
    +
    +

    3.7. Инструменты

    +
    +

    Нормативы:

    +

    - Статическая таблица разрядов по плаванию (50 м бассейн): МСМК → 2 юношеский

    +

    - Дистанции: 50 м, 100 м, 400 м вольный стиль

    +
    +

    Сравнение с чемпионами:

    +

    - Данные Калеба Дрессела по возрастам (14-18 лет)

    +

    - Пользователь вводит своё время и возраст → сравнение

    +

    - Показывает: текущий результат → КМС → результат Дрессела в этом возрасте

    +
    +

    Анализ видео:

    +

    - Загрузка видео (MP4, макс 200 МБ)

    +

    - Плеер с покадровой перемоткой (шаг 0.033 сек, 0.1 сек, 1 сек)

    +

    - Счётчик текущего кадра

    +

    - Play/Pause

    +
    +

    Витамины:

    +

    - Чек-лист на сегодня: D3, Омега-3, Магний, Цинк, BCAA

    +

    - Сохранение истории по дням

    +
    +

    Сон и пульс:

    +

    - Запись часов сна и утреннего пульса

    +

    - Средние значения за 7 дней

    +
    +

    Анализы:

    +

    - Гемоглобин, Ферритин, Витамин D, Витамин B12

    +

    - История значений с датами

    +
    +

    Видеоуроки:

    +

    - Список поисковых запросов для YouTube (12 тем по технике плавания)

    +
    +
    +

    3.8. Кабинет тренера

    +
    +

    Поиск учеников:

    +

    - Автоматически: все пользователи, у которых поле «Тренер» совпадает с ФИО тренера

    +
    +

    Отображение по каждому ученику:

    +

    - Аватар, ФИО, вид спорта, разряд, цель

    +

    - Суммарный километраж

    +

    - Последние 5 тренировок (дата, тип, км, время)

    +
    +
    +

    3.9. Кабинет родителя

    +
    +

    Привязка ребёнка:

    +

    - Родитель вводит логин ребёнка → привязка (сохраняется в профиле родителя)

    +
    +

    Отображение:

    +

    - Профиль ребёнка (как у спортсмена)

    +

    - Статистика: всего тренировок, км, среднее самочувствие

    +

    - Значки ребёнка

    +

    - Дневник тренировок (последние 15 записей)

    +

    - Цель и тренер ребёнка

    +

    - Кнопка «Отвязать»

    +
    +
    +

    3.10. Админ-панель

    +
    +

    Доступ:

    +

    - Отдельный мастер-пароль администратора

    +
    +

    Функции:

    +

    - Просмотр всех пользователей (ФИО, роль, логин, спорт, клуб, звёзды)

    +

    - Удаление пользователя

    +

    - Сброс пароля пользователя

    +
    +
    +

    3.11. PWA (Progressive Web App)

    +
    +

    Требования:

    +

    - manifest.json с иконками (192x192, 512x512)

    +

    - Service Worker для офлайн-доступа

    +

    - Установка на домашний экран (iOS/Android)

    +

    - Режим standalone (без адресной строки браузера)

    +

    - Splash screen на iOS

    +
    +
    +

    4. Нефункциональные требования

    +
    + + + + + + + + + + +
    ФронтендReact / Vue 3 + TypeScript, PWA
    БэкендNode.js (Express/Fastify) или Go
    База данныхPostgreSQL
    КэшRedis
    ФайлыS3-совместимое хранилище (MinIO)
    ЧатWebSocket (Socket.io)
    Push-уведомленияFirebase Cloud Messaging / Web Push API
    АвторизацияJWT + refresh tokens
    ХостингDocker + Kubernetes или VPS
    ПараметрЗначение
    + +
    +
    +

    5. API (основные эндпоинты)

    +
    +
    POST   /api/auth/register        — регистрация
    +POST   /api/auth/login            — вход
    +POST   /api/auth/refresh          — обновление токена
    +GET    /api/profile               — профиль текущего пользователя
    +PUT    /api/profile               — обновление профиля
    +GET    /api/profile/:id           — профиль другого пользователя
    +POST   /api/achievements          — добавить достижение
    +GET    /api/diary                 — дневник (список)
    +POST   /api/diary                 — новая запись
    +DELETE /api/diary/:id             — удалить запись
    +GET    /api/events                — календарь
    +POST   /api/events                — добавить событие
    +DELETE /api/events/:id            — удалить событие
    +GET    /api/chats                 — список чатов
    +GET    /api/chats/:id/messages    — сообщения чата
    +POST   /api/chats/:id/messages    — отправить сообщение
    +WS     /ws/chat                   — WebSocket для чата
    +POST   /api/vote/:userId          — проголосовать за пользователя
    +GET    /api/ranking               — рейтинг (топ)
    +GET    /api/coach/students        — ученики тренера
    +POST   /api/parent/link           — привязать ребёнка
    +GET    /api/admin/users           — список пользователей (админ)
    +DELETE /api/admin/users/:id       — удалить пользователя (админ)
    +POST   /api/admin/users/:id/reset-password — сброс пароля (админ)
    +GET    /api/report/pdf            — PDF-отчёт для тренера
    +POST   /api/upload/avatar         — загрузка аватара
    +POST   /api/upload/video          — загрузка видео
    +POST   /api/upload/photo          — загрузка фото
    +
    +
    +
    +

    3.12. Аналитика и дашборды

    +
    +

    Дашборд спортсмена — главный экран аналитики:

    +
    +

    График прогресса (50 м в/с):

    +

    - Линейный график: дата по оси X, время по оси Y

    +

    - Целевая линия (23″) и текущая линия тренда

    +

    - Автоматический расчёт скорости прогресса (секунд в месяц)

    +

    - Прогноз: когда будет достигнута цель при текущем темпе

    +
    +

    Радарная диаграмма навыков:

    +

    - 6 осей: старт, поворот, подводная фаза, гребок, выносливость, финиш

    +

    - Оценки 1-10 выставляет тренер или сам спортсмен

    +

    - Сравнение с предыдущим месяцем

    +
    +

    Круговые диаграммы тренировок:

    +

    - Распределение по типам: скорость / техника / выносливость / ОФП

    +

    - За текущий месяц и за всё время

    +
    +

    Тепловая карта активности:

    +

    - Календарь GitHub-style: каждый день — квадратик

    +

    - Цвет зависит от километража (0 — серый, 5+ км — ярко-голубой)

    +

    - Видно пропуски тренировок и интенсивные периоды

    +
    +

    Счётчики (KPI):

    +

    - Всего тренировок, общий километраж, лучший результат

    +

    - Среднее самочувствие, динамика пульса, средний сон

    +

    - Недельная/месячная нагрузка

    +
    +

    Сравнительная аналитика:

    +

    - Сравнение своего прогресса со средним по возрастной группе

    +

    - Сравнение с товарищами по клубу (анонимно)

    +

    - Процентиль: «Ты быстрее 78% пловцов твоего возраста»

    +
    +

    Экспорт данных:

    +

    - CSV-выгрузка всех тренировок

    +

    - Excel-отчёт с графиками (автоматическая генерация)

    +

    - PDF-дашборд для тренера

    +
    +

    Технологии:

    +

    - Chart.js / ECharts / D3.js для визуализации

    +

    - Данные агрегируются на бэкенде (SQL-запросы с GROUP BY)

    +

    - Кэширование агрегаций в Redis (обновление раз в час)

    +
    +

    API для аналитики:

    +
    GET /api/analytics/progress/:metric — график прогресса по метрике
    +GET /api/analytics/radar            — радарная диаграмма
    +GET /api/analytics/heatmap          — тепловая карта (год)
    +GET /api/analytics/distribution     — распределение типов тренировок
    +GET /api/analytics/kpi              — ключевые показатели
    +GET /api/analytics/compare          — сравнение с группой
    +GET /api/analytics/export/csv       — CSV-выгрузка
    +GET /api/analytics/export/dashboard — PDF-дашборд
    +
    +
    +

    Дашборд тренера:

    +

    - Сводка по всем ученикам: таблица с сортировкой по любому столбцу

    +

    - Групповой график прогресса (все ученики на одном графике)

    +

    - Выделение отстающих (красная зона) и лидеров (зелёная зона)

    +

    - Уведомления: ученик не тренировался 3+ дня → алерт тренеру

    +

    - Экспорт сводного отчёта по группе

    +
    +

    Дашборд родителя:

    +

    - Упрощённая версия: график прогресса ребёнка, счётчики

    +

    - Уведомления о новых достижениях и значках

    +

    - Еженедельный email-отчёт (опционально)

    +
    +
    +

    6. База данных (основные таблицы)

    +
    +
    users: id, login, password_hash, name, sport, role, birth_date, age,
    +       country, city, club, coach, rank, goal, phone, email,
    +       avatar_url, photo_url, stars, quiz_score, games_won,
    +       created_at, updated_at
    +
    +achievements: id, user_id, title, date, description
    +
    +diary_entries: id, user_id, date, type, km, best_time, feel, note
    +
    +events: id, user_id, title, date, location
    +
    +messages: id, chat_id, from_user_id, to_user_id, text, read, created_at
    +
    +chats: id, type (direct/group), name
    +
    +chat_members: chat_id, user_id
    +
    +vitamins: id, user_id, date, vitamin_type, taken
    +
    +sleep_log: id, user_id, date, hours, pulse
    +
    +tests: id, user_id, test_type, value, date
    +
    +parent_links: parent_id, child_id
    +
    +votes: voter_id, target_id, created_at
    +
    +
    +
    +

    7. Этапы разработки

    +
    + + + + + + + + +
    Язык интерфейсаРусский
    АдаптивностьMobile-first, поддержка десктопа
    БраузерыChrome 90+, Safari 14+, Firefox 90+
    ПроизводительностьFirst paint < 2 сек, взаимодействие < 100 мс
    ДоступностьWCAG 2.1 AA
    МасштабируемостьДо 100 000 пользователей
    Резервное копированиеЕжедневный бэкап БД
    ЭтапСодержаниеСрок
    + +
    +

    **Итого:** ~10 недель на MVP командой из 2-3 разработчиков.

    +
    +
    + + + + + + + +
    1База данных, API авторизации, регистрация2 недели
    2Профиль, дневник, календарь2 недели
    3Чаты (WebSocket) + игры2 недели
    4Рейтинг, кабинет тренера, кабинет родителя1 неделя
    5Инструменты (нормативы, сравнение, видео, витамины)1 неделя
    6Админ-панель, PDF-отчёт1 неделя
    7PWA, тестирование, деплой1 неделя
    + + + \ No newline at end of file