[
  {
    "id": "rb-ar-101",
    "title": "Arduino: Premiers pas",
    "level": "Débutant",
    "durationHours": 12,
    "priceEUR": 79,
    "tags": ["arduino", "électronique", "bases"],
    "shortDescription": "Découvrir les broches, les E/S et la logique de base.",
    "fullDescription": "Un parcours pas à pas pour comprendre les entrées/sorties numériques et analogiques, écrire des programmes simples et brancher des capteurs sans risque.",
    "language": "Français",
    "schedule": [{"day": "Lun.", "time": "18:00"}, {"day": "Jeu.", "time": "18:00"}],
    "seatsAvailable": 10,
    "rating": 4.7,
    "reviewsCount": 124
  },
  {
    "id": "rb-mpy-110",
    "title": "MicroPython sur microcontrôleurs",
    "level": "Débutant",
    "durationHours": 10,
    "priceEUR": 85,
    "tags": ["micropython", "python", "capteurs"],
    "shortDescription": "Programmer des cartes avec Python en toute simplicité.",
    "fullDescription": "Installez MicroPython, manipulez GPIO, temporisations et PWM. Créez des mini-projets rapidement.",
    "language": "Français",
    "schedule": [{"day": "Mar.", "time": "17:30"}, {"day": "Ven.", "time": "17:30"}],
    "seatsAvailable": 12,
    "rating": 4.6,
    "reviewsCount": 98
  },
  {
    "id": "rb-elt-120",
    "title": "Électricité pratique pour la robotique",
    "level": "Débutant",
    "durationHours": 8,
    "priceEUR": 59,
    "tags": ["sécurité", "alimentation", "bases"],
    "shortDescription": "Notions d’intensité, tension et sécurité.",
    "fullDescription": "Apprenez à dimensionner une alimentation, comprendre la loi d’Ohm, câbler proprement et éviter les courts-circuits.",
    "language": "Français",
    "schedule": [{"day": "Sam.", "time": "09:00"}],
    "seatsAvailable": 15,
    "rating": 4.8,
    "reviewsCount": 150
  },
  {
    "id": "rb-cps-130",
    "title": "Capteurs et actionneurs",
    "level": "Intermédiaire",
    "durationHours": 14,
    "priceEUR": 99,
    "tags": ["capteurs", "moteurs", "servo"],
    "shortDescription": "Lire le monde et agir en retour.",
    "fullDescription": "Du capteur de distance aux moteurs: étalonnage, bruit, et commandes robustes.",
    "language": "Français",
    "schedule": [{"day": "Mer.", "time": "18:30"}],
    "seatsAvailable": 8,
    "rating": 4.5,
    "reviewsCount": 76
  },
  {
    "id": "rb-lin-140",
    "title": "Lignes, suivi et asservissement",
    "level": "Intermédiaire",
    "durationHours": 16,
    "priceEUR": 119,
    "tags": ["contrôle", "PID", "mobile"],
    "shortDescription": "Piloter un robot suiveur de ligne.",
    "fullDescription": "Boucles d’asservissement, calcul d’erreur, introduction au PID, et essais sur parcours papier.",
    "language": "Français",
    "schedule": [{"day": "Lun.", "time": "19:00"}],
    "seatsAvailable": 7,
    "rating": 4.4,
    "reviewsCount": 54
  },
  {
    "id": "rb-com-150",
    "title": "Communication série et I2C",
    "level": "Intermédiaire",
    "durationHours": 10,
    "priceEUR": 89,
    "tags": ["uart", "i2c", "spi"],
    "shortDescription": "Connecter plusieurs modules efficacement.",
    "fullDescription": "Maîtrisez UART, I2C et SPI, évitez les conflits d’adresses et testez avec des analyseurs logiques.",
    "language": "Français",
    "schedule": [{"day": "Jeu.", "time": "18:00"}],
    "seatsAvailable": 11,
    "rating": 4.5,
    "reviewsCount": 60
  },
  {
    "id": "rb-pwr-160",
    "title": "Gestion de l’énergie pour robots",
    "level": "Intermédiaire",
    "durationHours": 12,
    "priceEUR": 109,
    "tags": ["batteries", "solaire", "rendement"],
    "shortDescription": "Autonomie et sécurité énergétique.",
    "fullDescription": "Choix de batteries, protections, charge solaire et optimisation de la consommation.",
    "language": "Français",
    "schedule": [{"day": "Sam.", "time": "10:00"}],
    "seatsAvailable": 9,
    "rating": 4.6,
    "reviewsCount": 71
  },
  {
    "id": "rb-cod-170",
    "title": "Algorithmes pour la robotique",
    "level": "Avancé",
    "durationHours": 18,
    "priceEUR": 149,
    "tags": ["algorithmes", "graphes", "planification"],
    "shortDescription": "De la planification aux graphes.",
    "fullDescription": "Parcours de graphes, A*, évitement d’obstacles et planification simple sur grille.",
    "language": "Français",
    "schedule": [{"day": "Mar.", "time": "19:00"}],
    "seatsAvailable": 6,
    "rating": 4.3,
    "reviewsCount": 42
  },
  {
    "id": "rb-emb-180",
    "title": "C embarqué: interruptions et timers",
    "level": "Avancé",
    "durationHours": 20,
    "priceEUR": 169,
    "tags": ["C", "interruptions", "temps réel"],
    "shortDescription": "Bases du temps réel sur microcontrôleurs.",
    "fullDescription": "Écrire du code robuste avec interruptions, timers et priorités, sans OS.",
    "language": "Français",
    "schedule": [{"day": "Jeu.", "time": "19:00"}],
    "seatsAvailable": 5,
    "rating": 4.2,
    "reviewsCount": 33
  },
  {
    "id": "rb-net-190",
    "title": "Réseau et IoT local",
    "level": "Intermédiaire",
    "durationHours": 14,
    "priceEUR": 129,
    "tags": ["wifi", "mqtt", "iot"],
    "shortDescription": "Publier des données locales de capteurs.",
    "fullDescription": "MQTT, topics, qualité de service et dashboards légers sur réseau local.",
    "language": "Français",
    "schedule": [{"day": "Ven.", "time": "18:00"}],
    "seatsAvailable": 10,
    "rating": 4.5,
    "reviewsCount": 58
  },
  {
    "id": "rb-vis-200",
    "title": "Vision par ordinateur légère",
    "level": "Intermédiaire",
    "durationHours": 16,
    "priceEUR": 159,
    "tags": ["vision", "caméra", "détection"],
    "shortDescription": "Détections simples sur micro-ordinateurs.",
    "fullDescription": "Filtrage, segmentation et détection d’objets légers pour robots peu gourmands.",
    "language": "Français",
    "schedule": [{"day": "Mer.", "time": "19:00"}],
    "seatsAvailable": 7,
    "rating": 4.1,
    "reviewsCount": 39
  },
  {
    "id": "rb-mech-210",
    "title": "Mécanique et châssis frugal",
    "level": "Débutant",
    "durationHours": 8,
    "priceEUR": 69,
    "tags": ["mécanique", "châssis", "fabrication"],
    "shortDescription": "Assembler un châssis robuste et simple.",
    "fullDescription": "Choix des matériaux, perçage, fixations, et astuces pour l’alignement.",
    "language": "Français",
    "schedule": [{"day": "Sam.", "time": "14:00"}],
    "seatsAvailable": 14,
    "rating": 4.6,
    "reviewsCount": 80
  },
  {
    "id": "rb-sim-220",
    "title": "Simulation de robots",
    "level": "Intermédiaire",
    "durationHours": 12,
    "priceEUR": 119,
    "tags": ["simulation", "test", "proto"],
    "shortDescription": "Tester des idées sans risques.",
    "fullDescription": "Découverte de simulateurs légers pour valider des algorithmes avant montage réel.",
    "language": "Français",
    "schedule": [{"day": "Lun.", "time": "18:30"}],
    "seatsAvailable": 9,
    "rating": 4.4,
    "reviewsCount": 55
  },
  {
    "id": "rb-sol-230",
    "title": "Projets solaires autonomes",
    "level": "Intermédiaire",
    "durationHours": 14,
    "priceEUR": 139,
    "tags": ["solaire", "autonomie", "énergie"],
    "shortDescription": "Concevoir des modules solaires utiles.",
    "fullDescription": "Bilan énergétique, régulation de charge et intégration au robot.",
    "language": "Français",
    "schedule": [{"day": "Mar.", "time": "18:30"}],
    "seatsAvailable": 10,
    "rating": 4.6,
    "reviewsCount": 67
  },
  {
    "id": "rb-dbg-240",
    "title": "Debug et instrumentation",
    "level": "Intermédiaire",
    "durationHours": 10,
    "priceEUR": 99,
    "tags": ["debug", "oscilloscope", "analyse"],
    "shortDescription": "Trouver et corriger les pannes.",
    "fullDescription": "Méthodes de diagnostic, logs série, sondes logiques et oscilloscopes d’entrée de gamme.",
    "language": "Français",
    "schedule": [{"day": "Jeu.", "time": "18:30"}],
    "seatsAvailable": 11,
    "rating": 4.5,
    "reviewsCount": 52
  },
  {
    "id": "rb-ros-250",
    "title": "Introduction à ROS (léger)",
    "level": "Avancé",
    "durationHours": 18,
    "priceEUR": 179,
    "tags": ["ros", "middleware", "navigation"],
    "shortDescription": "Notions de nœuds, topics et navigation simple.",
    "fullDescription": "Installer une version légère, créer des nœuds et échanger des messages pour orchestrer un robot.",
    "language": "Français",
    "schedule": [{"day": "Ven.", "time": "19:00"}],
    "seatsAvailable": 5,
    "rating": 4.0,
    "reviewsCount": 28
  },
  {
    "id": "rb-ai-260",
    "title": "IA embarquée ultra-légère",
    "level": "Avancé",
    "durationHours": 16,
    "priceEUR": 189,
    "tags": ["ia", "edge", "tinyml"],
    "shortDescription": "Reconnaissance simple sur microcontrôleurs.",
    "fullDescription": "TinyML, quantification et déploiement de modèles de faible taille.",
    "language": "Français",
    "schedule": [{"day": "Mer.", "time": "18:00"}],
    "seatsAvailable": 4,
    "rating": 3.9,
    "reviewsCount": 21
  },
  {
    "id": "rb-netp-270",
    "title": "Protocoles réseaux pour robots",
    "level": "Intermédiaire",
    "durationHours": 12,
    "priceEUR": 119,
    "tags": ["udp", "tcp", "réseau"],
    "shortDescription": "Communication fiable et rapide.",
    "fullDescription": "Choix de protocoles, latence, pertes et stratégies de reconnexion.",
    "language": "Français",
    "schedule": [{"day": "Lun.", "time": "19:30"}],
    "seatsAvailable": 8,
    "rating": 4.2,
    "reviewsCount": 37
  },
  {
    "id": "rb-prj-280",
    "title": "Projet guidé: robot mobile",
    "level": "Intermédiaire",
    "durationHours": 22,
    "priceEUR": 199,
    "tags": ["projet", "mobile", "intégration"],
    "shortDescription": "Assembler un robot de A à Z.",
    "fullDescription": "De la mécanique au code, un accompagnement structuré pour un premier robot mobile fonctionnel.",
    "language": "Français",
    "schedule": [{"day": "Sam.", "time": "09:30"}],
    "seatsAvailable": 6,
    "rating": 4.7,
    "reviewsCount": 88
  },
  {
    "id": "rb-sft-290",
    "title": "Qualité logicielle embarquée",
    "level": "Avancé",
    "durationHours": 14,
    "priceEUR": 159,
    "tags": ["tests", "robustesse", "outils"],
    "shortDescription": "Fiabiliser le code embarqué.",
    "fullDescription": "Tests unitaires, revues de code, et outillage minimal pour maintenir le firmware.",
    "language": "Français",
    "schedule": [{"day": "Jeu.", "time": "19:30"}],
    "seatsAvailable": 5,
    "rating": 4.1,
    "reviewsCount": 29
  },
  {
    "id": "rb-kid-300",
    "title": "Robotique pour jeunes (10+)",
    "level": "Débutant",
    "durationHours": 6,
    "priceEUR": 49,
    "tags": ["jeunesse", "découverte", "atelier"],
    "shortDescription": "Ateliers ludiques et sécurisés.",
    "fullDescription": "Jeux, défis et petits montages pour découvrir l’électronique et la logique.",
    "language": "Français",
    "schedule": [{"day": "Mer.", "time": "14:00"}],
    "seatsAvailable": 16,
    "rating": 4.8,
    "reviewsCount": 140
  },
  {
    "id": "rb-eco-310",
    "title": "Écoconception en robotique",
    "level": "Intermédiaire",
    "durationHours": 10,
    "priceEUR": 109,
    "tags": ["écoconception", "durable", "matériaux"],
    "shortDescription": "Réduire l’empreinte de vos projets.",
    "fullDescription": "Choix de composants durables, réemploi et optimisation des consommations.",
    "language": "Français",
    "schedule": [{"day": "Mar.", "time": "18:00"}],
    "seatsAvailable": 9,
    "rating": 4.6,
    "reviewsCount": 61
  }
]