# Exigences Non Fonctionnelles - BricoLoc Moderne **Version** : 1.0 **Date** : 31 Octobre 2025 **Projet** : BricoLoc - Application Moderne de Location d'Outils --- ## 1. Performance ### 1.1 Temps de Réponse | Opération | Objectif | Maximum Acceptable | |-----------|----------|-------------------| | Chargement page d'accueil | < 1s | 2s | | Recherche d'outils | < 500ms | 1s | | Affichage catalogue | < 1s | 2s | | Création de réservation | < 1.5s | 3s | | Mise à jour profil utilisateur | < 800ms | 2s | ### 1.2 Capacité et Charge - **Utilisateurs simultanés** : Support de 1000 utilisateurs actifs simultanés - **Transactions par seconde** : Minimum 100 TPS en charge normale - **Temps de réponse sous charge** : Dégradation maximale de 20% sous charge maximale - **Base de données** : Support de 100,000+ outils dans le catalogue - **Réservations** : Gestion de 50,000+ réservations actives simultanées ### 1.3 Optimisation Frontend - **First Contentful Paint (FCP)** : < 1.5s - **Largest Contentful Paint (LCP)** : < 2.5s - **Time to Interactive (TTI)** : < 3.5s - **Cumulative Layout Shift (CLS)** : < 0.1 - **First Input Delay (FID)** : < 100ms ### 1.4 Optimisation Backend - **Query Database** : < 100ms pour les requêtes simples - **API Response Time** : < 200ms (P95) - **Connection Pool** : Minimum 20 connexions PostgreSQL - **Caching** : Redis pour données fréquemment consultées (catégories, entrepôts) --- ## 2. Sécurité ### 2.1 Authentification et Autorisation - **Authentification** : OAuth 2.0 / JWT via Supabase Auth - **Multi-facteur (MFA)** : Recommandé pour les comptes admin - **Session Management** : - Durée de session : 24h par défaut - Refresh token : 30 jours - Logout automatique après inactivité : 1h - **Password Policy** : - Minimum 8 caractères - Au moins 1 majuscule, 1 minuscule, 1 chiffre - Pas de mots de passe communs (liste OWASP) ### 2.2 Protection des Données - **Encryption at Rest** : AES-256 pour données sensibles - **Encryption in Transit** : TLS 1.3 obligatoire - **Row Level Security (RLS)** : Activé sur toutes les tables Supabase - **Données Personnelles** : - Conformité RGPD - Anonymisation des données après 3 ans d'inactivité - Droit à l'oubli respecté (suppression complète en 30 jours) ### 2.3 Sécurité Applicative - **SQL Injection** : Prévention via paramètres Supabase - **XSS** : Protection via Content Security Policy (CSP) - **CSRF** : Tokens CSRF sur toutes les mutations - **Rate Limiting** : - API : 100 requêtes/minute par IP - Auth : 5 tentatives de login/minute - Recherche : 30 requêtes/minute ### 2.4 Audit et Logging - **Activity Logs** : Conservation 90 jours - **Security Events** : Alertes temps réel - **Access Logs** : Conservation 1 an - **SIEM Integration** : Prêt pour intégration future --- ## 3. Fiabilité et Disponibilité ### 3.1 Disponibilité - **Uptime** : 99.5% (SLA cible) - **Temps d'arrêt planifié** : Maximum 4h/mois (maintenance) - **Fenêtre de maintenance** : Dimanche 2h-6h (heure locale) ### 3.2 Récupération - **RTO (Recovery Time Objective)** : < 4h - **RPO (Recovery Point Objective)** : < 1h - **Backup** : - Base de données : Daily automatic (Supabase) - Retention : 30 jours - Test de restauration : Mensuel ### 3.3 Résilience - **Error Handling** : Gestion gracieuse des erreurs - **Circuit Breaker** : Protection contre services défaillants - **Retry Logic** : Retry exponentiel (max 3 tentatives) - **Fallback Strategies** : Mode dégradé fonctionnel --- ## 4. Scalabilité ### 4.1 Scalabilité Horizontale - **Frontend** : Serverless via Vercel (auto-scaling) - **Backend API** : Supabase auto-scale - **Base de données** : Supabase PostgreSQL (vertical scale) - **Storage** : Supabase Storage (illimité) ### 4.2 Scalabilité Verticale - **Database** : Support jusqu'à 8GB RAM (plan Pro) - **Compute** : Serverless Edge Functions illimitées - **Bandwidth** : 250GB/mois (plan Pro) ### 4.3 CDN et Caching - **CDN** : Vercel Edge Network (monde entier) - **Static Assets** : Mise en cache 1 an - **API Responses** : Cache HTTP intelligent - **Images** : Optimisation automatique (Next.js Image) --- ## 5. Maintenabilité ### 5.1 Code Quality - **Test Coverage** : Minimum 80% - **Code Complexity** : Cyclomatic complexity < 10 - **Documentation** : JSDoc pour toutes les fonctions publiques - **Linting** : ESLint strict activé - **Formatting** : Prettier configuré ### 5.2 Architecture - **Modularity** : Architecture microservices (6 services) - **Loose Coupling** : Event-driven communication - **Clean Architecture** : 3 couches (Domain, Application, Infrastructure) - **SOLID Principles** : Respect des principes SOLID ### 5.3 Versioning - **API Versioning** : Versioning sémantique (v1, v2...) - **Git Flow** : Main, Develop, Feature branches - **Changelog** : Keep a Changelog format - **Release Notes** : Pour chaque version majeure ### 5.4 Monitoring et Debugging - **Application Monitoring** : Vercel Analytics - **Error Tracking** : Sentry (à configurer) - **Performance Monitoring** : Web Vitals tracking - **Logs** : Structured logging (JSON format) --- ## 6. Utilisabilité ### 6.1 Interface Utilisateur - **Responsive Design** : Mobile-first (breakpoints: 640px, 768px, 1024px, 1280px) - **Accessibility** : WCAG 2.1 AA compliance - **Browser Support** : - Chrome 90+ - Firefox 88+ - Safari 14+ - Edge 90+ - **Progressive Enhancement** : Fonctionne sans JavaScript (pages statiques) ### 6.2 Expérience Utilisateur - **Feedback** : Indicateurs de chargement pour actions > 500ms - **Error Messages** : Messages clairs et actionnables - **Help System** : Tooltips contextuels - **Internationalisation** : Prêt pour i18n (français par défaut) ### 6.3 Accessibilité - **Keyboard Navigation** : Support complet - **Screen Readers** : Semantic HTML + ARIA labels - **Color Contrast** : Ratio minimum 4.5:1 - **Focus Indicators** : Visibles et clairs --- ## 7. Portabilité ### 7.1 Environnements - **Development** : Local avec Docker Compose (futur) - **Staging** : Vercel Preview Deployments - **Production** : Vercel Production ### 7.2 Infrastructure as Code - **Deployment** : Vercel CLI + GitHub Actions - **Configuration** : Environment variables - **Secrets Management** : Vercel Environment Variables --- ## 8. Conformité et Légal ### 8.1 RGPD - **Consentement** : Cookie banner conforme - **Données Personnelles** : Collecte minimale - **Droit d'accès** : Export des données utilisateur - **Droit à l'oubli** : Suppression complète en 30 jours - **Portabilité** : Export JSON des données ### 8.2 Cookies - **Cookies essentiels** : Session, auth - **Cookies analytiques** : Opt-in requis - **Durée de conservation** : Maximum 13 mois ### 8.3 CGU et Mentions Légales - **CGU** : Acceptation obligatoire à l'inscription - **Mentions Légales** : Accessibles en footer - **Politique de Confidentialité** : Accessible et claire --- ## 9. Métriques de Succès ### 9.1 KPIs Techniques | Métrique | Cible | Mesure | |----------|-------|--------| | Uptime | 99.5% | Mensuelle | | Response Time (P95) | < 2s | Hebdomadaire | | Error Rate | < 1% | Quotidienne | | Test Coverage | > 80% | Continue (CI) | | Core Web Vitals | Tous "Good" | Hebdomadaire | ### 9.2 KPIs Métier | Métrique | Cible | Mesure | |----------|-------|--------| | Temps de réservation | < 3 min | Mensuelle | | Taux de conversion | > 5% | Mensuelle | | Taux d'abandon panier | < 30% | Hebdomadaire | | Satisfaction utilisateur | > 4/5 | Trimestrielle | --- ## 10. Contraintes et Limitations ### 10.1 Contraintes Techniques - **Budget** : Plan gratuit Supabase (500MB DB, 1GB bandwidth/mois) - **Vercel** : Plan hobby (100GB bandwidth/mois) - **Pas de serveur dédié** : Architecture serverless uniquement ### 10.2 Limitations Acceptées - **Recherche avancée** : Pas de recherche full-text complexe (phase 1) - **Analytics** : Analytics basiques uniquement - **Notifications push** : Web push uniquement (pas de mobile natif) - **Paiement** : Stripe uniquement (pas d'autres providers) --- ## Conclusion Ces exigences non fonctionnelles définissent le cadre de qualité pour l'application BricoLoc Moderne. Elles seront revues et ajustées au fur et à mesure de l'évolution du projet. **Prochaine révision** : Semaine 10 (après première release)