Об этом проекте

AMOTIF — это платформа асинхронного музыкального сотрудничества, заполняющая разрыв между локальными DAW и универсальными платформами обмена файлами. Вдохновлённая концепциями распределённого версионирования, она работает как «Git для музыкантов», позволяя музыкантам, продюсерам и композиторам создавать проекты, регистрировать версии треков и стемов и сотрудничать без необходимости одновременного контакта. Основные возможности: - Управление музыкальными проектами с техническими параметрами: BPM (20-300), тональность, жанр (ROCK, POP, JAZZ, CLASSICAL, ELECTRONIC, MPB, OTHER) и опорный аудиофайл - Независимые аудиослои (layers) с офсетом синхронизации в миллисекундах, опциональным переопределением BPM для слоя и потоком одобрения (pending/approved/rejected), контролируемым создателем проекта - Система приглашений по email со сроком действия 7 дней, принятием/отклонением с автоматическим уведомлением и управлением активными участниками по проекту - Профили пользователей с биографией, инструментами и статистикой; система подписчиков (follow/unfollow); уведомления в реальном времени; доска общения по проекту - Поиск по пользователям (фильтрация по инструменту) и проектам (запрос, жанр, BPM min/max) - Виртуальная студия с микшером (громкость, панорама, mute для каждого слоя), визуализацией звуковых волн, глобальными и индивидуальными элементами управления воспроизведением/паузой Архитектура: бэкенд на Fastify v5 + Bun с плоской архитектурой на основе плагинов (без традиционного MVC), валидация через TypeBox с JIT-компиляцией, аутентификация JWT и авторизация через хуки. ORM Prisma v7 с PostgreSQL (Neon). Фронтенд на React 19 + Vite + TypeScript с React Compiler. Загрузка аудио через потоковую передачу в Supabase Storage (максимум 40 МБ). Деплой на Render. Модель данных включает сущности Пользователь (с валидацией CPF для будущей защиты авторских прав), Проект (композиция в разработке), Слой (аудиовклад с отслеживанием авторства и временным выравниванием), а также Приглашение, Сотрудничество, Подписка, Уведомление и Избранное. Эндпоинт обслуживания (POST /api/cleanup) удаляет истёкшие приглашения и прочитанные уведомления старше 7 дней, защищён секретным заголовком.