Contact
Travaillons ensemble
MagicPlaylist

MagicPlaylist

Une application Android native qui généré des playlists musicales à partir de morceaux de départ via les données de similarite Shazam, puis les exporté directement vers Spotify - construite avec Kotlin, Jetpack Compose et Material Design 3.

Septembre 2025
2 jours (intensif)
Product Owner & Lead Developer
Kotlin 2.0.21Android SDK 36Jetpack ComposeMaterial Design 3Retrofit 2OkHttp 4Kotlin CoroutinesCoilSpotify Auth SDKGradle (Kotlin DSL)Python

Lignes Kotlin

5,666

Code Android natif

Fichiers Source

46

Fichiers source Kotlin

Composants UI

22

Composants Compose réutilisables

Stratégies de Mapping

5

Chaine de fallback Shazam-vers-Spotify

Présentation du Projet

Ce qu'est MagicPlaylist et pourquoi il existe

MagicPlaylist est une application mobile Android native écrite en Kotlin qui généré automatiquement des playlists musicales à partir de morceaux choisis par l'utilisateur. L'application utilisé l'API non-officielle de Shazam pour decouvrir des morceaux similaires, puis exporté les playlists générées directement vers le compte Spotify de l'utilisateur.

Le concept est simple mais puissant : l'utilisateur saisit un ou plusieurs titrès de chansons qu'il aime, et l'application construit une playlist complète de morceaux similaires en explorant recursivement les relations de similarite musicale via Shazam, puis sauvegarde le résultat dans Spotify.

Ce projet a été réalisé dans le cadre du Mastere Expert en Ingenierie du Logiciel à l'ESIEA comme projet de formation. Il répond à un besoin réel des amateurs de musique : la difficulte de decouvrir de nouveaux morceaux correspondant à un style musical spécifique et de construire des playlists thematiques de qualité sans passer des heures a chercher manuellement.

Utilisateurs Cibles

B2C - Grand public, utilisateurs Spotify souhaitant enrichir leurs playlists et decouvrir de nouveaux artistes via une expérience mobile intuitive.

Fonctionnalités Principales
  • Recherche de morceaux en temps réel avec auto-completion via l'API Shazam
  • Sélection multi-seeds (1-50 morceaux) avec affichage des pochettes d'album
  • Expansion BFS configurable : profondeur 1-3, jusqu'à 10 000 morceaux, déduplication
  • Estimation predictive du nombre de morceaux et d'appels API avant génération
  • Ecoûte de previews audio avec mode exclusif un seul morceau
  • Export Spotify OAuth 2.0 avec chunking progressif a 3 niveaux
  • Mapping Shazam-vers-Spotify a 5 stratégies (ISRC, exact, fuzzy Levenshtein)
MVVM Architecture
MagicPlaylist MVVM Architecture - 3 screens, 22 UI components, 4 API services

Objectifs, Contexte et Risques

La vision stratégique derriere le projet

Le projet était guide par cinq objectifs mesurables :

Stack Android Moderne

SDK 36

Jetpack Compose, Material 3, MVVM, Kotlin 2.0.21

Intégration API

2 APIs

Shazam (non-officiel) + Spotify (officiel) avec gestion d'erreurs

Precision du Mapping

95%+

Correspondance Shazam-vers-Spotify via 5 stratégies de fallback

Échelle des Playlists

10K morceaux

Gerer de grandes playlists avec un budget max de 500 appels API

Vitesse de Dev

2 jours

Livraison complète avec développement assisté par IA

Contexte

Ce projet a été réalisé dans le cadre du Mastere Expert en Ingenierie du Logiciel à l'ESIEA. Les choix technologiques étaient deliberement à la pointe : Kotlin 2.0.21, Compose BOM 2024.12, Android SDK 36 et AGP 8.13. Une décision architecturale clé a été d'utiliser directement l'API web non-officielle de Shazam plutôt qu'un wrapper payant (RapidAPI), apportant de la flexibilite mais aussi un risque de fragilité.

Enjeux

La proposition de valeur repose sur la qualité de la recommandation musicale - la pertinence des morceaux decouverts et la fiabilité du mapping Shazam-vers-Spotify. L'expérience utilisateur a été conçue avec des animations soignees, des designs en gradient, des confettis de celebration et un feedback de progression en temps réel pendant la génération.

Stack Modernity Score
Risques Identifies

Changements de l'API non-officielle Shazam

Probabilite elevee, impact critique. Aucun contrat d'API n'existe. Attenue par le spoofing de headers navigateur, mais intrinsequement fragile.

Rate Limiting (Shazam + Spotify)

Probabilite elevee, impact moyen. Attenue par chunking progressif 3 niveaux, backoff exponentiel et patterns circuit breaker.

Variabilite des Réponses Shazam

Probabilite moyenne. Certaines réponses Shazam ont des données incompletes. Attenue par gestion des champs manquants en fallback.

Taux de Mapping < 95%

Probabilite moyenne. Attenue par 5 stratégies de fallback (ISRC, exact, fuzzy, correspondance par durée).

Expiration des Tokens Spotify

Probabilite faible. Attenue par rafraichissement automatique et persistance des tokens.

Risk Assessment Matrix

Phases de Réalisation

Un parcours chronologique du processus de développement

Development Timeline
Project timeline: 2 days of active development
Phase 1
Soclé Technique et UI de Base
8 sept. 2025
  • Mise en place du projet Android avec Gradle Kotlin DSL et SDK 36
  • Architecture MVVM avec Jetpack Compose et StateFlow
  • Theming Material 3 avec couleurs dynamiques
  • Ecran d'accueil avec interface de recherche en temps réel
Phase 2
Intégration Shazam et Algorithme d'Expansion
8-9 sept. 2025
  • Intégration de l'API Shazam non-officielle (recherche + similarite)
  • Algorithme d'expansion BFS avec garde-fous mathematiques
  • Moteur d'estimation predictive (morceaux attendus + budget API)
  • Orchestration API asynchrone basée sur les coroutines
Phase 3
Intégration Spotify et Export
9 sept. 2025
  • Authentification OAuth 2.0 via Spotify Auth SDK 2.1.1
  • Callback deep linking (magicplaylist://callback)
  • Mapping Shazam-vers-Spotify a 5 stratégies (ISRC, exact, fuzzy Levenshtein)
  • Chunking progressif 3 niveaux (20/10/1 morceaux par batch)
Phase 4
Tests en Conditions Réelles et Documentation
9 sept. 2025
  • Test scénario complet : 2 seeds -> 126 morceaux decouverts -> export Spotify
  • 15 captures d'ecran documentant le parcours utilisateur complet
  • 6 documents techniques (PRD, stratégie de mapping, chunking, expansion)
  • Scripts de test beta en Python pour l'analyse des APIs
BFS Expansion Algorithm
Breadth-First Search expansion: seeds to level 1 to level 2 with deduplication
Shazam-to-Spotify Mapping Pipeline
5-strategy fallback chain targeting 95%+ match rate
Mapping Strategy Success Rates
Data Model
Core data models: Song, Playlist, ExpansionConfig, SpotifyExportState

Équipe et Interactions

Le modèle de collaboration humain-IA

Taille de l'équipe : 1 personne + assistant IA

Le projet a été développé par Jose DA COSTA en tant que product owner, architecte fonctionnel, designer UI et responsable QA. Claude Code (Anthropic) a été utilisé intensivement comme assistant de pair-programming tout au long du développement.

Le modèle de collaboration suivait un cycle itératif : Jose spécifiait les exigences via ~80 prompts détaillés (71 Ko de CLAUDE_PROMPTS.md), validait les résultats sur l'emulateur, identifiait les bugs et orientait les corrections. Claude Code produisait l'implémentation, choisissait les patterns techniques, redigeait la documentation et corrigeait les problèmes signales.

Overall Contribution Split
Contribution Breakdown by Activity
Jose DA COSTA - Product Owner & QA
  • Vision produit et conception du parcours utilisateur complet
  • Reverse-engineering de l'API Shazam (capture des commandes curl avec tous les headers)
  • ~80 spécifications fonctionnelles détaillées via prompts structures
  • Toutes les décisions UI/UX (degradees, couleurs, epaisseur des bordures, espacements)
  • QA manuelle sur emulateur : identification de chaque bug (crashes, playlists vides, échecs d'auth)
  • Standards non-negociables : anglais obligatoire, zero commentaire de code, Material 3, accèssibilité
Claude Code - Développeur Senior
  • 100% des 5 666 lignes de Kotlin à travers 46 fichiers
  • Implémentation de l'architecture MVVM avec StateFlow
  • Les 6 documents techniques (PRD, stratégies, guidelines)
  • Configuration Gradle Kotlin DSL et version catalog
  • Résolution de bugs pour chaque problème signale
  • Design de l'icone d'application (variantes SVG/XML note de musique)
Parties Prenantes Externes

Shazam (Apple)

Music data & similarity - Unofficial API

Spotify

Playlist destination - Official OAuth 2.0 API

ESIEA

Training institution - Master program context

Résultats et Impact

Résultats concrets pour le développeur et le projet

Compétences Acquises

Développement Android natif avec le dernier stack Kotlin/Compose

Méthodologie de reverse-engineering d'API (consommation d'API non-officielle)

Workflow de développement assisté par IA : pair programming pilote par spécifications

Conception algorithmique avancée : exploration BFS avec contraintes mathematiques

Implémentation du flux OAuth 2.0 sur mobile avec deep linking

Patterns d'intégration API resilients : chunking, backoff, circuit breaker

Livrables du Projet

Application Android fonctionnelle avec 12 fonctionnalités de la recherche à l'export Spotify

Scénario démontré : 2 seeds -> 126 morceaux decouverts -> 38 exportes vers Spotify

5 666 lignes de code Kotlin propre et bien structuré suivant MVVM

22 composants Compose UI réutilisables avec support d'accèssibilité

10 documents techniques couvrant architecture, stratégies et setup

15 captures d'ecran documentant le parcours utilisateur complet

Demonstrated Scenario: Deep House Playlist

2 seed tracks (Dennis Ferrer) - 126 tracks discovered - 38 exported to Spotify after retry

Métriques Techniques

Les Lendemains du Projet

Ce qui s'est passe après la livraison

Le projet a été livré comme une application Android complète et fonctionnelle démontrant la découverte musicale et la génération de playlists de bout en bout. En tant que projet de formation dans le cadre du Mastere ESIEA, il a rempli son objectif principal : prouver la capacité à construire une application Android native de zero avec des technologies modernes.

L'absence de depot Git signifie qu'il n'y a pas d'historique de versions. L'application resté sur la machine de développement en tant qu'APK autonome. Aucun déploiement sur le Google Play Store n'a été prévu ni tente.

La dépendance à l'API non-officielle de Shazam représenté le plus gros risque à long terme. Tout changement dans la structure de l'API ou des headers casserait la fonctionnalité principale. Pour un scénario de production, une migration vers une API de recommandation musicale officielle (Spotify Recommendations, Last.fm) serait l'évolution naturelle.

Parcours associe

Experience professionnelle liee a cette realisation

Regard Critique

Une rétrospective honnete sur le projet

Points Forts

Produit fonctionnel de bout en bout démontré avec des captures d'ecran réelles

Stack technologique de pointe (Kotlin 2.0.21, SDK 36, Compose 2024.12)

Architecture MVVM propre avec séparation des responsabilites

Documentation technique riche depassant les standards habituels des projets de formation

Gestion avancée des erreurs : chunking 3 niveaux, mapping 5 stratégies, circuit breaker

Accèssibilité intégrée : composants dedies, cibles 48dp, contraste 4.5:1

Axes d'Amélioration

Pas de Depot Git

Un .gitignore existe mais aucun depot n'a été initialise. Critique pour la traçabilité et la collaboration.

Pas de Tests Unitaires

Les dépendances de test sont presentes (JUnit, Espresso, Compose UI Test) mais zero fichier de test ecrit. L'algorithme BFS et le mapper meritent des tests approfondis.

Pas de Persistance Locale

Room est référence dans le version catalog mais pas active. Les playlists générées ne survivent pas à la fermeture de l'application.

Dépendance à une API Non-Officielle

L'API non-officielle de Shazam est fragile. Aucun fallback vers des sources de recommandation alternatives n'est implemente.

Injection de Dépendances Manquante

Hilt est dans le version catalog mais pas utilise. Les services sont vraisemblablement instancies manuellement.

Enseignements Durables
1

L'IA accéléré mais ne remplace pas le jugement d'ingenieur : la décision de ne pas écrire de tests ou d'initialiser git resté la responsabilite du développeur.

2

La documentation en amont (PRD, documents de stratégie) a visiblement guide un développement cohérent et structure.

3

Le rate limiting doit être un souci architectural des le premier jour quand on depend d'APIs tierces, pas une correction après coup.

Competences mobilisees

Competences techniques et humaines appliquees

Galerie d'images

Captures et visuels du projet