Sur la fiche projet, j'explique ce que fait Redline Specs. Ici, je détaille comment : comment une requête traverse l'API et Groq à chaque changement de filtre, et pourquoi le filtre est construit dans cet ordre précis plutôt qu'un autre.
Redline Specs n'a pas de base de données. L'API custom fournit les données brutes ; quand un champ manque ou qu'un modèle mérite plus de contexte, c'est Groq qui complète jamais l'inverse. Ce choix évite d'avoir à maintenir une base à la main pendant que la source d'origine continue d'évoluer.
Changer un filtre relance API + Groq à chaque fois. Le résultat affiché correspond toujours à l'état actuel de la source, jamais à une fiche pré-générée qui pourrait être périmée.
L'IA n'intervient que sur ce que l'API ne fournit pas : contexte d'usage, pannes connues, formulation. Les valeurs techniques chiffrées restent celles de la source d'origine.
Marque, permis, type, modèle, année : l'ordre n'est pas celui des colonnes dans la donnée, c'est celui dans lequel un acheteur de moto raisonne réellement du plus large au plus précis, avec la seule contrainte légale placée dès que la marque est choisie.
C'est le repère le plus intuitif : la plupart des visiteurs arrivent avec une marque en tête, ou au moins une short-list. Commencer par là réduit tout de suite le volume de données à charger et cadre la suite du parcours autour d'un catalogue gérable plutôt que des 15+ marques d'un coup.
Un titulaire du permis A2 ne peut pas envisager une machine réservée au permis A, quel que soit son goût pour telle carrosserie ou telle année. C'est le seul filtre qui élimine des options sans discussion, donc il vient juste après la marque, avant toute préférence de style.
Trail, roadster, sportive, custom : une préférence, pas une contrainte dure. Elle vient après le filtre légal, jamais avant.
Une fois la marque, le permis et le type fixés, il ne reste qu'un nombre restreint de modèles. C'est là que l'acheteur passe du segment à la machine précise.
Le filtre qui réduit le moins la pertinence et le plus la taille de la liste. Il sert à comparer des générations d'un même modèle, pas à orienter le choix de départ.
Chaque filtre relance un appel serveur plutôt que de trier une liste déjà chargée côté client. Charger le catalogue entier (15 marques et plus) au premier chargement pour gagner en rapidité sur le deuxième clic n'était pas un bon compromis : la liste passe en état de chargement dès le clic, pour que l'attente se lise comme une réponse en cours et non comme un gel de l'interface.