Мультиартистная музыкальная платформа для публикации альбомов, статей и поддержки независимых артистов.
Платформа объединяет публичные страницы артистов, каталог альбомов с треками и синхронизированными текстами, статьи, медиаплеер, мультиязычность (RU/EN) и личные кабинеты для артистов и слушателей. Контент (альбомы, треки, тексты, синхронизации, статьи, изображения hero) хранится в PostgreSQL (Supabase), медиафайлы — в Supabase Storage. Для продакшена используется хостинг Netlify и serverless-функции для API.
Основные возможности:
- Публичные страницы артистов и каталог релизов
- Просмотр альбомов и треков с аудиоплеером и синхронизированными текстами
- Статьи и публикации с мультиязычной поддержкой
- Двуязычный интерфейс (русский / английский)
- Кабинет артиста: управление альбомами, треками, синхронизациями, статьями, hero-изображениями, профилем
- Оплата и личный кабинет покупателя (просмотр покупок, скачивание)
- Поддержка артистов через коллекцию и Premium-планы
Стек технологий:
- Frontend: React 18, TypeScript, Redux Toolkit, React Router, i18next, Webpack 5, SCSS
- Backend: Netlify Functions (Node.js), PostgreSQL (Supabase), JWT-аутентификация
- Хранилище: Supabase Storage (изображения, аудио)
- Деплой: Netlify (статический билд + serverless API)
- Node.js — рекомендуется LTS (18.x или 20.x)
- npm — 9.x или новее (или yarn/pnpm)
- Для полной локальной разработки: Netlify CLI (
npm i -g netlify-cli), аккаунт Netlify и доступ к переменным окружения проекта
-
Клонируйте репозиторий и установите зависимости:
git clone <url-репозитория> cd my-project-copy npm install
-
Настройте переменные окружения.
Вариант 1 (рекомендуется для локальной разработки): загрузить из Netlify:
source scripts/load-netlify-env.shВариант 2: создать локальный
.envна основе примера:cp .env.local.example .env.local # Заполните переменные вручную (см. docs/FILL-ENV-FILE.md и docs/LOCAL-DEVELOPMENT.md)Обязательные переменные для работы API и БД:
DATABASE_URL— строка подключения к PostgreSQL (Supabase)JWT_SECRET— секрет для JWT-токенов (длинная случайная строка, ≥ 32 символов; напримерopenssl rand -base64 48). Обязателен: при пустом значении функции бросаютError: JWT_SECRET is required.JWT_EXPIRES_IN— время жизни токена (например,7d)ENCRYPTION_KEY— мастер-ключ AES-256-GCM для зашифрованных секретов в БД (secret_key_encryptedпродавцов YooKassa). Длинная случайная строка, рекомендация —openssl rand -base64 48. Обязателен: при пустом значении функции бросаютError: ENCRYPTION_KEY is required.⚠️ Смена ключа делает уже зашифрованные значения нечитаемыми.- Для медиа и хранилища:
SUPABASE_URL,SUPABASE_SERVICE_ROLE_KEY(и при необходимостиVITE_SUPABASE_*для клиента)
-
Запуск:
Команда Назначение npm run dev:dockerРекомендуется: Netlify Dev + Audio Asset Worker в Docker (prod-like) npm run dev:allNetlify Dev + воркер на хосте (нужен brew install ffmpeg)npm startТолько frontend (webpack dev server на порту 8080), без Netlify Functions npm run devNetlify Dev без воркера (предупреждение, если воркер недоступен) npm run buildProduction-сборка в папку distДля проверки работы после клонирования:
npm install source scripts/load-netlify-env.sh # если есть доступ к Netlify npm run dev:docker
Откройте в браузере
http://localhost:8888и убедитесь, что главная страница и разделы открываются. -
Деплой на Netlify:
Сборка:npm run build, каталог публикации:dist. Функции лежат вnetlify/functions. Переменные окружения задаются в Netlify Dashboard. Подробнее — вdocs/NETLIFY-QUICK-START.mdиnetlify.toml.
- Архитектура и слои FSD:
docs/architecture.md - Локальная разработка и переменные:
docs/LOCAL-DEVELOPMENT.md,docs/FILL-ENV-FILE.md - База данных и миграции:
docs/database-setup.md,database/ - Платежи (ЮKassa):
docs/SETUP-PAYMENTS.md,docs/yookassa-setup.md - Dev Payment Mode (локально без YooKassa):
docs/dev-payment-mode.md
- Обработка ошибок: добавить retry для неудачных запросов и более понятные сообщения об ошибках для пользователя; вынести логирование в единый сервис (например, с последующей интеграцией Sentry).
- Тесты: расширить покрытие критичных сценариев (сохранение синхронизаций, авторизация, оплата) и добавить e2e для основных пользовательских сценариев.
- Производительность: проверить и при необходимости донастроить кэширование и предзагрузку для тяжёлых страниц (каталог альбомов, статьи).
- Доступность: довести контраст и фокус-индикаторы до соответствия WCAG 2.1 там, где ещё есть замечания.
- Миграции и админка: при добавлении новых полей в БД — сохранять обратную совместимость и обновлять админ-формы с валидацией.
Конкретные шаги и приоритеты зафиксированы в docs/IMPROVEMENTS.md.