docs: README à jour avec screenshot
2 changed files +58 −53
modified
README.md
+58 −53
@@ -4,34 +4,38 @@ | ||
| 4 | 4 | Desc: Resto·Ka — agrégateur des restaurants du Québec (menus & prix). |
| 5 | 5 | --> |
| 6 | 6 | |
| 7 | −# Resto·Ka — [resto-ka.com](https://www.resto-ka.com) | |
| 7 | +# Resto·Ka | |
| 8 | 8 | |
| 9 | − | |
| 9 | +**Tous les restaurants du Québec — menus complets et prix réels, dans les 17 régions.** | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 10 | 14 |  |
| 11 | 15 |  |
| 12 | 16 |  |
| 13 | 17 |  |
| 14 | 18 | |
| 15 | − | |
| 16 | − | |
| 17 | − | |
| 18 | − | |
| 19 | − | |
| 20 | − | |
| 21 | − | |
| 19 | +## Description | |
| 20 | + | |
| 21 | +**Resto·Ka** ([**www.resto-ka.com**](https://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**. | |
| 22 | + | |
| 23 | +- **14 091 restaurants** référencés (découverte **OpenStreetMap**, 17/17 régions) | |
| 24 | +- **79 159 plats avec prix** — 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, +25-30 %) | |
| 25 | +- **738 restos avec menu complet**, **24 chaînes suivies** | |
| 26 | +- **98 %** des items avec photo, **69 %** avec options, **99 %** géolocalisés | |
| 22 | 27 | |
| 23 | −> **Agrégateur exhaustif de tous les restaurants du Québec, avec leurs menus | |
| 24 | −> complets et leurs prix.** Chaque resto, chaque plat, chaque prix — dans les | |
| 25 | −> 17 régions, au même endroit, comparable et cherchable — **par resto ou par | |
| 26 | −> plat**. | |
| 28 | +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.** | |
| 27 | 29 | |
| 28 | −Plateforme de la famille **·Ka** (Lou·Ka, Immo·Ka, Auto·Ka, Food·Ka, Fabri·Ka, | |
| 29 | −Sorti·Ka). Architecture des connecteurs **calquée sur Lou·Ka**, identité | |
| 30 | −visuelle **« éditorial sharp » du Groupe KA** (Space Grotesk / Inter / | |
| 31 | −JetBrains Mono, papier-encre-lime, bordures encre + ombres décalées). | |
| 32 | −`CLAUDE.md` est la source de vérité du projet. | |
| 30 | +## Fonctionnalités | |
| 33 | 31 | |
| 34 | −## L'app | |
| 32 | +- **Prix réels et contextualisés** : un prix n'est **JAMAIS** présenté sans son contexte (**`dine-in` / `takeout` / `delivery`**) — un menu sans `price_context`/`price_source` est **rejeté à l'ingestion**, et un menu salle n'est jamais écrasé par un menu livraison. | |
| 33 | +- **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). | |
| 34 | +- **Options & formats capturés** avec leurs suppléments (« Mini **+3,70 $** ») — ils changent le prix réel. | |
| 35 | +- **Historique des prix par item** (`item_price_log`) à chaque changement. | |
| 36 | +- **Alerte de dérive** : chute anormale du volume d'une source ou du nombre d'items d'un menu → retraits suspendus / ancien menu conservé. | |
| 37 | +- **Déduplication inter-sources** (les succursales ne sont jamais fusionnées) et **géocodage à 99 %** (Nominatim + Adresses Québec, cache persistant). | |
| 38 | +- **Connexion KA ID** (SSO Groupe Ka), favoris, tableau de bord **Stats** + rapport **PDF**, widget **KA Agent** (chat IA). | |
| 35 | 39 | |
| 36 | 40 | | Accueil — recherche de restos | Recherche par plat | |
| 37 | 41 | |---|---| |
@@ -41,34 +45,14 @@ JetBrains Mono, papier-encre-lime, bordures encre + ombres décalées). | ||
| 41 | 45 | |---|---| |
| 42 | 46 | |  |  | |
| 43 | 47 | |
| 44 | −## Ce qui rend Resto·Ka différent | |
| 45 | − | |
| 46 | −- **Prix réels** : captés sur la plateforme de commande des restos eux-mêmes | |
| 47 | − (Palier 1), pas sur les apps de livraison (+25-30 %). | |
| 48 | −- **Un prix n'est JAMAIS présenté sans son contexte** (`dine-in` / `takeout` / | |
| 49 | − `delivery`) — un menu sans `price_context`/`price_source` est rejeté à | |
| 50 | − l'ingestion, et un menu salle n'est jamais écrasé par un menu livraison. | |
| 51 | −- **Recherche par plat** dans les 79 159 items (groupée par marque pour ne pas | |
| 52 | − répéter 76 fois la même poutine de chaîne). | |
| 53 | −- **Options & formats capturés** avec leurs suppléments (« Mini +3,70 $ ») — | |
| 54 | − ils changent le prix réel. | |
| 55 | −- **Historique des prix par item** (`item_price_log`) à chaque changement. | |
| 56 | −- **Alerte de dérive** : chute anormale du volume d'une source ou du nombre | |
| 57 | − d'items d'un menu → retraits suspendus / ancien menu conservé. | |
| 58 | − | |
| 59 | −## Démarrage | |
| 48 | +## Stack technique | |
| 60 | 49 | |
| 61 | −```bash | |
| 62 | −python3 -m venv .venv && .venv/bin/pip install -r requirements.txt | |
| 63 | −cd frontend && npm install && npm run build && cd .. | |
| 64 | − | |
| 65 | −.venv/bin/python run.py sync # synchronise (+ géocode + dédup) | |
| 66 | −.venv/bin/python run.py serve 8115 # API + frontend sur :8115 | |
| 67 | −.venv/bin/python run.py watch 168 # boucle hebdomadaire | |
| 68 | −.venv/bin/python -m pytest tests/ # 45 tests (fixtures réelles hors ligne) | |
| 69 | −``` | |
| 50 | +- **Backend** : **Python 3.14** · **FastAPI** · **Uvicorn** · **SQLite** (menus par contexte + historique de prix) | |
| 51 | +- **Frontend** : **React 18** · **Vite** · **TypeScript** — design éditorial sharp Groupe KA | |
| 52 | +- **Scraping/ingestion** : requests direct / **Firecrawl** / **Scrapfly**, API **Overpass** (OSM), API **GraphQL UEAT** | |
| 53 | +- **Tests** : **45 tests pytest** (fixtures réelles hors ligne) | |
| 70 | 54 | |
| 71 | −## Architecture (patron Lou·Ka) | |
| 55 | +## Structure (patron Lou·Ka) | |
| 72 | 56 | |
| 73 | 57 | ``` |
| 74 | 58 | restoka/ |
@@ -82,27 +66,48 @@ restoka/ | ||
| 82 | 66 | ├── ingest.py # pipeline sync → geocode → dedup (délai de grâce, alertes) |
| 83 | 67 | ├── dedup.py # identité resto inter-sources (succursales jamais fusionnées) |
| 84 | 68 | ├── geocode.py # Nominatim + Adresses Québec, cache persistant |
| 69 | +├── auth.py # connexion KA ID (SSO Groupe Ka) | |
| 85 | 70 | └── web.py # FastAPI + frontend React (frontend/dist) |
| 86 | 71 | frontend/ # Vite + React 18 + TS — design éditorial sharp Groupe KA |
| 87 | 72 | ``` |
| 88 | 73 | |
| 89 | 74 | ## Sources connectées |
| 90 | 75 | |
| 91 | −Registre : `data/sources.json` (à consulter AVANT d'ajouter quoi que ce soit). | |
| 76 | +Registre : **`data/sources.json`** (à consulter **AVANT** d'ajouter quoi que ce soit). | |
| 92 | 77 | |
| 93 | 78 | | Source | Palier | Contexte de prix | Couverture | |
| 94 | 79 | |--------|--------|------------------|------------| |
| 95 | −| **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). | | |
| 96 | −| **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 | | |
| 80 | +| **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). | | |
| 81 | +| **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 | | |
| 97 | 82 | | St-Hubert | 6 | `takeout` (visé) | à faire — anti-bot Akamai, voir `data/sources.json` | |
| 98 | 83 | |
| 84 | +## Démarrage local | |
| 85 | + | |
| 86 | +```bash | |
| 87 | +python3 -m venv .venv && .venv/bin/pip install -r requirements.txt | |
| 88 | +cd frontend && npm install && npm run build && cd .. | |
| 89 | + | |
| 90 | +.venv/bin/python run.py sync # synchronise (+ géocode + dédup) | |
| 91 | +.venv/bin/python run.py serve 8115 # API + frontend sur :8115 | |
| 92 | +.venv/bin/python run.py watch 168 # boucle hebdomadaire | |
| 93 | +.venv/bin/python -m pytest tests/ # 45 tests (fixtures réelles hors ligne) | |
| 94 | +``` | |
| 95 | + | |
| 99 | 96 | ## Déploiement |
| 100 | 97 | |
| 101 | −Node **M3U96b** (MacLustr), `~/apps/resto-ka`, PM2 : `resto-ka` (:8115) + | |
| 102 | −`resto-ka-ngrok` (→ https://www.resto-ka.com) + `resto-ka-sync` (hebdo). | |
| 103 | −Registre cross-session : `~/Desktop/cluster-skill/cluster-deployments.json`. | |
| 98 | +- **Nœud** : **M3U96b** (cluster MacLustr), répertoire **`~/apps/resto-ka`** | |
| 99 | +- **Port** : **8115** | |
| 100 | +- **Domaine** : **[www.resto-ka.com](https://www.resto-ka.com)** (tunnel **ngrok**) | |
| 101 | +- **PM2** (3 process) : **`resto-ka`** (serveur :8115) + **`resto-ka-sync`** (synchro hebdomadaire) + **`resto-ka-ngrok`** (tunnel → www.resto-ka.com) | |
| 102 | +- Registre cross-session : `~/Desktop/cluster-skill/cluster-deployments.json` | |
| 103 | + | |
| 104 | +## Développement remote-first | |
| 105 | + | |
| 106 | +**La source de vérité est le repo git sur le nœud M3U96b** (`~/apps/resto-ka`), **PAS** les copies laptop. Toute modification se fait **sur le nœud via SSH** : édition, build, `pm2 restart resto-ka`, puis `git add/commit/push origin main` **sur le nœud** (agent forwarding actif). | |
| 107 | + | |
| 108 | +- Remote **`origin`** = **spbgit** (git perso **git.spboucher.ai** — bare repo `~/srv/git/resto-ka.git` sur M3U96a, alias SSH `gitsrv`). **PAS GitHub.** | |
| 109 | +- Référence complète : `~/Desktop/cluster-skill/KA-REMOTE-DEV.md`. | |
| 104 | 110 | |
| 105 | 111 | --- |
| 106 | 112 | |
| 107 | −*Resto·Ka — plateforme du [Groupe KA](https://www.groupe-ka.com). Auteur : | |
| 108 | −Simon-Pierre Boucher \<contact@spboucher.ai\>.* | |
| 113 | +Un service **[Groupe Ka](https://www.groupe-ka.com)** — Auteur : Simon-Pierre Boucher \<contact@spboucher.ai\>. | |
added
docs/screenshot.png
+0 −0
Binary file not shown.