# ДГТУ МЕДИА Frontend MVP информационной системы управления медиаконтентом университета. Проект выполнен на JavaScript/JSX, React, Vite и Tailwind CSS. ## Запуск Требуются Node.js 22+ и npm. Из корня монорепозитория: ```bash npm install npm run dev ``` Для запуска только frontend: ```bash npm run dev:web ``` Откройте `http://localhost:5173`. В dev-режиме Vite проксирует `/api` на `http://localhost:3000`. ## Проверки ```bash npm --workspace @fable/web run lint npm --workspace @fable/web run test npm --workspace @fable/web run build ``` ## Структура ```text src/ app/ маршрутизация, layouts и состояние сессии pages/ публичные страницы и ролевые кабинеты shared/ api/ Axios-клиент и общая обработка ошибок data/ реалистичные mock-данные lib/ небольшие общие helpers ui/ переиспользуемые компоненты ``` В `DESIGN.md` описаны дизайн-токены, визуальный характер, правила компонентов и анимаций. ## Реализованные страницы - главная редакционная страница; - каталог с поиском и фильтрами через URL; - страница материала; - афиша событий; - медиаканалы: радио, журналы и социальные сети; - страница о медиапортале; - вход и тестовые роли; - профиль пользователя; - кабинет редактора и форма материала; - очередь модератора; - статистика и пользователи администратора; - страницы 403 и 404 с SVG-анимацией. ## Тестовые роли Основной demo-вход: `demo_admin` / `demo_password`. | Роль | Учётная запись | | --- | --- | | Пользователь | `user@dstu.ru` | | Редактор | `editor@dstu.ru` | | Модератор | `moderator@dstu.ru` | | Администратор | `admin@dstu.ru` | Роль также можно переключить в шапке кабинета для демонстрации интерфейсов. ## Ожидаемые backend endpoints - `POST /auth/login`, `POST /auth/refresh`, `POST /auth/logout`; - `GET/PATCH /users/me`; - CRUD `/materials`, `/categories`, `/tags`, `/events`; - `/materials/:id/comments`, `/subscriptions`, `/notifications`; - `/moderation/queue`, `/moderation/:id/approve`, `/moderation/:id/return`; - `/admin/users`, `/admin/stats`, `/admin/audit-log`; - `POST /uploads`. Адрес API можно переопределить через `VITE_API_URL`. По умолчанию интерфейс работает с `/api` и ожидает gateway на `localhost:3000`. ## Безопасность зависимостей Проект закреплён на pnpm 11. В `pnpm-workspace.yaml` включены: - `minimumReleaseAge: 1440`; - `blockExoticSubdeps: true`; - `trustPolicy: no-downgrade`; - явный `allowBuilds` только для `esbuild` и `@tailwindcss/oxide`. Lockfile необходимо хранить в репозитории. ## Ограничения MVP - данные backend по-прежнему демонстрационные и в основном живут в in-memory store; - внешние изображения загружаются с Unsplash; - график администратора демонстрационный.