SPB Git

spb/resto-ka

Public

Resto·Ka — tous les restaurants du Québec, menus complets et prix réels (famille ·Ka)

docs: README à jour avec screenshot

Simon-Pierre Boucher committed (Aug 18, 2026) parent 198925c Browse files

2 changed files +58 −53

modified README.md +58 −53
@@ -4,34 +4,38 @@
4 Desc: Resto·Ka — agrégateur des restaurants du Québec (menus & prix). 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−![Restaurants](https://img.shields.io/badge/restaurants-14_055-141814?labelColor=d9f26b&style=for-the-badge) 9+**Tous les restaurants du Québec — menus complets et prix réels, dans les 17 régions.**
10+
11+![Aperçu de Resto-Ka](docs/screenshot.png)
12+
13+![Restaurants](https://img.shields.io/badge/restaurants-14_091-141814?labelColor=d9f26b&style=for-the-badge)
10 ![Plats avec prix](https://img.shields.io/badge/plats_avec_prix-79_159-141814?labelColor=d9f26b&style=for-the-badge) 14 ![Plats avec prix](https://img.shields.io/badge/plats_avec_prix-79_159-141814?labelColor=d9f26b&style=for-the-badge)
11 ![Régions](https://img.shields.io/badge/r%C3%A9gions-17%2F17-141814?labelColor=d9f26b&style=for-the-badge) 15 ![Régions](https://img.shields.io/badge/r%C3%A9gions-17%2F17-141814?labelColor=d9f26b&style=for-the-badge)
12 ![Chaînes](https://img.shields.io/badge/cha%C3%AEnes_suivies-24-141814?labelColor=d9f26b&style=for-the-badge) 16 ![Chaînes](https://img.shields.io/badge/cha%C3%AEnes_suivies-24-141814?labelColor=d9f26b&style=for-the-badge)
13 ![Menus complets](https://img.shields.io/badge/menus_complets-738_restos-141814?labelColor=d9f26b&style=for-the-badge) 17 ![Menus complets](https://img.shields.io/badge/menus_complets-738_restos-141814?labelColor=d9f26b&style=for-the-badge)
14 18
15−![Prix](https://img.shields.io/badge/prix-takeout_r%C3%A9els,_non_major%C3%A9s-1c5c41?style=flat-square) 19+## Description
16−![Images](https://img.shields.io/badge/items_avec_photo-98%25-1c5c41?style=flat-square) 20+
17−![Options](https://img.shields.io/badge/items_avec_options-69%25-1c5c41?style=flat-square) 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**.
18−![Géocodage](https://img.shields.io/badge/g%C3%A9olocalis%C3%A9-99%25-1c5c41?style=flat-square) 22+
19−![Tests](https://img.shields.io/badge/tests-45_pass-1c5c41?style=flat-square) 23+- **14 091 restaurants** référencés (découverte **OpenStreetMap**, 17/17 régions)
20−![Python](https://img.shields.io/badge/python-3.14_%C2%B7_FastAPI-141814?style=flat-square) 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 %)
21−![React](https://img.shields.io/badge/react-18_%C2%B7_Vite_%C2%B7_TS-141814?style=flat-square) 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 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.**
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**.
27 29
28−Plateforme de la famille **·Ka** (Lou·Ka, Immo·Ka, Auto·Ka, Food·Ka, Fabri·Ka, 30+## Fonctionnalités
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.
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 | Accueil — recherche de restos | Recherche par plat | 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 | ![Fiche](docs/screenshots/fiche.png) | ![Stats](docs/screenshots/stats.png) | 46 | ![Fiche](docs/screenshots/fiche.png) | ![Stats](docs/screenshots/stats.png) |
43 47
44−## Ce qui rend Resto·Ka différent 48+## Stack technique
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
60 49
61−```bash 50+- **Backend** : **Python 3.14** · **FastAPI** · **Uvicorn** · **SQLite** (menus par contexte + historique de prix)
62−python3 -m venv .venv && .venv/bin/pip install -r requirements.txt 51+- **Frontend** : **React 18** · **Vite** · **TypeScript** — design éditorial sharp Groupe KA
63−cd frontend && npm install && npm run build && cd .. 52+- **Scraping/ingestion** : requests direct / **Firecrawl** / **Scrapfly**, API **Overpass** (OSM), API **GraphQL UEAT**
64− 53+- **Tests** : **45 tests pytest** (fixtures réelles hors ligne)
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−```
70 54
71−## Architecture (patron Lou·Ka) 55+## Structure (patron Lou·Ka)
72 56
73 ``` 57 ```
74 restoka/ 58 restoka/
@@ -82,27 +66,48 @@ restoka/
82 ├── ingest.py # pipeline sync → geocode → dedup (délai de grâce, alertes) 66 ├── ingest.py # pipeline sync → geocode → dedup (délai de grâce, alertes)
83 ├── dedup.py # identité resto inter-sources (succursales jamais fusionnées) 67 ├── dedup.py # identité resto inter-sources (succursales jamais fusionnées)
84 ├── geocode.py # Nominatim + Adresses Québec, cache persistant 68 ├── geocode.py # Nominatim + Adresses Québec, cache persistant
69+├── auth.py # connexion KA ID (SSO Groupe Ka)
85 └── web.py # FastAPI + frontend React (frontend/dist) 70 └── web.py # FastAPI + frontend React (frontend/dist)
86 frontend/ # Vite + React 18 + TS — design éditorial sharp Groupe KA 71 frontend/ # Vite + React 18 + TS — design éditorial sharp Groupe KA
87 ``` 72 ```
88 73
89 ## Sources connectées 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 | Source | Palier | Contexte de prix | Couverture | 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). | 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). |
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 | 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 | St-Hubert | 6 | `takeout` (visé) | à faire — anti-bot Akamai, voir `data/sources.json` | 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 ## Déploiement 96 ## Déploiement
100 97
101−Node **M3U96b** (MacLustr), `~/apps/resto-ka`, PM2 : `resto-ka` (:8115) + 98+- **Nœud** : **M3U96b** (cluster MacLustr), répertoire **`~/apps/resto-ka`**
102−`resto-ka-ngrok` (→ https://www.resto-ka.com) + `resto-ka-sync` (hebdo). 99+- **Port** : **8115**
103−Registre cross-session : `~/Desktop/cluster-skill/cluster-deployments.json`. 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 : 113+Un service **[Groupe Ka](https://www.groupe-ka.com)** — Auteur : Simon-Pierre Boucher \<contact@spboucher.ai\>.
108−Simon-Pierre Boucher \<contact@spboucher.ai\>.*
added docs/screenshot.png +0 −0

Binary file not shown.

Menu

Theme