🔍 Fiche Technique · Architecture & Implémentation

Resell Radar

Système de veille automatisée sur les annonces publiques de seconde main — scoring IA, détection contrefaçons, alertes Telegram, négociation LLM.

Python Playwright Mistral LLM APScheduler SQLite Telegram API Streamlit eBay API
Projet personnel
Python
Mistral mistral-small
Local / En développement
01 — Objectif

Objectif produit

Resell Radar est un système de veille automatisée sur les annonces publiques de seconde main. Il détecte des opportunités d'achat/revente sur des articles de mode, les score selon plusieurs critères métier, filtre les articles suspects et alerte en temps réel via Telegram.

02 — Architecture

Architecture fonctionnelle

Le pipeline s'exécute automatiquement via APScheduler selon une fréquence configurable.

flowchart TD SCHED(["⏰ APScheduler\ntoutes les N minutes"]) --> PIPE["Pipeline principal"] PIPE --> SCRAP["🕷️ Scrapers\nVinted · Leboncoin"] SCRAP --> NORM["🔄 Normalizer\nformat uniforme"] NORM --> MARKET["📊 Market Price\neBay API"] MARKET --> SCORER["🎯 Scorer\n0-100 pts"] SCORER --> AUTH["🔐 Authenticité\nanti-contrefaçon"] AUTH --> FILTER{"score ≥ seuil\nET auth ≥ seuil ?"} FILTER -->|"Non"| DASH_ONLY["Dashboard\nStreamlit"] FILTER -->|"Oui 🔥"| BOTH["Alerte Telegram\n+ Dashboard"] BOTH --> NEGO["💬 Négociation\nMistral LLM"]

Pipeline complet — scraping → scoring → alertes Telegram

🕷️
agents/scraper/
stratégie par plateforme (Pattern Strategy)

Collecte les annonces avec Playwright headless. Pipeline idempotent — annonces déjà en base ignorées.

🔄
agents/normalizer.py
normalisation multi-plateforme

Normalise les données brutes vers un format uniforme avant scoring.

📊
agents/market_price.py
prix de référence eBay

Récupère le prix moyen marché via l'API eBay pour calculer la marge réelle.

⏱️
scheduler/jobs.py
orchestration APScheduler

Orchestre automatiquement l'enchaînement des agents avec fréquence configurable.

03 — Scrapers

Scrapers multi-sources

Architecture généralisée : chaque plateforme implémente une stratégie indépendante (pattern Strategy), paramétrable par marque et volume.

Pipeline sans authentification : uniquement des pages et annonces publiques accessibles sans login. Aucun contournement de mesures de protection.

04 — Scoring

Scoring métier (0 – 100)

Score calculé par algorithme custom, sans LLM. Chaque critère contribue à un total de 0 à 100.

CritèrePoidsBarème
Marge40 ptsÉcart prix annoncé / prix marché eBay
État20 ptsNeuf (20), TBE (15), BE (8), Correct (0)
Marque10 ptsUltra-premium (10), Premium (6), Autre (0)
Liquidité20 ptsTaille standard = liquide = score max
Photos10 pts6+ photos (10), 1+ (5), aucune (0)

Barème visuel

Marge
40 pts
Liquidité
20 pts
État
20 pts
Photos
10 pts
Marque
10 pts

Seuils d'action

05 — Authenticité

Agent authenticité — anti-contrefaçon

Un agent spécialisé évalue le risque de contrefaçon avant toute alerte. Une annonce avec un score d'authenticité en dessous du seuil est exclue des alertes Telegram même si son score d'opportunité est excellent.

Signaux analysés

Score authenticitéStatutAction
80 – 100✅ Probablement authentiqueAlerte normale si score opp. OK
50 – 79⚠️ Vérifier avant achatAlerte avec flag ⚠️
20 – 49🚨 Suspect — risque élevéBloqué de l'alerte Telegram
0 – 19🚫 Probablement contrefaitBloqué + flag rouge dashboard
06 — Négociation LLM

Agent négociation — Mistral mistral-small

Après identification d'une opportunité, l'agent LLM génère un message de négociation personnalisé, prêt à envoyer au vendeur.

Logique de prix proposé

Comportement du LLM

⚠️

Négociation assistée uniquement : le message est généré, pas envoyé automatiquement. La décision reste humaine.

07 — Alertes

Alertes Telegram

Chaque deal qualifié déclenche une alerte structurée. Condition : score ≥ seuil_telegram ET score_authenticite ≥ seuil_auth.

Champ de l'alerteExemple
Marque + titreNike Air Force 1 — Taille 42
Prix annoncé / Prix marché45 € / 90 €
ÉtatTrès Bon État
Score opportunité82 / 100
Score authenticité88 / 100
Lien annonce→ vinted.fr/items/...

Résultat mesuré : ~7 alertes Telegram par cycle de 15 min sur le périmètre configuré.

08 — Dashboard

Dashboard Streamlit

Interface locale pour visualiser et analyser les annonces collectées.

ℹ️

Le dashboard Streamlit est local — pas encore déployé publiquement. Accès : streamlit run dashboard/app.pyhttp://localhost:8501.

09 — Base de données

Base de données — SQLite via SQLAlchemy

Chaque annonce est stockée une seule fois (déduplication par plateforme + identifiant externe). Les scores et flags sont persistés. Architecture légère adaptée à un usage local.

10 — Valeur technique

Ce que ce projet démontre

11 — Posture éthique

Limites & posture éthique

Posture : Resell Radar opère uniquement sur des annonces publiques accessibles sans authentification. Collecte contrôlée : volumes limités, intervalles configurés, aucun contournement de mesures de protection. Objectif : veille et aide à la décision — pas automatisation de l'achat ou de l'envoi de messages.

Limites actuelles