Files
AudiOhm/REFACTOR_GUIDE.md
T
root 155577303d feat: Création Design System V2 et fichiers optimisés
Design System V2:
- 📚 MASTER.md complet avec variables, animations, composants
- 🎨 Palette cyberpunk optimisée (cyan, violet, rose)
-  Système d'espacements et border radius
-  Animations documentées avec keyframes
-  Guidelines accessibilité (WCAG AA 4.5:1)
- 📱 Breakpoints responsive définis
- 🎯 Z-index scale standardisé
- 🚫 Anti-patterns documentés

CSS Optimisé (style-optimized.css):
- 🏗️ Architecture modulaire en 9 sections
- 🎛️ CSS Variables pour tout le design system
- 📐 Système d'espacement cohérent (--space-xs à --space-3xl)
- 🎨 Variables de couleur sémantiques
-  Utilitaires (flex, grid, gap, etc.)
- 🔘 Composants réutilisables (btn, card, badge, form)
- 🎬 Animations optimisées (transform/opacity uniquement)
- 📱 Responsive mobile-first
-  prefers-reduced-motion implémenté
- 🎯 Focus visible pour accessibilité

JavaScript Optimisé (app-optimized.js):
- 📦 State management centralisé (AppState)
- 🎯 DOM elements cached pour performance
- 🔐 Auth complète (login, register, logout)
- 🧭 Navigation SPA fluide
- 📱 Menu mobile fonctionnel
- 🎵 Player controls complets:
  - Play/Pause avec icon update
  - Previous/Next (placeholders)
  - Shuffle/Repeat avec toggle
  - Progress bar avec seek
  - Volume control + mute
  - Like button avec animation
- 🍞 Toast notifications système
- ⌨️ Keyboard shortcuts (Space, Arrows, M)
- 📊 API integration (playlists, tracks)
- 🎵 Global playTrack function

Guide de Refonte:
- 📋 Analyse actuelle
- 🎯 Objectifs clairs
- 📅 Plan d'implémentation en 4 phases
-  Checklist pré-livraison
- 💡 Exemples de code optimisés
- ⏱️ Estimation temps: 4-6 heures

Améliorations Clés:
1. Performance: Animations transform/opacity
2. Accessibilité: Focus states, reduced motion, ARIA
3. Maintenabilité: Code modulaire et documenté
4. Scalabilité: Système de variables cohérent
5. UX: Micro-interactions, feedback visuel

Generated with [Claude Code](https://claude.com/claude-code)
via [Happy](https://happy.engineering)

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
2026-01-19 13:55:19 +00:00

11 KiB

🎯 Guide de Refonte UI/UX - AudiOhm Web

Date: 2026-01-19 Status: Prêt à implémenter Version: 2.0


📊 Analyse Actuelle

Ce qui marche bien

  • Thème cyberpunk néon cohérent
  • Animations déjà présentes
  • Glassmorphism implémenté
  • Structure HTML sémantique
  • Responsive design fonctionnel

⚠️ Points à améliorer

  1. Performance: Trop d'animations simultanées
  2. Accessibilité: Contraste à vérifier en mode clair
  3. JavaScript: Logique manquante pour nouvelles fonctionnalités
  4. Icons: Certains emojis peuvent être remplacés par des SVG
  5. Loading States: Squelettes loading pas complètement implémentés

🎯 Objectifs de la Refonte

1. Moderniser le Design System

  • Passer à un design system plus structuré
  • Améliorer la cohérence des espacements
  • Optimiser les animations pour la performance
  • Standardiser les composants

2. Améliorer l'Accessibilité

  • Vérifier tous les contrastes de couleurs (4.5:1 minimum)
  • Ajouter des états focus visibles
  • Implémenter prefers-reduced-motion
  • Ajouter des labels ARIA

3. Optimiser les Performances

  • Réduire le nombre d'animations continues
  • Utiliser transform et opacity uniquement
  • Lazy loading des images
  • Minifier CSS en production

4. Compléter les Fonctionnalités

  • Logique JavaScript complète
  • Toast notifications fonctionnelles
  • Contrôles player actifs
  • Navigation mobile

🚀 Plan d'Implémentation

Phase 1: CSS - Optimisations (1-2 heures)

1.1 Créer un fichier CSS structuré

/* ============================================
   AUDIOHM DESIGN SYSTEM V2
   ============================================ */

/* 1. VARIABLES */
:root {
    /* Colors */
    --primary: #00F0FF;
    --secondary: #BF00FF;
    --accent: #FF006E;
    --success: #00FF88;

    /* Backgrounds */
    --bg-dark: #0A0E27;
    --bg-darker: #050814;
    --bg-card: rgba(15, 23, 50, 0.6);

    /* Text */
    --text-primary: #FFFFFF;
    --text-secondary: #A0A0C0;

    /* Effects */
    --glow-primary: 0 0 20px rgba(0, 240, 255, 0.5);
    --glow-secondary: 0 0 20px rgba(191, 0, 255, 0.5);

    /* Spacing */
    --space-sm: 0.5rem;
    --space-md: 1rem;
    --space-lg: 1.5rem;
    --space-xl: 2rem;
    --space-2xl: 3rem;

    /* Border Radius */
    --radius-sm: 8px;
    --radius-md: 12px;
    --radius-lg: 15px;
}

/* 2. RESET & BASE */
/* 3. UTILITIES */
/* 4. COMPONENTS */
/* 5. ANIMATIONS */
/* 6. RESPONSIVE */

1.2 Optimiser les animations

/* Supprimer les animations continues inutiles */
/* Conserver seulement: */
- Loading spinner
- Background gradient (20s, très lent)
- Hover states (150-300ms)

1.3 Ajouter prefers-reduced-motion

@media (prefers-reduced-motion: reduce) {
    *,
    *::before,
    *::after {
        animation-duration: 0.01ms !important;
        transition-duration: 0.01ms !important;
    }
}

Phase 2: HTML - Améliorations (1 heure)

2.1 Ajouter des attributs ARIA

<!-- Navigation -->
<nav aria-label="Navigation principale">
    <a href="#" aria-current="page">Accueil</a>
</nav>

<!-- Player -->
<div role="region" aria-label="Lecteur audio">
    <button aria-label="Lecture/Pause">
        <i class="fas fa-play"></i>
    </button>
</div>

<!-- Formulaires -->
<form aria-label="Connexion">
    <label for="login-email">Email</label>
    <input id="login-email" type="email" required autocomplete="email">
</form>

2.2 Remplacer les emojis par des SVG (si présents)

<!-- ❌ Ne pas utiliser -->
<span>🎵</span>

<!-- ✅ Utiliser -->
<i class="fas fa-music" aria-hidden="true"></i>

2.3 Optimiser la structure sémantique

<main role="main">
    <section aria-labelledby="trending-heading">
        <h2 id="trending-heading">Musiques tendance</h2>
    </section>
</main>

Phase 3: JavaScript - Fonctionnalités (2-3 heures)

3.1 Toast Notifications

function showToast(message, type = 'success') {
    const container = document.getElementById('toast-container');
    const toast = document.createElement('div');
    toast.className = `toast ${type}`;
    toast.innerHTML = `
        <i class="fas fa-${type === 'success' ? 'check-circle' : 'exclamation-circle'}"></i>
        <span>${message}</span>
    `;
    container.appendChild(toast);

    setTimeout(() => {
        toast.style.animation = 'toastSlideOut 0.4s ease forwards';
        setTimeout(() => toast.remove(), 400);
    }, 3000);
}

3.2 Navigation Mobile

const mobileMenuBtn = document.getElementById('mobile-menu-btn');
const sidebar = document.getElementById('sidebar');

mobileMenuBtn.addEventListener('click', () => {
    sidebar.classList.toggle('open');
});

// Fermer le menu en cliquant en dehors
document.addEventListener('click', (e) => {
    if (!sidebar.contains(e.target) && !mobileMenuBtn.contains(e.target)) {
        sidebar.classList.remove('open');
    }
});

3.3 Player Controls

// Play/Pause
document.getElementById('play-btn').addEventListener('click', () => {
    const audio = document.getElementById('audio-player');
    const icon = document.querySelector('#play-btn i');

    if (audio.paused) {
        audio.play();
        icon.classList.remove('fa-play');
        icon.classList.add('fa-pause');
    } else {
        audio.pause();
        icon.classList.remove('fa-pause');
        icon.classList.add('fa-play');
    }
});

// Mute
document.getElementById('mute-btn').addEventListener('click', () => {
    const audio = document.getElementById('audio-player');
    const icon = document.querySelector('#mute-btn i');

    audio.muted = !audio.muted;

    if (audio.muted) {
        icon.className = 'fas fa-volume-mute';
    } else {
        icon.className = 'fas fa-volume-up';
    }
});

// Like button
document.getElementById('like-btn').addEventListener('click', function() {
    this.classList.toggle('liked');
    const icon = this.querySelector('i');

    if (this.classList.contains('liked')) {
        icon.classList.remove('far');
        icon.classList.add('fas');
        showToast('Ajouté aux titres likés', 'success');
    } else {
        icon.classList.remove('fas');
        icon.classList.add('far');
        showToast('Retiré des titres likés', 'success');
    }
});

3.4 Progress Bar

const audio = document.getElementById('audio-player');
const progressBar = document.getElementById('progress-bar');
const currentTimeEl = document.getElementById('current-time');
const totalTimeEl = document.getElementById('total-time');

// Update progress
audio.addEventListener('timeupdate', () => {
    const progress = (audio.currentTime / audio.duration) * 100;
    progressBar.value = progress;
    currentTimeEl.textContent = formatTime(audio.currentTime);
});

audio.addEventListener('loadedmetadata', () => {
    totalTimeEl.textContent = formatTime(audio.duration);
});

// Seek
progressBar.addEventListener('input', () => {
    const time = (progressBar.value / 100) * audio.duration;
    audio.currentTime = time;
});

function formatTime(seconds) {
    const mins = Math.floor(seconds / 60);
    const secs = Math.floor(seconds % 60);
    return `${mins}:${secs.toString().padStart(2, '0')}`;
}

Phase 4: CSS - Finitions (1 heure)

4.1 Scrollbar Custom

.main-content::-webkit-scrollbar {
    width: 8px;
}

.main-content::-webkit-scrollbar-track {
    background: transparent;
}

.main-content::-webkit-scrollbar-thumb {
    background: var(--border);
    border-radius: 4px;
}

.main-content::-webkit-scrollbar-thumb:hover {
    background: var(--primary);
}

4.2 Improved Hover States

.track-card {
    transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
}

.track-card:hover {
    transform: translateY(-3px) scale(1.01);
    box-shadow: var(--glow-primary);
}

4.3 Focus States

button:focus-visible,
input:focus-visible,
a:focus-visible {
    outline: 2px solid var(--primary);
    outline-offset: 2px;
}

📋 Checklist Pré-Livraison

Visual Quality

  • Aucun emoji comme icône
  • Icons cohérents (Font Awesome uniquement)
  • Hover states sans layout shift
  • Couleurs du thème utilisées directement
  • Pas de transitions width/height

Interaction

  • cursor-pointer sur éléments cliquables
  • Feedback visuel au hover
  • Transitions 150-300ms
  • Focus states visibles

Accessibility

  • Contraste 4.5:1 minimum
  • Labels ARIA présents
  • prefers-reduced-motion implémenté
  • Navigation clavier fonctionnelle

Performance

  • Animations optimisées (transform/opacity)
  • Pas d'animations infinies décoratives
  • Images lazy-loaded
  • CSS minifié en prod

Responsive

  • Mobile (375px) OK
  • Tablet (768px) OK
  • Desktop (1024px+) OK
  • Pas de horizontal scroll

🎨 Exemples de Code Optimisé

Button Component

.btn {
    position: relative;
    overflow: hidden;
    padding: var(--space-md) var(--space-xl);
    border: none;
    border-radius: var(--radius-md);
    font-weight: 600;
    cursor: pointer;
    transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
}

.btn::before {
    content: '';
    position: absolute;
    top: 0;
    left: -100%;
    width: 100%;
    height: 100%;
    background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.3), transparent);
    transition: left 0.5s ease;
}

.btn:hover::before {
    left: 100%;
}

.btn:hover {
    transform: translateY(-3px);
}

Card Component

.card {
    background: var(--bg-card);
    backdrop-filter: blur(10px);
    border: 1px solid var(--border);
    border-radius: var(--radius-lg);
    padding: var(--space-lg);
    transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
}

.card:hover {
    border-color: var(--primary);
    box-shadow: var(--glow-primary);
    transform: translateY(-3px);
}

Loading Skeleton

.skeleton {
    background: linear-gradient(90deg,
        rgba(255, 255, 255, 0.05) 0%,
        rgba(255, 255, 255, 0.1) 50%,
        rgba(255, 255, 255, 0.05) 100%
    );
    background-size: 200% 100%;
    animation: shimmer 1.5s infinite;
    border-radius: var(--radius-sm);
}

@keyframes shimmer {
    0% { background-position: 200% 0; }
    100% { background-position: -200% 0; }
}

🚀 Next Steps

  1. Créer un nouveau fichier CSS structuré basé sur le design system
  2. Implémenter les fonctionnalités JavaScript manquantes
  3. Tester l'accessibilité avec un outil comme Lighthouse
  4. Optimiser les performances avec Chrome DevTools
  5. Tester sur mobile (375px, 768px)
  6. Minifier et déployer

Version: 2.0 Statut: Prêt à implémenter Estimation: 4-6 heures de travail