Resto·Ka — resto-ka.com
Agrégateur exhaustif de tous les restaurants du Québec, avec leurs menus complets et leurs prix. Chaque resto, chaque plat, chaque prix — dans les 17 régions, au même endroit, comparable et cherchable — par resto ou par plat.
Plateforme de la famille ·Ka (Lou·Ka, Immo·Ka, Auto·Ka, Food·Ka, Fabri·Ka,
Sorti·Ka). Architecture des connecteurs calquée sur Lou·Ka, identité
visuelle « éditorial sharp » du Groupe KA (Space Grotesk / Inter /
JetBrains Mono, papier-encre-lime, bordures encre + ombres décalées).
CLAUDE.md est la source de vérité du projet.
L'app
| Accueil — recherche de restos | Recherche par plat |
|---|---|
![]() |
![]() |
| Fiche resto — menu, photos, options & prix | Couverture en direct |
|---|---|
![]() |
![]() |
Ce qui rend Resto·Ka différent
- Prix réels : captés sur la plateforme de commande des restos eux-mêmes (Palier 1), pas sur les apps de livraison (+25-30 %).
- 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émarrage
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 sur :8115
.venv/bin/python run.py watch 168 # boucle hebdomadaire
.venv/bin/python -m pytest tests/ # 45 tests (fixtures réelles hors ligne)Architecture (patron Lou·Ka)
restoka/
├── connectors/ # un module par source/plateforme, auto-enregistrés
│ ├── base.py # requests direct / Firecrawl / Scrapfly + cache détail
│ └── ueat.py # UEAT (templatisé) — API GraphQL, prix TAKEOUT réels
├── schema.py # Restaurant + menu imbriqué (sections→items→options) + finalize()
├── normalize.py # prix, cuisines, type d'établissement, diètes, $-$$$$
├── regions.py # ville → 17 régions (+ repli postal, + repli lat/lng)
├── db.py # SQLite : restos, menus PAR CONTEXTE, historique de prix
├── ingest.py # pipeline sync → geocode → dedup (délai de grâce, alertes)
├── dedup.py # identité resto inter-sources (succursales jamais fusionnées)
├── geocode.py # Nominatim + Adresses Québec, cache persistant
└── web.py # FastAPI + frontend React (frontend/dist)
frontend/ # Vite + React 18 + TS — design éditorial sharp Groupe KASources connectées
Registre : data/sources.json (à consulter AVANT d'ajouter quoi que ce soit).
| Source | Palier | Contexte de prix | Couverture |
|---|---|---|---|
| OpenStreetMap (découverte, API Overpass) | 4 | — (fiches sans menu) | 13 500+ établissements : tous les restos, fast-foods, cafés, bars, crèmeries et boulangeries nommés du Québec — 17/17 régions. Données © contributeurs OSM (ODbL). |
| UEAT (commande en ligne, API GraphQL anonyme) | 1 | takeout (prix réels) |
29 intégrations : Sushi Shop (141), Poulet Rouge (82), Valentine (76), Normandin (44), Chocolats Favoris (41), Allô mon Coco (34), Thaïzone (26), Scores (25), Chez Ashton (23), Pacini (20), Boustan (65), Ben & Florentine (54), Pizzéria NO.900 (32), Sushi Taxi (30), Tutti Frutti, Mandy's, Cochon Dingue, Panda Boba-T, Salvatoré, Ryu Sushi, Impérial, La Belle Province, Madisons, Pizza Mia, Station W, Freddy, Le Super Qualité, Château Frontenac |
| St-Hubert | 6 | takeout (visé) |
à faire — anti-bot Akamai, voir data/sources.json |
Déploiement
Node M3U96b (MacLustr), ~/apps/resto-ka, PM2 : resto-ka (:8115) +
resto-ka-ngrok (→ https://www.resto-ka.com) + resto-ka-sync (hebdo).
Registre cross-session : ~/Desktop/cluster-skill/cluster-deployments.json.
Resto·Ka — plateforme du Groupe KA. Auteur : Simon-Pierre Boucher <contact@spboucher.ai>.



