---
title: "MagicPlaylist"
description: "Uma aplicacao Android nativa que gera playlists musicais a partir de faixas selecionadas usando dados de similaridade do Shazam, e depois exporta diretamente para o Spotify - construida com Kotlin, Jetpack Compose e Material Design 3."
locale: "pt"
canonical: "https://portfolio.josedacosta.info/pt/realizacoes/magicplaylist-android-music-discovery"
source: "https://portfolio.josedacosta.info/pt/realizacoes/magicplaylist-android-music-discovery.md"
html_source: "https://portfolio.josedacosta.info/pt/realizacoes/magicplaylist-android-music-discovery"
author: "José DA COSTA"
date: "2025"
type: "achievement"
slug: "magicplaylist-android-music-discovery"
tags: ["Kotlin 2.0.21", "Android SDK 36", "Jetpack Compose", "Material Design 3", "Retrofit 2", "OkHttp 4", "Kotlin Coroutines", "Coil", "Spotify Auth SDK", "Gradle (Kotlin DSL)"]
generated_at: "2026-04-23T15:45:27.951Z"
---

# MagicPlaylist

Uma aplicacao Android nativa que gera playlists musicais a partir de faixas selecionadas usando dados de similaridade do Shazam, e depois exporta diretamente para o Spotify - construida com Kotlin, Jetpack Compose e Material Design 3.

**Date:** Setembro 2025  
**Duration:** 2 dias (intensivo)  
**Role:** Product Owner & Lead Developer  
**Technologies:** Kotlin 2.0.21, Android SDK 36, Jetpack Compose, Material Design 3, Retrofit 2, OkHttp 4, Kotlin Coroutines, Coil, Spotify Auth SDK, Gradle (Kotlin DSL)

### Key Metrics

- Linhas Kotlin: **-** - Codigo Android nativo
- Arquivos Fonte: **-** - Arquivos fonte Kotlin
- Componentes UI: **-** - Componentes Compose reutilizaveis
- Estrategias de Mapping: **-** - Cadeia de fallback Shazam-para-Spotify

## Visao Geral do Projeto

_O que e MagicPlaylist e por que existe_

### Target Users

B2C - Publico geral, usuarios do Spotify que desejam enriquecer suas playlists e descobrir novos artistas atraves de uma experiencia mobile intuitiva.

- **MagicPlaylist** e uma **aplicacao Android** nativa escrita em Kotlin que gera automaticamente playlists musicais a partir de faixas escolhidas pelo usuario. O app usa a API nao-oficial do Shazam para descobrir faixas similares, e depois exporta as playlists geradas diretamente para a conta Spotify do usuario.
- O conceito e simples mas poderoso: o usuario insere uma ou mais musicas que gosta, e a aplicacao constroi uma playlist completa de faixas similares explorando recursivamente as relacoes de similaridade musical via Shazam, e salva o resultado no Spotify.
- Este projeto foi construido no contexto do **Mestrado em Engenharia de Software na ESIEA** como projeto de formacao. Ele responde a uma necessidade real dos entusiastas de musica: a dificuldade de descobrir novas faixas correspondentes a um estilo musical especifico e construir playlists tematicas de qualidade sem passar horas buscando manualmente.
- Busca de musicas em tempo real com auto-complete via API Shazam
- Selecao multi-seeds (1-50 faixas) com exibicao de capas de album
- Expansao BFS configuravel: profundidade 1-3, ate 10.000 faixas, deduplicacao
- Estimativa preditiva de faixas esperadas e chamadas API antes da geracao
- Reproducao de previews de audio com modo exclusivo de faixa unica
- Exportacao OAuth 2.0 para Spotify com chunking progressivo de 3 niveis
- Mapping Shazam-para-Spotify com 5 estrategias (ISRC, exato, fuzzy Levenshtein)

**Target Users:** Usuarios Alvo

## Objetivos, Contexto e Riscos

_A visao estrategica por tras do projeto_

**Objectives Intro:** O projeto foi guiado por cinco objetivos mensuraveis:

**Obj1 Label:** Stack Android Moderno

**Obj1 Value:** SDK 36

**Obj1 Desc:** Jetpack Compose, Material 3, MVVM, Kotlin 2.0.21

**Obj2 Label:** Integracao API

**Obj2 Value:** 2 APIs

**Obj2 Desc:** Shazam (nao-oficial) + Spotify (oficial) com tratamento de erros

**Obj3 Label:** Precisao do Mapping

**Obj3 Value:** 95%+

**Obj3 Desc:** Correspondencia Shazam-para-Spotify via 5 estrategias de fallback

**Obj4 Label:** Escala de Playlists

**Obj4 Value:** 10K faixas

**Obj4 Desc:** Gerenciar playlists grandes com orcamento max de 500 chamadas API

**Obj5 Label:** Velocidade de Dev

**Obj5 Value:** 2 dias

**Obj5 Desc:** Entrega completa com desenvolvimento assistido por IA

**Context Text:** Este projeto foi construido como parte do **Mestrado em Engenharia de Software na ESIEA**. As escolhas tecnologicas foram deliberadamente de ponta: Kotlin 2.0.21, Compose BOM 2024.12, Android SDK 36 e AGP 8.13. Uma decisao arquitetural chave foi usar a API web nao-oficial do Shazam diretamente em vez de um wrapper pago (RapidAPI), trazendo flexibilidade mas tambem risco de fragilidade.

**Stakes Text:** A proposta de valor central repousa na **qualidade da recomendacao musical** - a relevancia das faixas descobertas e a confiabilidade do mapping Shazam-para-Spotify. A experiencia do usuario foi projetada com animacoes polidas, designs em gradiente, confetes de celebracao e feedback de progresso em tempo real durante a geracao.

**Risk1 Title:** Mudancas na API Nao-Oficial do Shazam

**Risk1 Desc:** Probabilidade alta, impacto critico. Nenhum contrato de API existe. Mitigado por spoofing de headers de navegador, mas intrinsecamente fragil.

**Risk2 Title:** Rate Limiting (Shazam + Spotify)

**Risk2 Desc:** Probabilidade alta, impacto medio. Mitigado por chunking progressivo de 3 niveis, backoff exponencial e patterns circuit breaker.

**Risk3 Title:** Variabilidade das Respostas Shazam

**Risk3 Desc:** Probabilidade media. Algumas respostas Shazam tem dados incompletos. Mitigado por tratamento de fallback para campos ausentes.

**Risk4 Title:** Taxa de Mapping < 95%

**Risk4 Desc:** Probabilidade media. Mitigado por 5 estrategias de fallback (ISRC, exato, fuzzy, correspondencia por duracao).

**Risk5 Title:** Expiracao de Tokens Spotify

**Risk5 Desc:** Probabilidade baixa. Mitigado por refresh automatico e persistencia de tokens.

## Fases de Implementacao

_Um percurso cronologico do processo de desenvolvimento_

**Phase1 Title:** Base Tecnica e UI Inicial

**Phase1 Period:** 8 set. 2025

**Phase2 Title:** Integracao Shazam e Algoritmo de Expansao

**Phase2 Period:** 8-9 set. 2025

**Phase3 Title:** Integracao Spotify e Exportacao

**Phase3 Period:** 9 set. 2025

**Phase4 Title:** Testes em Condicoes Reais e Documentacao

**Phase4 Period:** 9 set. 2025

## Equipe e Interacoes

_O modelo de colaboracao humano-IA_

- O projeto foi desenvolvido por **José DA COSTA** como product owner, arquiteto funcional, designer UI e lider de QA. **Claude Code** (Anthropic) foi usado intensivamente como assistente de pair-programming ao longo do desenvolvimento.
- O modelo de colaboracao seguiu um ciclo iterativo: José especificava requisitos atraves de ~80 prompts detalhados (71 KB de CLAUDE_PROMPTS.md), validava resultados no emulador, identificava bugs e direcionava correcoes. Claude Code produzia a implementacao, escolhia padroes tecnicos, escrevia documentacao e corrigia problemas reportados.

**Team Size:** Tamanho da equipe: 1 pessoa + assistente IA

**Jose Role:** José DA COSTA - Product Owner & QA

**Ai Role:** Claude Code - Desenvolvedor Senior

## Resultados e Impacto

_Resultados concretos para o desenvolvedor e o projeto_

- Desenvolvimento Android nativo com o stack Kotlin/Compose mais recente
- Metodologia de reverse-engineering de API (padroes de consumo de API nao-oficial)
- Workflow de desenvolvimento assistido por IA: pair programming orientado por especificacoes
- Design algoritmico avancado: exploracao BFS com restricoes matematicas
- Implementacao do fluxo OAuth 2.0 em mobile com deep linking
- Padroes resilientes de integracao API: chunking, backoff, circuit breaker
- App Android funcional com 12 funcionalidades da busca a exportacao Spotify
- Cenario demonstrado: 2 seeds -> 126 faixas descobertas -> 38 exportadas para Spotify
- 5.666 linhas de codigo Kotlin limpo e bem estruturado seguindo MVVM
- 22 componentes Compose UI reutilizaveis com suporte a acessibilidade
- 10 documentos tecnicos cobrindo arquitetura, estrategias e setup
- 15 capturas de tela documentando a jornada completa do usuario

## Apos o Projeto

_O que aconteceu apos a entrega_

- O projeto foi entregue como uma aplicacao Android completa e funcional demonstrando descoberta musical e geracao de playlists de ponta a ponta. Como projeto de formacao no contexto do Mestrado ESIEA, cumpriu seu objetivo principal: provar a capacidade de construir uma aplicacao Android nativa do zero com tecnologias modernas.
- A ausencia de repositorio Git significa que nao ha historico de versoes. A aplicacao permanece na maquina de desenvolvimento como um APK autonomo. Nenhuma publicacao no Google Play Store foi planejada ou tentada.
- A dependencia da API nao-oficial do Shazam representa o maior risco a longo prazo. Qualquer mudanca na estrutura da API ou headers quebraria a funcionalidade principal. Para um cenario de producao, uma migracao para uma API de recomendacao musical oficial (Spotify Recommendations, Last.fm) seria a evolucao natural.

## Reflexao Critica

_Uma retrospectiva honesta sobre o projeto_

- Produto funcional de ponta a ponta demonstrado com capturas de tela reais
- Stack tecnologico de ponta (Kotlin 2.0.21, SDK 36, Compose 2024.12)
- Arquitetura MVVM limpa com separacao de responsabilidades
- Documentacao tecnica rica superando os padroes habituais de projetos de formacao
- Tratamento avancado de erros: chunking 3 niveis, mapping 5 estrategias, circuit breaker
- Acessibilidade integrada: componentes dedicados, alvos 48dp, contraste 4.5:1
- IA acelera mas nao substitui o julgamento de engenharia: a decisao de nao escrever testes ou inicializar git permanece responsabilidade do desenvolvedor.
- Documentacao antecipada (PRDs, documentos de estrategia) visivelmente guiou um desenvolvimento coerente e estruturado.
- Rate limiting deve ser uma preocupacao arquitetural desde o primeiro dia ao depender de APIs de terceiros, nao uma correcao posterior.

**Improvement1 Title:** Sem Repositorio Git

**Improvement1 Desc:** Um .gitignore existe mas nenhum repositorio foi inicializado. Critico para rastreabilidade e colaboracao.

**Improvement2 Title:** Sem Testes Unitarios

**Improvement2 Desc:** Dependencias de teste estao presentes (JUnit, Espresso, Compose UI Test) mas zero arquivos de teste escritos. O algoritmo BFS e o mapper merecem testes aprofundados.

**Improvement3 Title:** Sem Persistencia Local

**Improvement3 Desc:** Room e referenciado no version catalog mas nao ativado. Playlists geradas nao sobrevivem ao fechamento do app.

**Improvement4 Title:** Dependencia de API Nao-Oficial

**Improvement4 Desc:** A API nao-oficial do Shazam e fragil. Nenhum fallback para fontes alternativas de recomendacao esta implementado.

**Improvement5 Title:** Injecao de Dependencias Ausente

**Improvement5 Desc:** Hilt esta no version catalog mas nao e usado. Servicos sao provavelmente instanciados manualmente.
