Transfira suas playlists e músicas entre diferentes serviços de streaming de forma simples e eficiente.
TuneBridge é uma aplicação web que permite transferir playlists entre plataformas de streaming como Spotify, YouTube Music, Apple Music, SoundCloud e outros, resolvendo o problema de migração de bibliotecas musicais entre serviços.
- Sobre o Projeto
- Funcionalidades
- Tecnologias
- Arquitetura
- Modelo de Dados
- Pré-requisitos
- Instalação
- Configuração
- Como Usar
- API Endpoints
- Segurança
- Roadmap
- Contribuindo
- Licença
TuneBridge nasceu da necessidade de facilitar a migração entre serviços de streaming de música. Ao invés de recriar manualmente suas playlists favoritas ao trocar de plataforma, o TuneBridge automatiza esse processo através de integração com as APIs oficiais dos provedores.
- Conecte suas contas - Autentique-se com os serviços de origem e destino via OAuth 2.0
- Selecione suas playlists - Escolha quais playlists você deseja transferir
- Transferência inteligente - O sistema mapeia as músicas e cria automaticamente as playlists no destino
- ✅ Autenticação de usuário (registro/login)
- ✅ Conexão com contas externas via OAuth 2.0
- ✅ Integração com Spotify
- ✅ Leitura de playlists do serviço origem
- ✅ Mapeamento inteligente de faixas
- ✅ Criação automática de playlists no destino
- ✅ Dashboard do usuário
- Visualização de contas conectadas
- Histórico de transferências
- Status em tempo real
- ✅ Transferências gratuitas
| Provedor | Status | Leitura | Escrita |
|---|---|---|---|
| Spotify | 🚧 Em Desenvolvimento | - | - |
| YouTube Music | 📅 Planejado | - | - |
| Apple Music | 📅 Planejado | - | - |
| SoundCloud | 📅 Planejado | - | - |
- Angular - Framework principal
- TypeScript - Linguagem de programação
- RxJS - Programação reativa
- Angular Material - Componentes UI (opcional)
- NgRx - Gerenciamento de estado (futuro)
- Java 17+ - Linguagem de programação
- Spring Boot - Framework
- Spring Security - Autenticação e autorização
- Spring Data JPA - Persistência de dados
- JWT - Tokens de autenticação
- PostgreSQL - Banco de dados relacional
- Redis - Cache e filas
- RabbitMQ - Processamento assíncrono (opcional)
- Docker - Containerização
- Docker Compose - Orquestração local
- GitHub Actions - CI/CD
- Nginx - Proxy reverso (produção)
TuneBridge/
├── tunebridge-frontend/ # Aplicação Angular
│ ├── src/
│ │ ├── app/
│ │ │ ├── modules/
│ │ │ │ ├── auth/ # Autenticação
│ │ │ │ ├── dashboard/ # Dashboard do usuário
│ │ │ │ ├── transfer/ # Transferência de playlists
│ │ │ │ ├── providers/ # Conectores de provedores
│ │ │ │ └── shared/ # Componentes compartilhados
│ │ │ ├── core/
│ │ │ └── services/
│ │ └── environments/
│ └── ...
│
├── tunebridge-backend/ # API Spring Boot
│ ├── src/
│ │ └── main/
│ │ ├── java/
│ │ │ └── com/tunebridge/
│ │ │ ├── controllers/ # REST Controllers
│ │ │ ├── services/ # Lógica de negócio
│ │ │ ├── repositories/ # Acesso a dados
│ │ │ ├── models/ # Entidades JPA
│ │ │ ├── config/ # Configurações
│ │ │ └── security/ # Segurança JWT/OAuth
│ │ └── resources/
│ └── ...
│
└── docker-compose.yml # Orquestração dos serviços
┌─────────────┐ OAuth ┌──────────────┐
│ Usuário │ ◄─────────────► │ Provedor │
└──────┬──────┘ │ (Spotify) │
│ └──────────────┘
│ 1. Conecta contas ▲
▼ │
┌─────────────┐ │ 3. API calls
│ Frontend │ │
│ (Angular) │ │
└──────┬──────┘ │
│ 2. Solicita transferência │
▼ │
┌─────────────┐ 4. Processa ┌────┴─────┐
│ Backend │ ───────────────────►│ Worker │
│ (Spring) │ ◄───────────────────│ (Async) │
└──────┬──────┘ 5. Atualiza └──────────┘
│ status
▼
┌─────────────┐
│ PostgreSQL │
│ + Redis │
└─────────────┘
id: UUID (PK)
email: VARCHAR(255) UNIQUE
password_hash: VARCHAR(255)
created_at: TIMESTAMP
updated_at: TIMESTAMPid: UUID (PK)
user_id: UUID (FK)
provider: ENUM (spotify, youtube, apple, soundcloud)
access_token: TEXT (encrypted)
refresh_token: TEXT (encrypted)
expires_at: TIMESTAMP
refresh_metadata: JSONB
created_at: TIMESTAMPid: UUID (PK)
title: VARCHAR(500)
artists: JSONB (array)
album: VARCHAR(500)
duration_ms: INTEGER
external_ids: JSONB (map provider->id)
created_at: TIMESTAMPid: UUID (PK)
user_id: UUID (FK)
provider: ENUM
provider_id: VARCHAR(255)
name: VARCHAR(500)
track_count: INTEGER
created_at: TIMESTAMP
updated_at: TIMESTAMPid: UUID (PK)
user_id: UUID (FK)
from_provider: ENUM
to_provider: ENUM
playlist_from_id: VARCHAR(255)
playlist_to_id: VARCHAR(255) (nullable)
status: ENUM (created, mapping, transferring, done, failed)
matched_tracks: INTEGER
unmatched_tracks: INTEGER
log: JSONB
created_at: TIMESTAMP
updated_at: TIMESTAMP
completed_at: TIMESTAMP- Node.js >= 18.x
- npm >= 9.x
- Java >= 17
- Maven >= 3.8
- Docker >= 20.x
- Docker Compose >= 2.x
- PostgreSQL >= 14 (ou via Docker)
- Redis >= 7 (ou via Docker)
- Acesse Spotify Developer Dashboard
- Crie um novo app
- Configure Redirect URIs:
http://localhost:8080/api/oauth/spotify/callback - Copie Client ID e Client Secret
- Habilite os escopos:
playlist-read-private,playlist-modify-public,playlist-modify-private
POST /api/auth/register - Criar usuário
POST /api/auth/login - Login (retorna JWT)
GET /api/user - Perfil do usuário
GET /api/providers - Lista provedores suportados
GET /api/oauth/{provider}/authorize - Inicia OAuth
GET /api/oauth/{provider}/callback - Callback OAuth
GET /api/{provider}/playlists - Listar playlists
GET /api/{provider}/playlists/{id} - Detalhes e faixas
POST /api/transfer - Criar transferência
GET /api/transfer/{id} - Status e logs
GET /api/transfers - Histórico do usuário
DELETE /api/transfer/{id} - Cancelar transferência
# Login
curl -X POST http://localhost:8080/api/auth/login \
-H "Content-Type: application/json" \
-d '{"email":"user@example.com","password":"senha123"}'
# Criar transferência
curl -X POST http://localhost:8080/api/transfer \
-H "Authorization: Bearer SEU_JWT_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"from_provider": "spotify",
"to_provider": "youtube",
"playlist_id": "37i9dQZF1DXcBWIGoYBM5M",
"options": {
"overwrite": false,
"match_tolerance_ms": 2000
}
}'- ✅ HTTPS obrigatório em produção
- ✅ Tokens criptografados no banco de dados (AES-256)
- ✅ JWT para autenticação stateless
- ✅ Rate limiting por usuário e IP
- ✅ CSRF protection para OAuth flows
- ✅ Validação de redirect URIs
- ✅ Sanitização de inputs
- ✅ Hash de senhas com BCrypt
- ✅ Secrets management via variáveis de ambiente
- ✅ CORS configurado para frontend específico
- Nunca commitar credenciais no código
- Rotacionar tokens regularmente
- Monitorar acessos suspeitos
- Manter dependências atualizadas
- Realizar auditorias de segurança
- Autenticação básica
- OAuth com Spotify
- Transferência de playlists
- Dashboard do usuário
- Integração com YouTube Music
- Melhorias no algoritmo de matching
- Edição manual de mapeamento
- Notificações em tempo real
- Integração com Apple Music
- Integração com SoundCloud
- Transferência em lote (múltiplas playlists)
- Filtros avançados
- Aplicativo mobile (PWA)
- Planos pagos
- Sincronização automática de playlists
- Suporte a podcasts
- API pública para desenvolvedores
Contribuições são sempre bem-vindas! Para contribuir:
- Fork o projeto
- Crie uma branch para sua feature (
git checkout -b feature/MinhaFeature) - Commit suas mudanças (
git commit -m 'Adiciona MinhaFeature') - Push para a branch (
git push origin feature/MinhaFeature) - Abra um Pull Request
- Siga os padrões de código do projeto
- Escreva testes para novas funcionalidades
- Atualize a documentação quando necessário
- Seja respeitoso nos comentários e reviews
Este projeto está sob a licença MIT. Veja o arquivo LICENSE para mais detalhes.