Медиа-Архив — это современное веб-приложение для управления личной коллекцией фильмов и сериалов. Создано для удобного ведения собственного медиа-архива, отслеживания прогресса просмотра и анализа статистики.
- 🔐 Безопасная аутентификация — JWT с refresh токенами, HTTP-only cookies, защита от CSRF
- 🎬 Управление библиотекой — добавление фильмов и сериалов с кастомными рейтингами и заметками
- 📺 Отслеживание прогресса — отметка просмотренных сезонов и эпизодов
- 📊 Детальная статистика — анализ по жанрам, рейтингам, динамика просмотров, графики
- 🔌 Интеграция с Кинопоиском — автоматическое заполнение данных о фильмах
- 🎨 Современный UI — красивый интерфейс с поддержкой концепт-артов и постеров
- 🧪 Тестирование — покрытие ключевых сценариев unit и integration тестами
- 🐳 Docker-ready — полная контейнеризация, готовность к CI/CD
- Node.js + Express + TypeScript
- PostgreSQL с миграциями
- JWT аутентификация (access + refresh tokens)
- Rate limiting, CSRF защита, Security logging
- Prometheus метрики для мониторинга
- React + TypeScript + Vite
- React Router для навигации
- Tailwind CSS для стилизации
- React Hot Toast для уведомлений
- Markdown редактор для заметок
- Docker + Docker Compose
- GitHub Actions для CI/CD
- Nginx для reverse proxy
- Prometheus + Grafana для мониторинга
- Node.js 18+ и npm
- Docker и Docker Compose (опционально)
- PostgreSQL 16+ (если запускаете без Docker)
# Клонируйте репозиторий
git clone <repo-url>
cd media-archive
# Установите зависимости
npm install
# Запуск через Docker (рекомендуется)
docker compose -f docker-compose.dev.yml up -d
# Или локально
npm run dev --workspace server # Сервер на http://localhost:4000
npm run dev --workspace client # Клиент на http://localhost:5173Создайте файл .env в корне проекта:
# Сервер
PORT=4000
NODE_ENV=development
API_BASE_URL=http://localhost:4000
FRONTEND_URL=http://localhost:5173
# База данных
PGHOST=localhost
PGPORT=5432
PGUSER=postgres
PGPASSWORD=postgres
PGDATABASE=media_archive
# JWT
JWT_SECRET=dev-access-secret-change-me
JWT_REFRESH_SECRET=dev-refresh-secret-change-me
ACCESS_TOKEN_TTL_MINUTES=15
REFRESH_TOKEN_TTL_DAYS=30
# Интеграции
KINOPOISK_API_KEY=<ваш_ключ>
GOOGLE_CLIENT_ID=<ваш_client_id>
GOOGLE_CLIENT_SECRET=<ваш_client_secret>
# SMTP (для email подтверждения)
SMTP_HOST=smtp.gmail.com
SMTP_PORT=587
SMTP_SECURE=false
SMTP_USER=ваш_email@gmail.com
SMTP_PASSWORD=пароль_приложения
SMTP_FROM=ваш_email@gmail.com📚 Подробные инструкции по настройке SMTP и других сервисов находятся в папке
docs/
media-archive/
├── client/ # React приложение
│ ├── src/
│ │ ├── components/ # React компоненты
│ │ ├── pages/ # Страницы приложения
│ │ ├── hooks/ # Custom hooks
│ │ ├── lib/ # Утилиты и API
│ │ └── routes/ # Роутинг
│ └── package.json
├── server/ # Express API
│ ├── src/
│ │ ├── app/ # Контроллеры, роуты, middlewares
│ │ ├── application/ # Бизнес-логика
│ │ ├── domain/ # Доменные модели
│ │ ├── infrastructure/ # Внешние сервисы
│ │ └── db/ # Миграции
│ └── package.json
├── docs/ # Документация
├── docker-compose.yml
└── README.md
docker compose -f docker-compose.prod.yml up -d --buildПодробная инструкция по развертыванию на VPS находится в файле DEPLOY.md.
Проект настроен для автоматического развертывания через GitHub Actions. При пуше в main ветку:
- Запускаются линтеры и тесты
- Собирается production build
- Выполняются миграции базы данных
- Настройка SMTP — настройка email подтверждения
- Развертывание — инструкция по деплою на VPS
- CI/CD настройка — автоматизация развертывания
- Интеграция с YouTube — работа с YouTube API
- Telegram интеграция — уведомления в Telegram
Проект создан для личного использования, но если у вас есть идеи или предложения — создавайте issues!
Этот проект создан для личного использования.
Создано с ❤️ для управления медиа-коллекцией


