Saleor Store
우리 컬렉션을 쇼핑하세요
Géant와 Carrefour에서 35개 미네랄 워터 브랜드(병·스틱) 가격을 무료로 비교, 매일 업데이트
Compare gratuitement les prix de 35 marques d'eau minérale (bouteille et stika) chez Géant et Carrefour. Mis à jour chaque jour.
커머스HTML · JavaScriptGitHub @Ah6259온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Comparateur des prix de l'eau minerale en Tunisie (Carrefour, Geant, Otrity) - stika et bouteille, mis a jour automatiquement chaque jour
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Site web (et base d'une future app) qui compare les prix des marques d'eau minérale vendues en Tunisie (bouteille et stika), relevés automatiquement chaque nuit par GitHub chez Carrefour (magasin par magasin) et Géant Drive, complétés par les prix signalés par les visiteurs. Le site est autonome : rien sur le PC, rien à la main. (Aziza retiré le 30/09/2026 ; Otrity et Monoprix retirés le 23/10/2026 : ils ne se lisaient pas depuis GitHub, voir « Mettre à jour les prix ».)
Site public : https://prix-eau.clicvia.com/
© 2026 — Tous droits réservés (voir LICENSE). Ce dépôt est public uniquement pour l'hébergement gratuit du site : aucune réutilisation du code ou des données sans autorisation écrite. Dépôt GitHub : https://github.com/Ah6259/prix-eaux-tunisie (Ancienne version privée Claude : https://claude.ai/artifact/N4YgHUrDQegTPn69Z77DCv)
05/10 : design pro, photo neutre, photos libres des marques sans magasin, sécurité (CSP, noai, anti-copie), site installable (manifeste + service worker), Votre avis, GoatCounter, aperçu WhatsApp léger. Détails : CLAUDE.md.
data/composition.js)marque/<slug>/), FAQ, SEO, PWAa-propos/, 25/10/2026, règle commune § 44) : fabriquée chaque nuit par
page_a_propos() de tools/build_guides.py, liée depuis l'accueil et tous les pieds de page ; à tenir à jour à chaque
modification visible (test FONCTIONS de tools/test_site.mjs)disabled du fieldset.order-fields et le bloc div.tampon dans index.html,
et remettre le texte de la barre panier dans app.jsdata/votes.js)Le site tourne seul sur les serveurs de GitHub, gratuitement, sans nom de domaine à
renouveler. Ce qui se passe en cas de problème (simulé par python tools/test_pannes.py,
16 scénarios) :
| Risque | Ce que fait le système tout seul | À faire par un humain |
|---|---|---|
| Un magasin change son site / tombe en panne | Garde ses derniers prix 7 jours au plus (mention « Prix Géant du … » dès 2 jours), puis les retire | Demander à Claude : « lis le README et répare la collecte des prix de » |
| Un site renvoie des prix absurdes (millimes, produits manquants, marques inconnues) | Détecté (« incohérent » / « suspect ») : traité comme une panne | Idem |
| Toutes les sources en panne | Bandeau ⚠️ « prix non mis à jour depuis le … » dès 3 jours ; plus aucun prix après 7 jours | Idem, ou chercher de nouvelles sources |
| Robots GitHub arrêtés | Le site compare la date des prix à la date du visiteur : ⚠️ affiché quand même. Un « battement de cœur » mensuel empêche GitHub de mettre les robots en pause (60 jours sans activité) | Onglet Actions du dépôt → réactiver les workflows |
| PC d'Ahmed éteint, volé ou en panne | Rien ne change : depuis le 23/10/2026 aucun prix ne dépend du PC | En cas de vol : changer le mot de passe GitHub et révoquer les sessions (github.com → Settings → Sessions / Applications), fermer les sessions Telegram et Google de l'appareil volé |
| Compte Google inactif (supprimé après 2 ans) | Les prix signalés ne sont plus lus ; les anciens disparaissent après 30 jours ; rien ne casse | Gestionnaire de compte inactif Google → personne de confiance |
| Compte Telegram inactif | Les alertes s'arrêtent si le canal perd son robot | Telegram → Confidentialité → « Supprimer mon compte si absent » : durée maximale ; ajouter un 2ᵉ administrateur |
| Telegram en panne | Prix publiés quand même ; annonce retentée au passage suivant, sans doublon | — |
| Un téléphone garde une vieille version du site | sw.js (service worker) est en réseau d'abord pour les pages et les prix : le cache ne sert que hors connexion | Changer CACHE_VERSION dans sw.js (vide le cache de tous les téléphones) |
Données privées : la liste des fournisseurs, livreurs et grossistes (et leurs robots) est dans un dépôt
GitHub privé séparé (dispatch-eau-prive), jamais dans ce dépôt public.
Successeur : ajouter une personne de confiance comme collaboratrice du dépôt GitHub (Settings → Collaborators), administratrice du canal Telegram et éditrice du Google Forms « Prix signalés ». Pour toute réparation, ouvrir une session Claude Code dans ce dossier et lui demander de lire ce README.
| Chemin | Rôle |
|---|---|
index.html | La page (structure et textes) — changer les ?v= de style.css / app.js à chaque modification (cache des téléphones) |
style.css | Tout le style (thème clair/sombre) |
app.js | Rendu, filtres, avertissement de fraîcheur, prix signalés, panier |
data/eaux.js / eaux.json | Prix (généré — ne pas éditer), avec statut_sources |
data/signalements*.js/json, data/votes.js | Prix signalés et votes (générés) ; signalements_manuels.json = ajouts à la main |
data/baisses.*, historique.*, composition.js | Baisses du jour, historique, composition |
tools/collect_prices.py | Collecte des prix (Carrefour, Géant) + garde-fous |
tools/price_drops.py | Baisses de prix → site + Telegram |
tools/signalements.py | Décision automatique sur les prix signalés → site + Telegram |
tools/test_pannes.py | Simulateur de pannes (23 scénarios) — à relancer après toute modification du robot |
tools/build_history.py, tools/build_pages.py | Historique, pages par marque, sitemap |
| Workflow | Quand | Rôle |
|---|---|---|
maj-prix.yml | chaque nuit ≈ 1h07 (Tunis) | collecte → baisses/Telegram → historique → pages → publication |
signalements.yml | toutes les 2 h, 8h05–22h05 | prix signalés → site + Telegram ; décompte des votes ; commit seulement si un signalement change (10/10/2026) |
battement-de-coeur.yml | le 1er du mois | empêche GitHub de mettre les robots en pause (60 j) |
instagram.yml | chaque lundi 9h05 | image « 5 stikas les moins chères » + texte → canal Telegram (pour Instagram) |
telegram-bienvenue.yml | à la main | message de présentation sur le canal |
tests.yml | à chaque envoi (push) | YAML des robots + test_site.mjs + test_sw.mjs + test_pannes.py + visiteur simulé (visiteur_simule.py : le site vu comme un visiteur sur téléphone) (e-mail de GitHub si échec) |
Automatique : le workflow GitHub Actions (.github/workflows/maj-prix.yml) tourne
chaque nuit vers 1h du matin (heure de Tunis) sur les serveurs GitHub — PC éteint ou pas —
et publie directement sur le site. Lancement immédiat :
gh workflow run maj-prix.yml -R Ah6259/prix-eaux-tunisie.
Manuel (copie locale uniquement) : double-clic sur tools/update_prix.bat, ou :
python tools/collect_prices.py
Notes :
prix-eau-monoprix/ et prix-eau-otrity/
disent « n'est plus suivi » (noindex, hors du plan du site). Aziza n'est plus suivi (30/09/2026) : barka.tn ne donne que les
prix de l'ancienne boutique en ligne d'Aziza, fermée (prix périmés, signalés par un client) ;
le site actuel d'Aziza ne publie que des catalogues promo et son API de prix est privée.
Jumia exige une vérification « humain » : on ne contourne pas (demander l'autorisation, ou prix signalés).MARQUES_EAU), packs/fardeaux écartés
(la stika est affichée comme 6 × la bouteille), prix hors 0,25–2,5 DT/L ou supérieurs
au double de l'offre la moins chère écartés.META en tête de
tools/collect_prices.py.geant_scrape.py est conservé pour référence mais n'est plus utilisé (barka_scrape.py et
build_data.py, qui lisaient encore Monoprix, supprimés le 23/10/2026 ; ils restent dans l'historique git).Site statique servi par GitHub Pages (branche main, racine) : chaque commit des robots
redéploie le site en ~1 minute. Le dépôt doit rester public (Pages gratuit).
Le dépôt Ah6259/prix-eau-tunisie n'est qu'une redirection vers ce site : à garder.
data/composition.js — bon pour le SEO.tools/price_drops.py, secret GitHub TELEGRAM_BOT_TOKEN). Plus tard : alerte email
par marque, recopie éventuelle sur une chaîne WhatsApp.tools/signalements.py toutes les 2 h de 8h à 22h (workflow signalements.yml) qui décide seul
(vraisemblance, écart aux prix connus, doublons = « confirmé ») → affiché 30 jours sur la
carte (hors calcul du moins cher) + annoncé sur le canal Telegram. Tout est automatique.
Plus tard (pas urgent, ~15 min avec Ahmed) : publication quasi immédiate (2-3 min) —
script Google Apps Script attaché au formulaire, déclencheur « à l'envoi », qui lance le
workflow signalements.yml via l'API GitHub (workflow_dispatch) avec une clé GitHub
limitée (fine-grained token, Actions : write sur ce seul dépôt) rangée dans le script.
Garder alors un passage de secours toutes les 2 h.Réutiliser toute la recette du site de l'eau (scrapers Carrefour/Géant/barka, page, filtres, MAJ de nuit, historique, alertes Telegram, SEO, GoatCounter) pour d'autres produits.
/safia/…) pour le référencement Googleassets/son.js ; carte isolée et menus des filtres au-dessus (règle commune § 28) ; tests ajoutés. Règles communes § 27 (recherche au son) et § 28 (cartes).tools/sources_a_explorer.md) ; la vérification du matin le contrôle.