slim.lu
Un comparateur de prix pour les consommateurs belges. Il prend un marché où le coût réel est délibérément difficile à voir et le rend comparable pour un ménage — en montrant les sources, les dates de contrôle et les manques plutôt qu'en les masquant. En ligne sur slim.lu, open source sur ARBITORIA-BE/slim. J'en ai défini le problème, les règles de classement et les critères de validation ; la mise en œuvre est assistée par IA.
L'observation
La tarification télécom belge n'est pas compliquée par hasard. Chaque opérateur applique une fenêtre promotionnelle qui expire — six mois ici, douze là — après quoi le prix passe à un montant que personne n'a annoncé à la signature. Les packs modifient encore l'arithmétique. Les marques masquent la propriété : Scarlet, c'est Proximus ; BASE, c'est Telenet ; VOO a été absorbé par Orange. Résultat : un marché où le prix affiché et le coût sur deux ans sont deux questions différentes, et une seule est facile à vérifier.
C'est la même forme que le problème sur lequel je travaille professionnellement. Un chiffre techniquement exact et pourtant trompeur, parce que le contexte qui l'a produit a été retiré. La différence, c'est qu'au travail je corrige cela dans les systèmes d'une entreprise, et qu'ici la partie concernée est un ménage.
Ce que le service fait
- Cinq surfaces de comparaison — mobile, internet, mobile + internet, internet + TV, et le triple play complet.
- Quatre opérateurs belges — Proximus, Telenet, Orange et DIGI.
- Des prix pris chez les opérateurs eux-mêmes, analysés depuis leurs propres pages et validés contre des schémas typés avant d'atteindre une comparaison.
- Une collecte quotidienne planifiée, à 06:00 UTC, avec un cache de page rafraîchi toutes les heures.
- Trois langues — néerlandais, français et anglais, à l'image de la façon dont la Belgique lit réellement.
Publier ce qui est habituellement caché
Ce qui m'importe le plus n'est pas la comparaison, c'est la divulgation qui l'entoure. Une comparaison qu'on ne peut pas auditer n'est qu'une affirmation entourée d'un tableau. Le service publie donc, sur une page accessible à tous :
- La source et la méthode de collecte pour chaque opérateur, avec la date du dernier contrôle — en heures, pas un vague « récemment ».
- Les opérateurs exclus, et le motif précis de chacun. Lebara parce que la récupération automatisée des prix est bloquée par une protection anti-robot, avec la date à laquelle le 403 a été observé. Mobile Vikings parce que les prix se chargent à l'exécution depuis une API externe. Lycamobile parce que ses offres sont des forfaits de 30 jours et non des contrats mensuels, donc non comparables sur le même axe. VOO, BASE et Scarlet parce qu'ils sont déjà couverts — ils renvoient respectivement à Orange, Telenet et Proximus. D'autres simplement parce qu'aucun fetcher n'a encore été développé, ce qui est dit tel quel.
- La relation d'affiliation. Le service perçoit une commission lorsqu'un utilisateur conclut un contrat chez un fournisseur. C'est indiqué, ainsi que la séparation : le classement est déterminé par l'algorithme, qu'un produit soit un lien d'affiliation ou non.
Un comparateur incapable de montrer ses sources demande qu'on le croie. Publier les exclusions est le moyen le moins coûteux d'obtenir l'inverse.
Nommer les opérateurs qu'on a laissés de côté est la partie inconfortable, et la plus utile. Elle transforme un trou silencieux dans la couverture en une limite énoncée que le lecteur peut soupeser — le même réflexe que signaler les éléments non confirmés d'un jeu de données plutôt que de supprimer les lignes.
Sous le capot
L'ingénierie existe pour que ce qui précède reste vrai en continu, et non une seule fois. Elle est réalisée avec des outils de codage assistés par IA, contre des exigences et des critères d'acceptation que je fixe — à lire comme une preuve de spécification et de vérification, non de code écrit à la main.
- Chaque opérateur a son propre fetcher, et chaque résultat est validé contre un schéma typé avant usage. Les pages opérateurs changent sans prévenir : la tarification mobile d'Orange avait d'abord été écartée comme non récupérable parce qu'elle passait par un composant JavaScript, puis revérifiée des mois plus tard et retrouvée en HTML statique, ce qui a levé l'exclusion. Cet aller-retour est consigné avec ses dates plutôt que corrigé en silence.
- Des contrôles automatisés portent sur les affirmations, pas seulement sur le code — fraîcheur des données, intégrité des prix, neutralité du classement, complétude de la divulgation et parité des clés de traduction. La neutralité, en particulier, est vérifiée par un test plutôt qu'affirmée en pied de page.
- Les décisions sont écrites sous forme d'architecture decision records, y compris les options rejetées et les amendements lorsque les prémisses d'une décision se sont révélées fausses. Environ 850 tests automatisés s'exécutent avant toute fusion.
- L'ennuyeux l'emporte sur l'astucieux quand la production n'est pas d'accord. Après une mise en production, les pages de guides ont renvoyé 404 sur toutes les locales tout en fonctionnant en local. Deux hypothèses ont échoué. Le troisième diagnostic : les fichiers de contenu n'étaient jamais tracés dans le bundle serverless. Le correctif a été de supprimer entièrement le pipeline MDX et de réécrire les guides en routes typées ordinaires — moins de pièces mobiles, et plus de dépendance à une combinaison de fonctionnalités qui ne tenait pas.
Où cela en est
Le produit fonctionne et le pipeline de données tourne quotidiennement ; l'audience reste modeste. Je préfère le rapporter avec exactitude que le gonfler — les chiffres qui méritent d'être cités ici sont les quatre opérateurs couverts et le contrôle quotidien, pas une statistique de trafic.
Pourquoi cela compte pour le travail que je vise
slim.lu, c'est ce qui arrive quand l'habitude de la qualité des données est pointée vers un marché grand public plutôt que vers une base d'entreprise : trouver où le contexte a disparu, le reconstruire, et publier les limites à côté de la réponse. C'est le même métier que produire une analyse dont quelqu'un tirera une décision — les réserves doivent voyager avec le chiffre, sinon le chiffre fait des dégâts.
En ligne sur slim.lu. Sources sur github.com/ARBITORIA-BE/slim. Les pages de divulgation sont accessibles depuis chaque comparaison.