{"version":1,"pages":[{"id":"zEZaKcrvf9bKik5JuqUB","title":"Présentation","pathname":"/vue.js-but","siteSpaceId":"sitesp_qbR1p","description":"","breadcrumbs":[{"label":"BUT2"}]},{"id":"IREDmEFZKRDSvBwsAiBV","title":"Séance 1 : Concepts et installation","pathname":"/vue.js-but/but2/seance-1-concepts-et-installation","siteSpaceId":"sitesp_qbR1p","description":"","breadcrumbs":[{"label":"BUT2"}]},{"id":"8Gmjm4ioRJAagbicwEmw","title":"Séance 2 : Boucles et tests","pathname":"/vue.js-but/but2/seance-2-boucles-et-tests","siteSpaceId":"sitesp_qbR1p","description":"","breadcrumbs":[{"label":"BUT2"}]},{"id":"12lppzurZstnnIsIOQJt","title":"Séance 3 : Routes","pathname":"/vue.js-but/but2/seance-3-routes","siteSpaceId":"sitesp_qbR1p","description":"","breadcrumbs":[{"label":"BUT2"}]},{"id":"GQ7wHPWTgHx76wzY9VYQ","title":"Séance 4-5 : Composants et API","pathname":"/vue.js-but/but2/seance-4-5-composants-et-api","siteSpaceId":"sitesp_qbR1p","description":"","breadcrumbs":[{"label":"BUT2"}]},{"id":"GExsJ70kwvg3e4YOvb5o","title":"Séance 6 : Routes et API","pathname":"/vue.js-but/but2/seance-6-routes-et-api","siteSpaceId":"sitesp_qbR1p","description":"","breadcrumbs":[{"label":"BUT2"}]},{"id":"Q1wH77hFYIuahNtJJHYz","title":"Séance 7 : Evénements et Formulaires","pathname":"/vue.js-but/but2/seance-7-evenements-et-formulaires","siteSpaceId":"sitesp_qbR1p","description":"","breadcrumbs":[{"label":"BUT2"}]},{"id":"hFY5e6y5MFka1MsIPFrD","title":"Séance 8 : Watch et évents","pathname":"/vue.js-but/but2/seance-8-watch-event","siteSpaceId":"sitesp_qbR1p","description":"","breadcrumbs":[{"label":"BUT2"}]},{"id":"ySiE2jy7jMEuD9DgSaSN","title":"Séance 9-10 : Pour réviser","pathname":"/vue.js-but/but2/seance-15-16-securite-login","siteSpaceId":"sitesp_qbR1p","description":"","breadcrumbs":[{"label":"BUT2"}]},{"id":"Rozm6sXa8bQP7h909Ln1","title":"Séance 11 : ApiPlatform","pathname":"/vue.js-but/but2/seance-9-api-platform","siteSpaceId":"sitesp_qbR1p","description":"","breadcrumbs":[{"label":"BUT2"}]},{"id":"SYOVdUH2trdbMXuxzRBR","title":"Séance 12 : VueJs et ApiPlatform (1)","pathname":"/vue.js-but/but2/seance-10-vuejs-apiplatform-1","siteSpaceId":"sitesp_qbR1p","description":"","breadcrumbs":[{"label":"BUT2"}]},{"id":"K1AlHaZpQ9WzkOA36fcH","title":"Séance 13 : VueJs et ApiPlatform (2)","pathname":"/vue.js-but/but2/seance-11-vuejs-apiplatform-1","siteSpaceId":"sitesp_qbR1p","description":"","breadcrumbs":[{"label":"BUT2"}]},{"id":"9LIAL8gzsEGoMhw1TesJ","title":"Séance 14 : Routes imbriquées // Animations et transitions","pathname":"/vue.js-but/but2/seance-13-routes-imbriquees","siteSpaceId":"sitesp_qbR1p","description":"","breadcrumbs":[{"label":"BUT2"}]},{"id":"uPfFWUYE3sB5k9c4EnMw","title":"Séance 15","pathname":"/vue.js-but/but2/seance-15","siteSpaceId":"sitesp_qbR1p","description":"","breadcrumbs":[{"label":"BUT2"}]},{"id":"axGdVgUKKlnQEOsh9Xhc","title":"Séance 16","pathname":"/vue.js-but/but2/seance-16","siteSpaceId":"sitesp_qbR1p","description":"","breadcrumbs":[{"label":"BUT2"}]},{"id":"miwFe9HrJyR7dvNGsptb","title":"Séance 17 : TP Noté","pathname":"/vue.js-but/but2/seance-18-tp-note","siteSpaceId":"sitesp_qbR1p","description":"","breadcrumbs":[{"label":"BUT2"}]},{"id":"NtON8dY3YDpHIKqsoHkj","title":"Séance 18 : Evaluation écrite","pathname":"/vue.js-but/but2/seance-19-evaluation-ecrite","siteSpaceId":"sitesp_qbR1p","description":"","breadcrumbs":[{"label":"BUT2"}]},{"id":"tBMTjtlGI6orDmvZQSrf","title":"Mini projet : Site e-commerce","pathname":"/vue.js-but/but2/mini-projet-site-e-commerce","siteSpaceId":"sitesp_qbR1p","description":"","breadcrumbs":[{"label":"BUT2"}]},{"id":"0FIsui07oa8m2SoPwb4p","title":"Contexte et objectifs","pathname":"/vue.js-but/but3-projets/contexte-et-objectifs","siteSpaceId":"sitesp_qbR1p","description":"","breadcrumbs":[{"label":"BUT3 - Projets"}]},{"id":"KsFipOTZgfW3MvU4S1jz","title":"Agence 1","pathname":"/vue.js-but/but3-projets/sujet","siteSpaceId":"sitesp_qbR1p","description":"","breadcrumbs":[{"label":"BUT3 - Projets"}]},{"id":"43GBMURqxMN9Ie6neICW","title":"Agence 2","pathname":"/vue.js-but/but3-projets/sujet-1","siteSpaceId":"sitesp_qbR1p","description":"","breadcrumbs":[{"label":"BUT3 - Projets"}]},{"id":"9d7NPo5fUMg6Hs4jENgG","title":"Agence 3","pathname":"/vue.js-but/but3-projets/sujet-2","siteSpaceId":"sitesp_qbR1p","description":"","breadcrumbs":[{"label":"BUT3 - Projets"}]},{"id":"AVbg5n1sICJfRpTBugco","title":"Support : gitFlow","pathname":"/vue.js-but/but3-projets/gitflow","siteSpaceId":"sitesp_qbR1p","description":"","breadcrumbs":[{"label":"BUT3 - Projets"}]},{"id":"5IsDd7p6gIX9JI5MVLBB","title":"Séance 0 : Présentation de la ressource en BUT3","pathname":"/vue.js-but/but3-supports-de-cours/seance-0-presentation","siteSpaceId":"sitesp_qbR1p","description":"","breadcrumbs":[{"label":"BUT3 (Supports de cours)"}]},{"id":"BVNaJmidVSVqGzVIObiA","title":"Séance 1 : TypeScript pour Vue 3 & Nuxt 4","pathname":"/vue.js-but/partie-1-nuxt-4-typescript-et-architecture-s1-a-s6/seance-1-a-typescript","siteSpaceId":"sitesp_qbR1p","description":"","breadcrumbs":[{"label":"Partie 1 : Nuxt 4, TypeScript et Architecture (S1 à S6)"}]},{"id":"Oq9Ub9RFCvioqkhZztSA","title":"Séance 1 : Introduction à Nuxt 4","pathname":"/vue.js-but/partie-1-nuxt-4-typescript-et-architecture-s1-a-s6/seance-1-b-introduction-a-nuxt-3","siteSpaceId":"sitesp_qbR1p","description":"","breadcrumbs":[{"label":"Partie 1 : Nuxt 4, TypeScript et Architecture (S1 à S6)"}]},{"id":"XRFcnlP2hIixXytvyAP1","title":"Séance 1 : TypeScript pour Vue 3 & Nuxt 4","pathname":"/vue.js-but/partie-1-nuxt-4-typescript-et-architecture-s1-a-s6/seance-1-typescript","siteSpaceId":"sitesp_qbR1p","description":"","breadcrumbs":[{"label":"Partie 1 : Nuxt 4, TypeScript et Architecture (S1 à S6)"}]},{"id":"emM0DbszEb5dRtdFgwqP","title":"Séance 1 (correction) : Types et Avatar DevFlow","pathname":"/vue.js-but/partie-1-nuxt-4-typescript-et-architecture-s1-a-s6/seance-1-typescript/seance-1-correction","siteSpaceId":"sitesp_qbR1p","description":"","breadcrumbs":[{"label":"Partie 1 : Nuxt 4, TypeScript et Architecture (S1 à S6)"},{"label":"Séance 1 : TypeScript pour Vue 3 & Nuxt 4"}]},{"id":"nNg2I0hOtcYH9CKH29TE","title":"Séance 2 : Introduction à Nuxt 4 & Fondations","pathname":"/vue.js-but/partie-1-nuxt-4-typescript-et-architecture-s1-a-s6/seance-2-introduction-a-nuxt-4","siteSpaceId":"sitesp_qbR1p","description":"","breadcrumbs":[{"label":"Partie 1 : Nuxt 4, TypeScript et Architecture (S1 à S6)"}]},{"id":"vJSpSHj8I51XulrQf8dJ","title":"Séance 2 (correction) : Initialisation et Setup Nuxt 4","pathname":"/vue.js-but/partie-1-nuxt-4-typescript-et-architecture-s1-a-s6/seance-2-introduction-a-nuxt-4/seance-2-correction","siteSpaceId":"sitesp_qbR1p","description":"","breadcrumbs":[{"label":"Partie 1 : Nuxt 4, TypeScript et Architecture (S1 à S6)"},{"label":"Séance 2 : Introduction à Nuxt 4 & Fondations"}]},{"id":"BUAYCUWu0NMuUFQPduuF","title":"Séance 3 : Routage, Layouts & Navigation","pathname":"/vue.js-but/partie-1-nuxt-4-typescript-et-architecture-s1-a-s6/seance-3-routage-layouts","siteSpaceId":"sitesp_qbR1p","description":"","breadcrumbs":[{"label":"Partie 1 : Nuxt 4, TypeScript et Architecture (S1 à S6)"}]},{"id":"CytaK3pOlIldUy1KF69I","title":"Séance 3 (correction) : Squelette et Layouts DevFlow","pathname":"/vue.js-but/partie-1-nuxt-4-typescript-et-architecture-s1-a-s6/seance-3-routage-layouts/seance-3-correction","siteSpaceId":"sitesp_qbR1p","description":"","breadcrumbs":[{"label":"Partie 1 : Nuxt 4, TypeScript et Architecture (S1 à S6)"},{"label":"Séance 3 : Routage, Layouts & Navigation"}]},{"id":"MXHcf4yDF8NGOCGcL8hH","title":"Séance 4 : Composables & Logique Métier Typée","pathname":"/vue.js-but/partie-1-nuxt-4-typescript-et-architecture-s1-a-s6/seance-4-composables-logique-metier","siteSpaceId":"sitesp_qbR1p","description":"","breadcrumbs":[{"label":"Partie 1 : Nuxt 4, TypeScript et Architecture (S1 à S6)"}]},{"id":"3QYq6I12a3bHAsyV8SiL","title":"Séance 4 (correction) : useTasks & useTaskFilters","pathname":"/vue.js-but/partie-1-nuxt-4-typescript-et-architecture-s1-a-s6/seance-4-composables-logique-metier/seance-4-correction","siteSpaceId":"sitesp_qbR1p","description":"","breadcrumbs":[{"label":"Partie 1 : Nuxt 4, TypeScript et Architecture (S1 à S6)"},{"label":"Séance 4 : Composables & Logique Métier Typée"}]},{"id":"prOseXI54VfcRPr2yMDG","title":"Séance 5 : Composants UI & Dashboard DevFlow","pathname":"/vue.js-but/partie-1-nuxt-4-typescript-et-architecture-s1-a-s6/seance-5-composants-ui-devflow","siteSpaceId":"sitesp_qbR1p","description":"","breadcrumbs":[{"label":"Partie 1 : Nuxt 4, TypeScript et Architecture (S1 à S6)"}]},{"id":"keccEQk3bAv8U4fh79li","title":"Séance 6 : Bonnes pratiques d'architecture & Principes SOLID","pathname":"/vue.js-but/partie-1-nuxt-4-typescript-et-architecture-s1-a-s6/seance-6-bonnes-pratiques-solid","siteSpaceId":"sitesp_qbR1p","description":"","breadcrumbs":[{"label":"Partie 1 : Nuxt 4, TypeScript et Architecture (S1 à S6)"}]},{"id":"RUkmBEvO6Gds7F98CR9d","title":"Séance 7 : State Avancé avec Pinia","pathname":"/vue.js-but/partie-2-data-fetching-api-nitro-et-state-management-s7-a-s12/seance-7-state-avance-pinia","siteSpaceId":"sitesp_qbR1p","description":"","breadcrumbs":[{"label":"Partie 2 : Data Fetching, API Nitro et State Management (S7 à S12)"}]},{"id":"QWir4N9BtCHUzovJLUiS","title":"Séance 8 : Data Fetching avec useFetch & useAsyncData","pathname":"/vue.js-but/partie-2-data-fetching-api-nitro-et-state-management-s7-a-s12/seance-8-nuxt-api","siteSpaceId":"sitesp_qbR1p","description":"","breadcrumbs":[{"label":"Partie 2 : Data Fetching, API Nitro et State Management (S7 à S12)"}]},{"id":"fmabmw76PIjsOaC4OyMb","title":"Séance 9 : API Server Nitro & Routes server/","pathname":"/vue.js-but/partie-2-data-fetching-api-nitro-et-state-management-s7-a-s12/seance-9-api-nitro","siteSpaceId":"sitesp_qbR1p","description":"","breadcrumbs":[{"label":"Partie 2 : Data Fetching, API Nitro et State Management (S7 à S12)"}]},{"id":"Bcv6rqiPo7sQKnBAhLfn","title":"Séance 10 : Middlewares de Route & Authentification","pathname":"/vue.js-but/partie-2-data-fetching-api-nitro-et-state-management-s7-a-s12/seance-10-auth-middlewares","siteSpaceId":"sitesp_qbR1p","description":"","breadcrumbs":[{"label":"Partie 2 : Data Fetching, API Nitro et State Management (S7 à S12)"}]},{"id":"JsCBfaRbZee01qpprbOv","title":"Séance 11 : Nuxt Avancé, SEO & Optimisations","pathname":"/vue.js-but/partie-2-data-fetching-api-nitro-et-state-management-s7-a-s12/seance-11-nuxt-avance-seo","siteSpaceId":"sitesp_qbR1p","description":"","breadcrumbs":[{"label":"Partie 2 : Data Fetching, API Nitro et State Management (S7 à S12)"}]},{"id":"Aa59SERG74p3AkIya5Ea","title":"Séance 12 : Intégration Complète & Consolidation DevFlow","pathname":"/vue.js-but/partie-2-data-fetching-api-nitro-et-state-management-s7-a-s12/seance-12-integration-api","siteSpaceId":"sitesp_qbR1p","description":"","breadcrumbs":[{"label":"Partie 2 : Data Fetching, API Nitro et State Management (S7 à S12)"}]},{"id":"fHIPPFV7t3AL9ung46N6","title":"Séance 13 : Tests Front Unitaires & d'Intégration (Vitest)","pathname":"/vue.js-but/partie-3-qualite-tests-et-ingenierie-ia-s13-a-s14/seance-13-tests-front","siteSpaceId":"sitesp_qbR1p","description":"","breadcrumbs":[{"label":"Partie 3 : Qualité, Tests et Ingénierie IA (S13 à S14)"}]},{"id":"psEVeL9JKhqDMi3tPnhh","title":"Séance 14 : Tests E2E & Journal de Bord IA (AI_PROMPT_BOOK)","pathname":"/vue.js-but/partie-3-qualite-tests-et-ingenierie-ia-s13-a-s14/seance-14-e2e-ia-promptbook","siteSpaceId":"sitesp_qbR1p","description":"","breadcrumbs":[{"label":"Partie 3 : Qualité, Tests et Ingénierie IA (S13 à S14)"}]},{"id":"9ecyKHnvbRCslAV3rpVU","title":"Cahier des charges & Jalons du Projet","pathname":"/vue.js-but/partie-4-projet-saas-operation-phoenix-s15-a-s24/partie-4-projet-operation-phoenix","siteSpaceId":"sitesp_qbR1p","description":"","breadcrumbs":[{"label":"Partie 4 : Projet SaaS \"Opération Phoenix\" (S15 à S24)"}]},{"id":"5cPDDG04zmBzcVtTBV7z","title":"Rappels et anciens supports","pathname":"/vue.js-but/ancien-but3/page-1","siteSpaceId":"sitesp_qbR1p","description":"","breadcrumbs":[{"label":"Ancien BUT3"}]},{"id":"kyerGQ3bObxmzSxC97XD","title":"Séance 1 : Introduction & rappel Vue","pathname":"/vue.js-but/ancien-but3/seance-1-introduction-rappel-vue","siteSpaceId":"sitesp_qbR1p","description":"","breadcrumbs":[{"label":"Ancien BUT3"}]},{"id":"jdnC2oiO9FN7UxTvh00O","title":"Séance 2 : Architecture et composables","pathname":"/vue.js-but/ancien-but3/seance-2-architecture-et-composables","siteSpaceId":"sitesp_qbR1p","description":"","breadcrumbs":[{"label":"Ancien BUT3"}]},{"id":"45q0Cm8flIYPxSrjVRum","title":"Séance 3 : Communication avec API","pathname":"/vue.js-but/ancien-but3/seance-3-communication-avec-api","siteSpaceId":"sitesp_qbR1p","description":"","breadcrumbs":[{"label":"Ancien BUT3"}]},{"id":"UBpd4HfnUeZMcwew2o5t","title":"Séance 4 : Router et navigation","pathname":"/vue.js-but/ancien-but3/seance-4-router-et-navigation","siteSpaceId":"sitesp_qbR1p","description":"","breadcrumbs":[{"label":"Ancien BUT3"}]},{"id":"eM3mswE6rZrHXzBMYMNF","title":"Séance 10 : Projet – Kick-off réseau social","pathname":"/vue.js-but/ancien-but3/seance-10-projet-kick-off-reseau-social","siteSpaceId":"sitesp_qbR1p","description":"","breadcrumbs":[{"label":"Ancien BUT3"}]},{"id":"eBXy8MfkMfpIyzxaZEnY","title":"Séance 11 : Projet – Développement","pathname":"/vue.js-but/ancien-but3/seance-11-projet-developpement","siteSpaceId":"sitesp_qbR1p","description":"","breadcrumbs":[{"label":"Ancien BUT3"}]},{"id":"9NJFeCL0Jpbjz1KDcfds","title":"Séance 12 : Projet – Finalisation","pathname":"/vue.js-but/ancien-but3/seance-12-projet-finalisation","siteSpaceId":"sitesp_qbR1p","description":"","breadcrumbs":[{"label":"Ancien BUT3"}]}]}