docs: README ultra détaillé + visite guidée en 10 captures
11 changed files +54 −51
modified
README.md
+54 −51
@@ -47,44 +47,37 @@ | ||
| 47 | 47 | |
| 48 | 48 | **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**. 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 %). |
| 49 | 49 | |
| 50 | −**En chiffres** (live `/api/stats`, au 2026-08-24) : **14 716 restaurants actifs** (hors doublons, découverte OpenStreetMap, 17/17 régions), **149 569 plats avec prix**, **1 682 menus capturés** (1 268 takeout · 386 salle · 31 livraison), **180 chaînes identifiées** dont **116 intégrations UEAT découvertes**, 2 994 inspections MAPAQ importées, 1 859 restos avec permis d'alcool (RACJ), 155 312 entrées d'historique de prix, 80 % des items avec photo, 100 % des restos 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. | |
| 50 | +**En chiffres** (live `/api/stats`, au 2026-08-28) : **21 217 restaurants actifs** (hors doublons, découverte OpenStreetMap + registre alimentaire de Montréal, 17/17 régions), **163 677 plats avec prix**, **1 874 menus capturés** (1 324 takeout · 496 salle · 57 livraison), **188 chaînes identifiées** dont **116+ intégrations UEAT découvertes**, **3 001 inspections MAPAQ** importées (661 croisées sur 443 restos), **3 001 restos avec permis d'alcool** (RACJ), 220 restos notés Yelp, **17 sources au registre**, 100 % des restos 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. | |
| 51 | 51 | |
| 52 | 52 | ## Visite guidée |
| 53 | 53 | |
| 54 | −*Captures du 2026-08-25 — front-end v2 « éditorial premium » (mobile 390×844 · desktop 1440×900).* | |
| 55 | − | |
| 56 | −### Mobile | |
| 54 | +*Captures live du 2026-08-28 sur [www.resto-ka.com](https://www.resto-ka.com) — desktop 1440×900, mobile 390×844.* | |
| 57 | 55 | |
| 58 | 56 | <table> |
| 59 | 57 | <tr> |
| 60 | − <td align="center"><img src="docs/screenshots/mobile/home.webp" width="240" alt="Accueil mobile"><br><sub><b>Accueil — recherche resto ou plat, KA Tabbar</b></sub></td> | |
| 61 | − <td align="center"><img src="docs/screenshots/mobile/resultats.webp" width="240" alt="Résultats mobile"><br><sub><b>Restos de Montréal</b></sub></td> | |
| 62 | − <td align="center"><img src="docs/screenshots/mobile/resto.webp" width="240" alt="Fiche resto mobile"><br><sub><b>Fiche restaurant — menu complet, prix réels</b></sub></td> | |
| 58 | + <td align="center" width="50%"><a href="https://www.resto-ka.com/"><img src="docs/screenshots/01-accueil.jpg" alt="Accueil"></a><br><sub><b>Accueil</b> — héros typographique « Chaque resto, chaque plat, chaque prix », recherche par resto ou par plat, bande « signes vitaux » live (restos, plats, menus, régions) sur fond encre.</sub></td> | |
| 59 | + <td align="center" width="50%"><a href="https://www.resto-ka.com/villes"><img src="docs/screenshots/02-villes.jpg" alt="Répertoire des villes"></a><br><sub><b>Répertoire des villes</b> (<code>/villes</code>) — les villes du Québec classées par région administrative, avec le compte de restos ; pages SEO indexables.</sub></td> | |
| 63 | 60 | </tr> |
| 64 | 61 | <tr> |
| 65 | − <td align="center"><img src="docs/screenshots/mobile/stats.webp" width="240" alt="Stats mobile"><br><sub><b>Statistiques</b></sub></td> | |
| 66 | − <td align="center"><img src="docs/screenshots/mobile/villes.webp" width="240" alt="Villes mobile"><br><sub><b>Répertoire des villes</b></sub></td> | |
| 67 | − <td align="center"><img src="docs/screenshots/mobile/menu-mobile.webp" width="240" alt="Menu mobile"><br><sub><b>Nav v2 — panneau plein écran</b></sub></td> | |
| 62 | + <td align="center"><a href="https://www.resto-ka.com/stats"><img src="docs/screenshots/03-stats.jpg" alt="Statistiques"></a><br><sub><b>Statistiques</b> (<code>/stats</code>) — tableau de bord complet : volumes par région, contextes de prix, chaînes, inspections, sources ; rapports PDF (catalogue + ReportBuilder personnalisé).</sub></td> | |
| 63 | + <td align="center"><a href="https://www.resto-ka.com/sources"><img src="docs/screenshots/04-sources.jpg" alt="Sources de données"></a><br><sub><b>Sources</b> (<code>/sources</code>) — le registre public des 17 sources de données : rôle, statut, cadence et dernières synchronisations, en toute transparence.</sub></td> | |
| 68 | 64 | </tr> |
| 69 | −</table> | |
| 70 | − | |
| 71 | −### Desktop | |
| 72 | − | |
| 73 | −<table> | |
| 74 | 65 | <tr> |
| 75 | − <td align="center"><img src="docs/screenshots/desktop/home.webp" width="420" alt="Accueil desktop"><br><sub><b>Accueil — bande « signes vitaux » encre, héros typographique</b></sub></td> | |
| 76 | − <td align="center"><img src="docs/screenshots/desktop/resultats.webp" width="420" alt="Résultats desktop"><br><sub><b>Résultats — cartes à filets d'encre, ombre safran au survol</b></sub></td> | |
| 66 | + <td align="center"><a href="https://www.resto-ka.com/contact"><img src="docs/screenshots/05-contact.jpg" alt="Contact"></a><br><sub><b>Contact</b> (<code>/contact</code>) — coordonnées du Groupe KA, formulaire, et liens vers les autres plateformes de l'écosystème.</sub></td> | |
| 67 | + <td align="center"><a href="https://www.resto-ka.com/ville/montreal"><img src="docs/screenshots/06-ville-montreal.jpg" alt="Restos de Montréal"></a><br><sub><b>Page ville — Montréal</b> (<code>/ville/montreal</code>) — près de 12 000 restos montréalais, filtres par cuisine et type, cartes à filets d'encre avec ombre safran au survol.</sub></td> | |
| 77 | 68 | </tr> |
| 78 | 69 | <tr> |
| 79 | − <td align="center"><img src="docs/screenshots/desktop/resto.webp" width="420" alt="Fiche resto"><br><sub><b>Fiche restaurant — infos structurées + lien commande</b></sub></td> | |
| 80 | − <td align="center"><img src="docs/screenshots/desktop/resto-menu.webp" width="420" alt="Menu du resto"><br><sub><b>Menu structuré — plats, formats, prix contextualisés</b></sub></td> | |
| 70 | + <td align="center"><a href="https://www.resto-ka.com/resto/mtl-alim:100002"><img src="docs/screenshots/07-resto-mtl-alim-100002.jpg" alt="Fiche restaurant"></a><br><sub><b>Fiche restaurant</b> (<code>/resto/<uid></code>) — panneau héros (nom, cuisine, adresse), coordonnées et horaires structurés, menu par contexte de prix, inspections MAPAQ et permis d'alcool, carte.</sub></td> | |
| 71 | + <td align="center"><a href="https://www.resto-ka.com/favoris"><img src="docs/screenshots/08-favoris.jpg" alt="Favoris"></a><br><sub><b>Favoris</b> (<code>/favoris</code>) — « Mon univers Ka » : les restos sauvegardés avec le compte unique KA ID, partagés entre les 12 plateformes du groupe.</sub></td> | |
| 81 | 72 | </tr> |
| 82 | 73 | <tr> |
| 83 | − <td align="center"><img src="docs/screenshots/desktop/villes.webp" width="420" alt="Villes"><br><sub><b>Répertoire des villes (pages SEO)</b></sub></td> | |
| 84 | − <td align="center"><img src="docs/screenshots/desktop/stats.webp" width="420" alt="Stats"><br><sub><b>Statistiques — 21 200+ restos, 18 régions</b></sub></td> | |
| 74 | + <td align="center"><a href="https://www.resto-ka.com/doc/"><img src="docs/screenshots/09-doc.jpg" alt="Documentation"></a><br><sub><b>Documentation</b> (<code>/doc/</code>) — guide d'utilisation illustré en 4 étapes + version PDF téléchargeable.</sub></td> | |
| 75 | + <td align="center"><a href="https://www.resto-ka.com/"><img src="docs/screenshots/10-accueil-mobile.jpg" alt="Accueil mobile" width="240"></a><br><sub><b>Accueil mobile</b> (390×844) — recherche plein pouce, signes vitaux compacts et KA Tabbar (barre de navigation mobile commune Groupe KA).</sub></td> | |
| 85 | 76 | </tr> |
| 86 | 77 | </table> |
| 87 | 78 | |
| 79 | +> 🗄️ Les captures du front-end v2 du 2026-08-25 (webp) restent dans [`docs/screenshots/mobile/`](docs/screenshots/mobile/) et [`docs/screenshots/desktop/`](docs/screenshots/desktop/) ; les captures d'époque sont conservées dans [`docs/archive/`](docs/archive/). | |
| 80 | + | |
| 88 | 81 | ### Nouveautés front-end (2026-08-25) |
| 89 | 82 | |
| 90 | 83 | - **Front-end v2 « éditorial premium »** — bande signes vitaux pleine largeur (chiffres géants tabulaires sur fond encre), nav soulignée, héros typographique agrandi, cartes/plats/menus/filtres allégés (filets d'encre au lieu de boîtes), ombre safran signature au survol. |
@@ -92,22 +85,21 @@ | ||
| 92 | 85 | - **7 nouvelles sources** — mtl-alim, Tastet, ChowNow, GloriaFood, Square, DoorDash, Skip + hub de découverte multi-plateformes. |
| 93 | 86 | - **Widget ka-agent v4** — cartes de restos cliquables et choix en boutons. |
| 94 | 87 | |
| 95 | −> 🗄️ Les captures d'époque sont conservées dans [`docs/archive/`](docs/archive/). | |
| 96 | − | |
| 97 | 88 | ## Fonctionnalités |
| 98 | 89 | |
| 99 | 90 | - **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. |
| 100 | −- **Recherche par plat** dans les 149 569 items (au 2026-08-24), groupée par marque (pour ne pas répéter la même poutine de chaîne des dizaines de fois). | |
| 91 | +- **Recherche par plat** dans les 163 677 items (au 2026-08-28), groupée par marque (pour ne pas répéter la même poutine de chaîne des dizaines de fois). | |
| 101 | 92 | - **Options & formats capturés** avec leurs suppléments (« Mini +3,70 $ ») — ils changent le prix réel. |
| 102 | −- **Historique des prix par item** (`item_price_log`, 155 312 entrées au 2026-08-24) à chaque changement. | |
| 103 | −- **Alerte de dérive** — chute anormale du volume d'une source ou du nombre d'items d'un menu → retraits suspendus / ancien menu conservé. | |
| 93 | +- **Historique des prix par item** (`item_price_log`, 155 000+ entrées) à chaque changement. | |
| 94 | +- **Alerte de dérive** — chute anormale du volume d'une source ou du nombre d'items d'un menu → retraits suspendus / ancien menu conservé (visible dans les syncs récents : les runs partiels de Tastet sont signalés et les retraits suspendus). | |
| 104 | 95 | - **Déduplication inter-sources** (les succursales ne sont jamais fusionnées) et **géocodage à 100 %** (Nominatim + Adresses Québec, cache persistant). |
| 105 | −- **Découverte OpenStreetMap** (API Overpass) : 13 427 établissements nommés au dernier passage — 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 **116 intégrations de chaînes découvertes** (Sushi Shop, Valentine, Normandin, Thaïzone, Chez Ashton…). | |
| 106 | −- **Découverte des sites web** des restos OSM (connecteur `site-finder`, Serper /maps) et **extraction des photos** depuis les sites des restos (`site-resto`). | |
| 107 | −- **Enrichissements officiels** : inspections MAPAQ (2 994 importées, 288 appariées à 204 restos) et permis d'alcool RACJ (1 859 restos). | |
| 108 | −- **Avis & notes** : Yelp par scraping quotidien (177 restos notés) et croisement Uber Eats (36 restos, prix marqués `delivery`). | |
| 109 | −- **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). | |
| 110 | −- **Registre des sources** — `data/sources.json` (10 sources), à consulter avant tout ajout (statut et raison des sources non connectables). | |
| 96 | +- **Découverte OpenStreetMap** (API Overpass) : 14 008 établissements nommés au dernier passage — restos, fast-foods, cafés, bars, crèmeries, boulangeries — dans les 17 régions, complétée par le **registre alimentaire de la Ville de Montréal** (`mtl-alim`, 7 574 établissements, données ouvertes) et le média resto **Tastet** ; **connecteur UEAT templatisé** (API GraphQL) pour les menus takeout réels de **116+ intégrations de chaînes découvertes** (Sushi Shop, Valentine, Normandin, Thaïzone, Chez Ashton…). | |
| 97 | +- **Découverte des sites web** des restos (connecteur `site-finder`, Serper /maps — sites, téléphones, liens de réservation) et **extraction des menus + photos** depuis les sites des restos (`site-resto`). | |
| 98 | +- **Hub multi-plateformes de commande** : connecteurs templatisés ChowNow, GloriaFood et Square Online (menus takeout réels, activés dès qu'une intégration est découverte par `site-finder`). | |
| 99 | +- **Enrichissements officiels** : inspections MAPAQ (3 001 importées, 661 appariées à 443 restos) et permis d'alcool RACJ (3 001 restos). | |
| 100 | +- **Avis & notes** : Yelp par scraping quotidien (220 restos notés) et croisement des plateformes de livraison Uber Eats, DoorDash et Skip (prix marqués `delivery`, jamais prioritaires). | |
| 101 | +- **Connexion KA ID** (SSO Groupe KA), favoris unifiés « Mon univers Ka », recommandations personnalisées (moteur `kaid` v2, filtrage collaboratif ALS), tableau de bord `/stats` + rapports PDF (catalogue + ReportBuilder), widget **KA Agent v4** (chat IA, cartes de restos cliquables). | |
| 102 | +- **Registre des sources** — `data/sources.json` (**17 sources**), exposé publiquement sur [/sources](https://www.resto-ka.com/sources), à consulter avant tout ajout (statut et raison des sources non connectables). | |
| 111 | 103 | |
| 112 | 104 | ## Démarrage rapide |
| 113 | 105 | |
@@ -124,7 +116,7 @@ cd frontend && npm install && npm run build && cd .. | ||
| 124 | 116 | .venv/bin/python run.py serve 8115 # API + frontend sur :8115 |
| 125 | 117 | .venv/bin/python run.py watch 168 # boucle hebdomadaire (heures) |
| 126 | 118 | |
| 127 | −# Tests (80 tests pytest, fixtures réelles hors ligne) | |
| 119 | +# Tests (110 tests pytest, fixtures réelles hors ligne) | |
| 128 | 120 | .venv/bin/python -m pytest tests/ |
| 129 | 121 | ``` |
| 130 | 122 | |
@@ -138,9 +130,9 @@ Servis par `restoka/web.py` (FastAPI) sur le port 8115. | ||
| 138 | 130 | | `GET` | `/api/restaurants/{uid}` | fiche complète : menu structuré par contexte de prix, photos, coordonnées, horaires | |
| 139 | 131 | | `GET` | `/api/restaurants/{uid}/prices` | historique des prix des items du resto (`item_price_log`) | |
| 140 | 132 | | `GET` | `/api/restaurants/{uid}/inspections` | inspections/permis (enrichissements MAPAQ + RACJ) | |
| 141 | −| `GET` | `/api/dishes` | recherche par plat dans les 149 569 items, groupée par marque | | |
| 133 | +| `GET` | `/api/dishes` | recherche par plat dans les 163 677 items, groupée par marque | | |
| 142 | 134 | | `GET` | `/api/facets` | facettes de filtres (régions, villes, cuisines, types) | |
| 143 | −| `GET` | `/api/sources` | registre des sources (statuts, cadences) | | |
| 135 | +| `GET` | `/api/sources` | registre des sources (statuts, cadences) — alimente la page `/sources` | | |
| 144 | 136 | | `GET` | `/api/stats` | statistiques publiques JSON (alimente les pastilles ci-dessus) | |
| 145 | 137 | | `GET` | `/api/stats/dashboard` | données du tableau de bord `/stats` | |
| 146 | 138 | | `GET` | `/api/stats/report` | rapport PDF principal | |
@@ -151,7 +143,7 @@ Servis par `restoka/web.py` (FastAPI) sur le port 8115. | ||
| 151 | 143 | | `POST` | `/api/sync` | déclenchement d'une synchronisation | |
| 152 | 144 | | `GET` | `/healthz` | santé du service (`{"status":"ok"}`) | |
| 153 | 145 | | `GET` | `/doc/` | guide d'utilisation en ligne | |
| 154 | −| `GET` | `/{full_path}` | SPA + pages SSR légères (accueil, fiches JSON-LD, /villes) | | |
| 146 | +| `GET` | `/{full_path}` | SPA + pages SSR légères (accueil, fiches JSON-LD, /villes, /ville/:slug) | | |
| 155 | 147 | |
| 156 | 148 | ## Connecteurs |
| 157 | 149 | |
@@ -159,11 +151,18 @@ Auto-enregistrés dans `restoka/connectors/` (requests direct / Firecrawl / Scra | ||
| 159 | 151 | |
| 160 | 152 | | Connecteur | Famille | Rôle | Cadence | |
| 161 | 153 | |---|---|---|---| |
| 162 | −| `osm` | découverte | OpenStreetMap (Overpass, miroirs fiabilisés) — 13 427 établissements nommés, 17/17 régions | mensuelle | | |
| 163 | −| `ueat` | menus takeout (tier 1) | connecteur templatisé UEAT (API GraphQL) — menus takeout réels de 116 intégrations découvertes | hebdomadaire | | |
| 154 | +| `osm` | découverte | OpenStreetMap (Overpass, miroirs fiabilisés) — 14 008 établissements nommés, 17/17 régions | mensuelle | | |
| 155 | +| `mtl-alim` | découverte | registre des établissements alimentaires de la Ville de Montréal (données ouvertes) — 7 574 établissements | mensuelle | | |
| 156 | +| `tastet` | découverte / éditorial | restos recensés par le média Tastet (sélections montréalaises) | hebdomadaire | | |
| 157 | +| `sitefinder` | découverte | sites web / téléphones / liens de réservation / plateformes de commande des restos (Serper /maps) | hebdo par lots (3 000 req.), échecs re-sondés 180 j | | |
| 158 | +| `ueat` | menus takeout (tier 1) | connecteur templatisé UEAT (API GraphQL) — menus takeout réels de 116+ intégrations découvertes | hebdomadaire | | |
| 164 | 159 | | `siteresto` | menus salle | menus + photos publiés sur le site des restos indépendants | hebdo (batch incrémental), re-crawl mensuel | |
| 165 | −| `sitefinder` | découverte | sites web / plateformes de commande des restos OSM (Serper /maps) | hebdo par lots (3 000 req.), échecs re-sondés 180 j | | |
| 160 | +| `chownow` | menus takeout | connecteur templatisé ChowNow — dormant (activé dès qu'une intégration est découverte) | hebdomadaire | | |
| 161 | +| `gloriafood` | menus takeout | connecteur templatisé GloriaFood — dormant (activé dès qu'une intégration est découverte) | hebdomadaire | | |
| 162 | +| `squareonline` | menus takeout | connecteur templatisé Square Online — 1 intégration active | hebdomadaire | | |
| 166 | 163 | | `ubereats` | livraison | complément livraison (prix `delivery`, jamais prioritaires sur un menu salle) | quotidienne par petits lots (60 pages), re-vérif 30 j | |
| 164 | +| `doordash` | livraison | croisement DoorDash (menus `delivery`) | quotidienne par petits lots | | |
| 165 | +| `skip` | livraison | croisement SkipTheDishes (menus `delivery`) | quotidienne par petits lots | | |
| 167 | 166 | | `yelp` | annuaire | enrichissement via l'API Yelp Fusion (clé requise — SkipSource sans `YELP_API_KEY`) | hebdo, re-vérification 30 j | |
| 168 | 167 | | `yelp_scrape` | annuaire | notes, nombre d'avis, gamme de prix, catégories, fermetures via yelp.ca | quotidienne par petits lots (80 pages), re-vérif 30 j | |
| 169 | 168 | |
@@ -171,11 +170,11 @@ S'y ajoutent deux **enrichissements officiels** exécutés par `ingest.enrich` ( | ||
| 171 | 170 | |
| 172 | 171 | ## Données & conformité |
| 173 | 172 | |
| 174 | −- **Registre des sources** : `data/sources.json` — **10 sources** au 2026-08-24 (8 actives, 1 « clé requise » : yelp, 1 « à faire » : sthubert). À consulter **avant** tout ajout de source (CLAUDE.md §0.4) : chaque entrée documente l'accès légal, l'extraction et la cadence. | |
| 175 | −- **Prix de première partie** : les menus takeout viennent de la plateforme de commande des restos eux-mêmes (UEAT — la même API GraphQL que le widget officiel, auth anonyme publique) ou de leur propre site — **prix réels non majorés**. Les menus salle (`site-resto`) et takeout passent toujours avant les plateformes de livraison. | |
| 176 | −- **Scraping poli** : throttling (0,35 s sur UEAT), User-Agent identifiable `RestoKaBot`, budgets par passage (Yelp 450 req/j, site-finder 3 000 req, Uber Eats 60 pages/j). | |
| 177 | −- **Données publiques officielles** : inspections MAPAQ et permis d'alcool RACJ (jeux de données gouvernementaux). | |
| 178 | −- **Cadence de resync** : boucle `run.py watch 168` (cycle hebdomadaire) ; les sources quotidiennes (yelp-scrape, ubereats) avancent par petits lots à chaque passage ; alertes de dérive + délai de grâce avant tout retrait. | |
| 173 | +- **Registre des sources** : `data/sources.json` — **17 sources** au 2026-08-28 (**12 actives**, 3 dormantes en attente d'intégrations découvertes : chownow, gloriafood, square, 1 « clé requise » : yelp, 1 « à faire » : sthubert). À consulter **avant** tout ajout de source (CLAUDE.md §0.4) : chaque entrée documente l'accès légal, l'extraction et la cadence. Version publique : [/sources](https://www.resto-ka.com/sources). | |
| 174 | +- **Prix de première partie** : les menus takeout viennent de la plateforme de commande des restos eux-mêmes (UEAT — la même API GraphQL que le widget officiel, auth anonyme publique ; ChowNow/GloriaFood/Square Online templatisés) ou de leur propre site — **prix réels non majorés**. Les menus salle (`site-resto`) et takeout passent toujours avant les plateformes de livraison. | |
| 175 | +- **Scraping poli** : throttling (0,35 s sur UEAT), User-Agent identifiable `RestoKaBot`, budgets par passage (Yelp 450 req/j, site-finder 3 000 req, Uber Eats 60 pages/j, DoorDash/Skip par petits lots). | |
| 176 | +- **Données publiques officielles** : inspections MAPAQ, permis d'alcool RACJ et registre alimentaire de la Ville de Montréal (jeux de données gouvernementaux/municipaux ouverts). | |
| 177 | +- **Cadence de resync** : boucle `run.py watch 168` (cycle hebdomadaire) ; les sources quotidiennes (yelp-scrape, ubereats, doordash, skip) avancent par petits lots à chaque passage ; alertes de dérive + délai de grâce avant tout retrait. | |
| 179 | 178 | - La base SQLite de prod (`data/restoka.db`) est **gitignorée** ; aucun secret dans le repo (`.env` local, gabarit `.env.example`). |
| 180 | 179 | |
| 181 | 180 | ## Architecture |
@@ -184,11 +183,11 @@ Pipeline (patron Lou·Ka) : **connecteurs → normalisation → déduplication | ||
| 184 | 183 | |
| 185 | 184 | - **Backend Python 3.14 / FastAPI / Uvicorn** (`restoka/web.py`) : API + service du build Vite + SSR léger SEO (JSON-LD Restaurant, sitemaps chunkés, pages /villes). |
| 186 | 185 | - **SQLite** (`restoka/db.py`) : restos, **menus par contexte de prix**, historique de prix (`item_price_log`), inspections, favoris, caches détail/géocodage. |
| 187 | −- **Connecteurs auto-enregistrés** (`restoka/connectors/`) : requests direct / Firecrawl / Scrapfly + cache détail (`base.py`), UEAT templatisé (`ueat.py`), découverte Overpass/OSM. | |
| 186 | +- **Connecteurs auto-enregistrés** (`restoka/connectors/`) : requests direct / Firecrawl / Scrapfly + cache détail (`base.py`), UEAT templatisé (`ueat.py`), hub multi-plateformes (chownow/gloriafood/squareonline), découverte Overpass/OSM + mtl-alim + Tastet. | |
| 188 | 187 | - **Ingestion** (`restoka/ingest.py`) : sync → geocode → dedup, délai de grâce et alertes de dérive ; enrichissements inspections/permis/heures. |
| 189 | 188 | - **Structuration LLM** (`restoka/menullm.py`) : menus maison structurés par Claude (API Anthropic). |
| 190 | −- **Frontend React 18 + Vite + TypeScript** (`frontend/`), design « éditorial sharp » Groupe KA. | |
| 191 | −- **80 tests pytest** avec fixtures réelles hors ligne (connecteurs, normalisation, schéma, horaires, permis…). | |
| 189 | +- **Frontend React 18 + Vite + TypeScript** (`frontend/`), design « éditorial premium » Groupe KA (v2 2026-08-25). | |
| 190 | +- **110 tests pytest** avec fixtures réelles hors ligne (connecteurs, normalisation, schéma, horaires, permis…). | |
| 192 | 191 | |
| 193 | 192 | Processus PM2 sur le nœud (commandes de start réelles) : |
| 194 | 193 | |
@@ -221,17 +220,18 @@ Gabarit : `.env.example` (copier vers `.env`, jamais commité). **Noms seulement | ||
| 221 | 220 | resto-ka/ |
| 222 | 221 | ├── run.py # point d'entrée CLI (sync / watch / serve) |
| 223 | 222 | ├── restoka/ # cœur Python : web, db, ingest, dedup, geocode, regions, schema, normalize, auth, stats, menullm… + connectors/ |
| 224 | −├── frontend/ # React 18 + Vite + TypeScript — design éditorial sharp Groupe KA + public/doc/ (guide) | |
| 225 | −├── data/ # sources.json (registre), ueat-discovered.json (116 intégrations), base SQLite de prod (gitignorée) | |
| 223 | +├── frontend/ # React 18 + Vite + TypeScript — design éditorial premium Groupe KA + public/doc/ (guide) | |
| 224 | +├── data/ # sources.json (registre), ueat-discovered.json (intégrations), base SQLite de prod (gitignorée) | |
| 226 | 225 | ├── scripts/ # scripts d'appoint (captures, déploiement) |
| 227 | −├── tests/ # 80 tests pytest (fixtures réelles hors ligne) | |
| 228 | −└── docs/ # captures d'écran + docs connecteurs | |
| 226 | +├── tests/ # 110 tests pytest (fixtures réelles hors ligne) | |
| 227 | +└── docs/ # screenshots/ (visite guidée + v2 webp), archive/, connecteurs/ (docs par source) | |
| 229 | 228 | ``` |
| 230 | 229 | |
| 231 | 230 | ## Documentation |
| 232 | 231 | |
| 233 | 232 | - **Guide en ligne** : [www.resto-ka.com/doc/](https://www.resto-ka.com/doc/) — à quoi sert le site, le parcours en 4 étapes (recherche → restos d'une ville → fiche → /stats), d'où viennent les données, FAQ. |
| 234 | 233 | - **Guide PDF** : [resto-ka-documentation.pdf](https://www.resto-ka.com/doc/resto-ka-documentation.pdf) — la même documentation, téléchargeable. |
| 234 | +- **Docs des connecteurs** : [`docs/connecteurs/`](docs/connecteurs/) — une fiche par source (accès, extraction, cadence, gotchas), index dans `INDEX.md`. | |
| 235 | 235 | - Les captures du guide sont versionnées dans `frontend/public/doc/img/` (etape1 → etape4). |
| 236 | 236 | |
| 237 | 237 | ## Développement (remote-first) |
@@ -263,6 +263,9 @@ Jalons tirés du `git log` : | ||
| 263 | 263 | - **2026-08-22** — SEO : SSR léger (JSON-LD Restaurant), sitemaps chunkés, robots.txt ; chaîne de fetch anti-bot résiliente (Oxylabs → Scrapfly → Bright Data) ; section « Récemment consultés ». |
| 264 | 264 | - **2026-08-23** — connecteur `site-finder` (Serper /maps), photos extraites des sites des restos, Stats v3 (rapports PDF personnalisés, ReportBuilder), favoris unifiés « Mon univers Ka », pages SEO /villes ; 32 → 116 intégrations UEAT découvertes. |
| 265 | 265 | - **2026-08-24** — page documentation `/doc` (guide + captures + PDF), refonte du README (v2 puis v3), mise à jour du répertoire UEAT. |
| 266 | +- **2026-08-25** — front-end v2 « éditorial premium », KA Tabbar v1, **7 nouvelles sources** (mtl-alim, Tastet, ChowNow, GloriaFood, Square, DoorDash, Skip) + hub de découverte multi-plateformes, widget ka-agent v4 ; le volume passe de ~14,7 k à 21 k+ restos. | |
| 267 | +- **2026-08-26/27** — KA ID v2 : recommandations personnalisées (`kaid.py`, filtrage collaboratif ALS, pilules « Sauvegarder cette recherche »/« Pas pour moi »), alignées sur `ka-ui.git`. | |
| 268 | +- **2026-08-28** — README v4 : visite guidée en 10 captures live (`docs/screenshots/`), chiffres et registre des sources à jour. | |
| 266 | 269 | |
| 267 | 270 | ## Écosystème Groupe KA |
| 268 | 271 | |
added
docs/screenshots/01-accueil.jpg
+0 −0
Binary file not shown.
added
docs/screenshots/02-villes.jpg
+0 −0
Binary file not shown.
added
docs/screenshots/03-stats.jpg
+0 −0
Binary file not shown.
added
docs/screenshots/04-sources.jpg
+0 −0
Binary file not shown.
added
docs/screenshots/05-contact.jpg
+0 −0
Binary file not shown.
added
docs/screenshots/06-ville-montreal.jpg
+0 −0
Binary file not shown.
added
docs/screenshots/07-resto-mtl-alim-100002.jpg
+0 −0
Binary file not shown.
added
docs/screenshots/08-favoris.jpg
+0 −0
Binary file not shown.
added
docs/screenshots/09-doc.jpg
+0 −0
Binary file not shown.
added
docs/screenshots/10-accueil-mobile.jpg
+0 −0
Binary file not shown.