Coovi
Coovi에서 엄선된 면·실크·오간 사리들을 구매하고 방글라데시 전역 현금 착불 가능
Guide·Achat는 프로필·사용·우선순위에 따라 스마트폰·노트북을 분석해 적합성을 판단합니다
Ce produit est-il fait pour vous ? Guide·Achat analyse les smartphones et PC portables selon votre profil, vos usages et vos priorités.
커머스JavaScript · HTMLGitHub @7fj5mfzkmz-max온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Site statique (HTML/CSS/JS) + petit backend Node pour l'analyse de liens marchands.
/ Pages du site (les URL ne changent pas)
index.html actualites.html smartphones.html smartphones-approfondir.html
pc-portables.html batteries-externes.html ecouteurs.html projecteurs.html
analyseur.html a-propos.html
(comparateur, lexique, lexique-pc-portables, capture et diagnostic sont retirés :
redirections permanentes dans vercel.json et netlify.toml)
assets/
brand/ Logo, favicon et règles de la marque (voir assets/brand/LISEZMOI.md)
css/ Toutes les feuilles de style (voir assets/css/README.md)
js/ Tout le JavaScript du site (interface, quiz, comparateur, visuels PC…)
deco/ phones/ pc-photo/ Images
data/ Données : smartphones.json, pc-portables.json, lexique-pc-portables.json, phone-references.json
phone-analyzer/ Moteur d'analyse (partagé navigateur + serveur)
category-kit/ Profils par catégorie (partagé navigateur + serveur)
sources/ Connecteurs de données (GSMArena, Kimovil, PhonesData, catalogue)
server/ Backend Node (résolution des liens)
api/ netlify/ Points d'entrée Vercel / Netlify (doivent rester à ces emplacements)
scripts/ tests/ Tests (npm run kit:check, analyzer:test, …)
tools/ Outils de génération (non déployés)
docs/ Déploiement, notes de refonte, historique
Source unique : tools/site/gabarit.py. Après modification : python3 tools/site/gabarit.py (ou npm run gabarit).
npm test échoue si une page s’en écarte (npm run gabarit:test). Une nouvelle page s’ajoute dans PAGES (avec la cible
de « Ma recommandation »), dans sitemap.xml et, si c’est une catégorie, dans CATEGORIES.
node tools/smartphones/construire-tests.js écrit data/smartphones-tests.json (le dossier des vidéos).
node tools/smartphones/integrer-tests.js fait entrer ses modèles dans data/smartphones.json : les fiches existantes reçoivent la preuve du test (tests), les autres sont ajoutées (origine: "test") avec uniquement les valeurs relevées, sans note inventée.
Le dossier compte 14 vidéos : les cinq premières viennent du « Résumé détaillé des 6 vidéos Smartphones 2026 », les neuf suivantes (n° 6 à 14) du rapport « Smartphones 2026 » d’octobre 2026 (voir docs/SOURCES-VIDEOS-A-VERIFIER.md). Une fiche de test déjà au catalogue garde ses enrichissements : integrer-tests.js ne rafraîchit que sa preuve de test, et un modèle testé n’est classé qu’une fois prix, puce, batterie et écran connus.
La section « Classements » de la page smartphones (assets/js/smartphones-classements.js) lit le bloc classements de data/smartphones-tests.json, construit par construire-tests.js à partir des mesures. Règle : un classement n'existe que dans un seul protocole (une vidéo, une méthode) ; les durées de vidéos différentes ne se mélangent jamais, et le protocole s'affiche sous chaque classement. Les profils ne sont que des listes ordonnées de classements.
Le classement de la page smartphones (profils, « Mes critères ») lit ensuite ces deux fichiers (assets/js/smartphones-trouver.js, smartphones-scoring.js). Relancer ensuite node tools/actualites/construire.js.
phone-analyzer/chips.js classe chaque puce sur une seule échelle (1-3 entrée, 4-6 milieu, 7-8 haut, 9-10 très haut de gamme), partagée par le catalogue, le quiz et l'analyseur. node tools/smartphones/classer-puces.js écrit perf.niveau et perf.gamme dans data/smartphones.json (déjà appelé par integrer-tests.js). Puce inconnue : pas de niveau. Nouvelle puce : ajouter une règle dans chips.js, puis node scripts/chips-test.js.
Paliers de prix du quiz : bas prix 80-150 €, entrée 150-300 €, milieu 300-800 €, haut 800 € et plus ; « petit prix » = 80 à 250 €.
phone-analyzer/sensors.js note le capteur principal selon sa taille : 1″ = 10, 1/1.3″ = 8, 1/1.56″ = 7, 1/2″ = 5, 1/2.76″ = 3 (1-3 petit, 4-6 moyen, 7-8 grand, 9-10 très grand). Les tailles relevées, avec leurs sources, sont dans data/smartphones-capteurs.json ; node tools/smartphones/classer-capteurs.js les inscrit dans compatibilite.photo.capteur (relancé par tous les outils du catalogue). Un modèle sans relevé n'a pas de note : on ne devine pas. Contrôle : node scripts/sensors-test.js.
window.GuideDisponibilite (assets/js/smartphones-scoring.js) dit si une option a au moins un modèle correspondant dans le catalogue, dans le budget déjà choisi (palier ± 15 %). Même règle que le classement : valeur « pile » ou très proche. Une option sans modèle est grisée (aria-disabled, « Aucun modèle dans ce budget »), un clic dessus est ignoré, et changer de budget retire les choix devenus impossibles. Un critère que le catalogue ne documente pour aucun modèle (chimie de batterie par exemple) n'est pas grisé.
data/smartphones-verifications.json liste les fiches relues sur au moins deux sources (presse, fabricant, revendeur), avec le prix France et les liens. node tools/smartphones/verifier-fiches.js les applique au catalogue : statut verifie_web, éligibles aux classements. Une valeur absente ou contradictoire reste vide. Les modèles introuvables sont écartés (exclu_reco), les pliables et imports restent hors classement. Contrôle : node scripts/verifications-test.js.
python3 tools/pc-portables/construire.py → écrit data/pc-portables.json et data/lexique-pc-portables.json (lexique affiché dans pc-portables.html#lexique).
Voir docs/DEPLOIEMENT-VERCEL-GITHUB.md et docs/DEPLOIEMENT.md.
Généré par node tools/actualites/construire.js : il compare data/*.json à l'état précédent (data/actualites-etat.json),
crée une entrée datée pour chaque lot de nouveaux produits ou de fiches modifiées, puis réécrit le bloc de l'accueil,
actualites.html et feed.xml. Sur GitHub, .github/workflows/actualites.yml le lance à chaque modification de data/.
npm test échoue si le fil est périmé. Article ou guide sans changement de données :
node tools/actualites/ajouter.js --cat projecteurs --titre "…" --resume "…" --lien projecteurs.html, puis relancer le générateur.
--amorcer reconstruit tout depuis git et efface les entrées ajoutées à la main : à ne pas relancer.
Le français reste la source. assets/js/i18n.js traduit la page à l’affichage à partir des dictionnaires assets/i18n/en.json et es.json (correspondance exacte, chiffres abstraits {0}, motifs pour le flux d’actualités, balises <1>…</1> pour le texte à mise en forme mêlée). Le bouton de langue se trouve dans la barre d’en-tête : Auto (langue du navigateur, anglais par défaut), Français, English, Español. Le choix est mémorisé dans localStorage (guide-achat-lang).
Ajouter ou corriger une traduction :
node tools/i18n/extraire.js relève les chaînes françaises de toutes les pages (chaines.json).tools/i18n/extra.en.tsv / extra.es.tsv (français⇥traduction), ou un motif dans motifs.*.tsv ; les textes construits à l’exécution (résultats des guides, fiches du catalogue) sont dans tools/i18n/lots/ (générés par lot2.py, lot3.py). Les nombres isolés d’une clé s’écrivent {0}, {1}… ; un nombre collé à une lettre (M5, 24k) reste littéral.python3 tools/i18n/construire.py régénère les dictionnaires ; node tools/i18n/extraire.js --lang=es puis python3 tools/i18n/residuel.py es liste ce qui reste en français.npm run i18n:test vérifie la cohérence des dictionnaires et la détection de langue.Limites : traduction faite dans le navigateur, donc non indexée par les moteurs de recherche dans ces langues ; les notes propres à chaque fiche du catalogue (PC, projecteurs, écouteurs) sont traduites au fil des relevés et peuvent encore apparaître en français.