Resto·Ka
Tous les restaurants du Québec — menus complets et prix réels, comparables et cherchables dans les 17 régions.
Resto·Ka (www.resto-ka.com) est l'agrégateur exhaustif des restaurants du Québec : chaque resto, chaque plat, chaque prix — dans les 17 régions administratives, au même endroit, comparable et cherchable par resto ou par plat. Les prix sont des prix takeout réels, non majorés, captés sur la plateforme de commande des restos eux-mêmes (pas sur les apps de livraison, majorées de 25-30 %).
En chiffres (base de production) : 14 091 restaurants référencés (découverte OpenStreetMap, 17/17 régions), 79 159 plats avec prix, 738 restos avec menu complet, 24 chaînes suivies, 98 % des items avec photo, 99 % géolocalisés. Pour qui ? Quiconque veut répondre à « qu'est-ce que je mange, où, et combien ça coûte ? » sans ouvrir quinze applis — là où les apps de livraison majorent et où les annuaires (Google, Yelp) n'ont ni menus structurés ni prix comparables.
Captures d'écran
Fonctionnalités
- Prix réels et contextualisés — un prix n'est jamais présenté sans son contexte (
dine-in/takeout/delivery) ; un menu sansprice_context/price_sourceest rejeté à l'ingestion, et un menu salle n'est jamais écrasé par un menu livraison. - Recherche par plat dans les 79 159 items, groupée par marque (pour ne pas répéter 76 fois la même poutine de chaîne).
- Options & formats capturés avec leurs suppléments (« Mini +3,70 $ ») — ils changent le prix réel.
- Historique des prix par item (
item_price_log) à chaque changement. - Alerte de dérive — chute anormale du volume d'une source ou du nombre d'items d'un menu → retraits suspendus / ancien menu conservé.
- Déduplication inter-sources (les succursales ne sont jamais fusionnées) et géocodage à 99 % (Nominatim + Adresses Québec, cache persistant).
- Découverte OpenStreetMap (API Overpass) : 13 500+ établissements nommés — restos, fast-foods, cafés, bars, crèmeries, boulangeries — dans les 17 régions ; connecteur UEAT templatisé (API GraphQL) pour les menus takeout réels de 29 intégrations de chaînes (Sushi Shop, Valentine, Normandin, Thaïzone, Chez Ashton…).
- Connexion KA ID (SSO Groupe KA), favoris unifiés « Mon univers Ka », tableau de bord
/stats+ rapports PDF (catalogue + ReportBuilder), widget KA Agent (chat IA). - Registre des sources —
data/sources.json, à consulter avant tout ajout (statut et raison des sources non connectables).
Architecture
Pipeline (patron Lou·Ka) : connecteurs → normalisation → déduplication → SQLite → API/frontend.
- Backend Python 3.14 / FastAPI / Uvicorn (
restoka/web.py) : API + service du build Vite. - SQLite (
restoka/db.py) : restos, menus par contexte de prix, historique de prix. - Connecteurs auto-enregistrés (
restoka/connectors/) : requests direct / Firecrawl / Scrapfly + cache détail (base.py), UEAT templatisé (ueat.py), découverte Overpass/OSM. - Ingestion (
restoka/ingest.py) : sync → geocode → dedup, délai de grâce et alertes de dérive ; enrichissements inspections/permis/heures. - Frontend React 18 + Vite + TypeScript (
frontend/), design « éditorial sharp » Groupe KA. - 45 tests pytest avec fixtures réelles hors ligne.
Processus PM2 sur le nœud :
| Processus | Rôle |
|---|---|
resto-ka |
serveur FastAPI (API + frontend) sur le port 8115 |
resto-ka-sync |
boucle de synchronisation hebdomadaire (run.py watch) |
resto-ka-ngrok |
tunnel ngrok vers www.resto-ka.com |
Structure du repo
resto-ka/
├── run.py # point d'entrée CLI (sync / watch / serve)
├── restoka/ # cœur Python : web, db, ingest, dedup, geocode, regions, schema, normalize, auth, stats… + connectors/
├── frontend/ # React 18 + Vite + TypeScript — design éditorial sharp Groupe KA
├── data/ # sources.json (registre) + base SQLite de prod (gitignorée)
├── scripts/ # scripts d'appoint (captures, déploiement)
├── tests/ # 45 tests pytest (fixtures réelles hors ligne)
└── docs/ # captures d'écran + docs connecteursDéveloppement (remote-first)
La source de vérité est le repo git sur le nœud M3U96b (~/apps/resto-ka) — on n'édite jamais les copies laptop. Toute modification se fait sur le nœud via SSH : édition, build, pm2 restart, puis commit/push depuis le nœud.
- Remote
origin= spbgit (git perso git.spboucher.ai, bare repos sur M3U96a). Pas GitHub. - L'agent forwarding SSH est actif : le
git push origin mainfonctionne pendant une session SSH depuis le laptop. CLAUDE.mdest la source de vérité du projet (règles d'ingestion, en-têtes d'auteur obligatoires).
python3 -m venv .venv && .venv/bin/pip install -r requirements.txt
cd frontend && npm install && npm run build && cd ..
.venv/bin/python run.py sync # synchronise (+ géocode + dédup)
.venv/bin/python run.py serve 8115 # API + frontend
.venv/bin/python run.py watch 168 # boucle hebdomadaire (heures)
.venv/bin/python -m pytest tests/ # 45 tests
pm2 restart resto-ka # après un changement en productionDéploiement
- Nœud : M3U96b (Mac Studio, cluster MacLustr) — répertoire
~/apps/resto-ka - Port : 8115 (local, exposé uniquement via le tunnel)
- Processus PM2 :
resto-ka(serveur) +resto-ka-sync(synchro) +resto-ka-ngrok(tunnel) - Domaine : https://www.resto-ka.com (tunnel ngrok)
Écosystème Groupe KA
- groupe-ka.com — portail du groupe et compte unique KA ID
- lou-ka.com — logements à louer
- immo-ka.com — propriétés à vendre
- vrai-prix.com — estimation immobilière
- auto-ka.com — véhicules
- fabri-ka.com — produits québécois
- food-ka.com — épicerie et alimentation
- resto-ka.com — restaurants (ce repo)
- sorti-ka.com — sorties et événements
- job-ka.com — emplois
- crea-ka.com — créateurs de contenu
- trouve-ka.com — petites annonces
- api-ka.com — API de données
© Groupe KA — Simon-Pierre Boucher · contact@spboucher.ai Ce repo vit sur spbgit (git.spboucher.ai).