Application mobile permettant de créer des produits en rayon via photo, avec localisation automatique. Suivi des dates de péremption, alertes intelligentes (temps + lieu), rappels (email/Calendar) et
Translation pending
CommerceGitHub @delestrestdOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
Repository information has not been collected yet.
No updates detected yet. GitHub releases will appear here.
Application mobile permettant de créer des produits en rayon via photo, avec localisation automatique. Suivi des dates de péremption, alertes intelligentes (temps + lieu), rappels (email/Calendar) et pilotage via chatbot IA. Gestion RGPD intégrée pour un usage conforme et déployable.
Translation pending
Taken from the repository README
Loading the full README.
Read the full README ↗Outil terrain GMS de S2D COMMERCIAL. Le module des dates de péremption garde le nom « Fresh Control ».
PWA de gestion des produits périmés en supermarché.
BarcodeDetector natif (Android Chrome) avec repli ZXing (iOS/Safari), caméra live en continu, torche + autofocus, repli photo — aucune image n'est envoyée à un serveur..xlsx / .csv, sans dépendance CDN ni envoi serveur).TRD pour les écrans récents ; mentions légales et charte RGPD restent en français).# Servir l'app en local (Node 18+)
npm run dev # http://localhost:3000
# Valider la config
npm run validate # JSON + HTML
Tout l'état (utilisateurs, produits, catalogue) est stocké en localStorage. Aucune base requise.
Push sur GitHub → Vercel détecte le repo → deploy automatique.
vercel.json configure les en-têtes de sécurité (CSP, HSTS, X-Frame-Options, Permissions-Policy) et le cache.
freshcontrol/
├── index.html ← Application complète (HTML + CSS + JS inline, PWA)
├── manifest.json ← Manifeste PWA (icônes SVG, scope, display, etc.)
├── vercel.json ← Headers de sécurité + cache
├── package.json ← Métadonnées + scripts
├── api/
│ └── scan.js ← Endpoint serverless Vercel (Claude Vision pour
│ l'analyse d'image — optionnel, non requis par le
│ front-end actuel qui utilise saisie manuelle)
└── icons/ ← Icônes PWA (SVG self-hosted)
L'app se configure entièrement depuis l'écran Admin une fois connecté :
| Champ | Description |
|---|---|
| Nom du magasin | Affiché dans le header |
| URL Google Sheet (CSV) | Catalogue produits (multi-onglets supportés) |
| URL Google Apps Script | Backup des scans + envoi e-mail (optionnel) |
Une ligne d'en-tête, puis les produits. Colonnes minimales :
gencod Libellé produit Famille
3456300020694 Yaourt nature bio 125g Crémerie
Synonymes acceptés pour les en-têtes : gencod / ean / code, libellé / nom / produit, famille / type / rayon.
URL CSV publique : https://docs.google.com/spreadsheets/d/<ID>/gviz/tq?tqx=out:csv&sheet=<NomOnglet>
Plusieurs onglets / marques peuvent être combinés via | :
https://…/gviz/tq?tqx=out:csv&sheet=Marque_A|https://…/gviz/tq?tqx=out:csv&sheet=Marque_B
Depuis Admin → 📋 Marques → « Importer un fichier », on charge un tarif au format .xlsx ou .csv directement dans le navigateur (lecteur XLSX natif, zéro dépendance externe, aucun envoi serveur). Les colonnes reconnues sont les mêmes que pour Google Sheets (Code-barres / Gencod, Nom du produit, Type — synonymes tolérés). Une marque importée par fichier porte l'icône 📁 : ses produits sont préservés à chaque synchro et ne sont remplacés que par un ré-import.
Les fichiers
.xlsx / .xls / .csvdu dépôt sont exclus du versionnement (.gitignore) et du déploiement (.vercelignore) : ce sont des données métier client, jamais publiées.
Onglet 🛒 Commande — 100 % local, aucune commande n'est poussée vers un serveur (enregistrement localStorage + e-mail pré-rempli).
Fonctionnement du scan (depuis la v3.1) :
− / + ou saisie directe). Quand le catalogue connaît le PCB (unités par colis), le bon de commande calcule les unités (colis × PCB).La commande se valide par e-mail : texte regroupé par gamme (EAN, réf., PCB, colis, unités), bon de commande PDF avec le code-barres EAN de chaque ligne (à scanner à la douchette dans le logiciel de gestion ; règle valable pour toutes les marques) et bon de commande Excel joints via le partage natif du téléphone (sur PC : téléchargement + ouverture du mail). Un historique local permet de recharger, renvoyer ou exporter (Excel ou CSV) les commandes passées.
La caméra ne démarre pas d'elle-même à l'ouverture de l'onglet : le clic initial sur « Démarrer le scan » reste nécessaire (choix délibéré pour ne pas monopoliser la caméra).
localStorage). Ce n'est pas une frontière de sécurité opposable à un utilisateur ayant accès au navigateur/devtools — c'est un garde-fou d'usage, pas un contrôle d'accès serveur.À l'installation, un unique compte est créé :
admin / admin
L'identifiant admin est pré-rempli à l'écran de connexion. Vous pouvez changer le mot de passe depuis Admin → 🔑 Mon compte (il est alors haché en PBKDF2 au login).
Si l'accès est perdu, le bouton « Réinitialiser les accès » de l'écran de connexion restaure simplement admin / admin (les produits, le catalogue et la configuration sont conservés).
api/scan.js (analyse d'image — optionnel)Désactivé par défaut. Il ne s'active que si la variable d'environnement SCAN_TOKEN est définie côté Vercel ; chaque requête doit alors présenter ce secret dans l'en-tête x-fc-token. Tant que SCAN_TOKEN n'est pas configuré, l'endpoint refuse tout appel (évite l'abus de la clé Anthropic). Optionnellement, SCAN_ALLOWED_ORIGIN restreint l'origine CORS.
Privé — tous droits réservés.