Vue d’ensemble — ce que couvre cette page
Outre la console située derrière l’authentification, InfraGuard dispose d’une surface publique.
| Chemin | Écran | Accès |
|---|---|---|
/ |
page d’accueil marketing | invités (une session authentifiée est redirigée vers /console) |
/demo |
formulaire de demande de démo | invités |
/manual |
manuel utilisateur | invités et utilisateurs connectés indifféremment |
/login · /lang/{locale} |
connexion · changement de langue | invités |
L’accueil de la console se trouve à /console. Ce déplacement a cédé / à la surface publique sans casser le nom de route (overview) ni les favoris existants.
La page d’accueil est compilée dans un bundle distinct (front.*). La placer dans le bundle de la console obligerait chaque visiteur à télécharger Vue, ECharts, CodeMirror, Konva et xterm (mesuré : environ 1,283KB pour la console contre 24KB pour le front). Pour une page marketing, la première impression est la vitesse de chargement. Seule l’interface partagée minimale (boutons d’icône, sélecteur de langue) réside dans
_shared-uiafin que les deux côtés utilisent la même définition — la copier-coller laisserait un côté diverger.
Le manuel public
/manual s’ouvre sans connexion. Une personne qui évalue le produit doit pouvoir lire comment il est réellement exploité, et une documentation publique constitue en soi un actif marketing et SEO. Les documents ne contiennent aucun secret ni aucune donnée en direct.
- Une URL, deux enveloppes — les invités obtiennent l’enveloppe publique (en-tête, pied de page, sélecteur de langue), les utilisateurs connectés obtiennent l’enveloppe de la console, et les deux rendent le même corps. La vue et le module de page sont partagés : les deux ne peuvent donc pas diverger.
- Les invités reçoivent en plus uniquement un sous-bundle propre au manuel (
manual.*) ; le bundle de la console ne leur est jamais servi. - Les articles portant sur des fonctions à privilèges élevés sont signalés comme verrouillés plutôt que masqués. Les invités sont traités comme du niveau 1.
- Les points d’entrée sont l’appel à l’action [Manuel utilisateur] dans le bandeau de la page d’accueil et la navigation supérieure.
Demandes de démo
Le formulaire public (/demo)
Il s’agit d’une prise de demande, pas d’une démo en un clic. Seuls un nom et un e-mail professionnel sont obligatoires ; la langue, la source de provenance et l’IP sont enregistrées à côté.
Ce formulaire est le seul chemin d’écriture ouvert aux invités dans l’application, il est donc défendu de quatre manières.
- Pot de miel — s’il est rempli, rien n’est enregistré mais la réponse ressemble toujours à un succès (n’annoncez jamais la détection).
throttle:8,1— la neuvième requête dans la minute reçoit un 429.- Jeton CSRF.
- Validation serveur avec liste blanche —
statusetnotesont réservés à l’administration, le formulaire public ne peut donc pas les définir.
L’écran d’administration (Administration ▸ Demandes de démo)
/admin/demo-requests fait tourner la boîte de réception : CRUD en modale, plus recherche, filtres de statut avec compteurs et pagination.
| Statut | Signification |
|---|---|
new |
reçue, non traitée |
contacted |
contact pris |
qualified |
opportunité qualifiée |
closed |
terminée |
- Changez le statut directement sur une ligne, ou laissez une note interne dans la modale.
- Le contexte de réception (IP, langue, source, horodatage) est affiché en lecture seule.
- Les facettes de statut comptent l’ensemble de la table quel que soit le filtre actif — « combien restent non traitées » ne doit pas disparaître parce qu’un filtre est appliqué.
La recherche échappe les jokers de LIKE (
%,_,\). Sans cela, taper un seul%correspondrait à toutes les lignes.
Balises analytiques (GA4 · GTM · Search Console)
Placez un identifiant de mesure dans .env et la balise apparaît uniquement sur la surface publique. Lorsque la valeur est vide, aucun <script> n’est rendu, de sorte qu’un déploiement par défaut n’émet aucune requête sortante.
| Clé | Valeur | Rôle |
|---|---|---|
GA_MEASUREMENT_ID |
G-XXXXXXXXXX |
gtag.js (GA4) |
GTM_CONTAINER_ID |
GTM-XXXXXXX |
Google Tag Manager (peut coexister) |
GOOGLE_SITE_VERIFICATION |
jeton meta | validation de propriété Search Console |
GA_PRODUCTION_ONLY |
true (par défaut) |
ne se déclenche qu’en production |
Ne les ajoutez jamais à la console (
layouts/app). Les URL et les titres de la console transportent des noms d’hôte, des IP, des alias d’instance et des titres d’incident. Envoyer cela à une propriété analytique tierce contredit la promesse d’auto-hébergement et de souveraineté des données que la page d’accueil elle-même affiche, et divulgue des détails de l’infrastructure du client.
- Les identifiants ne sont émis qu’après validation de leur format (
G-…/GTM-…). Une faute de frappe ou une valeur contenant des guillemets parasites se dégrade en « pas d’analytique » plutôt qu’en balise cassée. GA_PRODUCTION_ONLYvauttruepar défaut — le trafic local et de préproduction qui pollue une propriété ne peut plus être nettoyé ensuite, et c’est la raison la plus fréquente pour laquelle on cesse de faire confiance aux chiffres GA4.- La conversion se déclenche sur la page de confirmation, pas à l’envoi. Se déclencher à l’envoi compterait les échecs de validation et les pots de miel comme des conversions et gonflerait le chiffre.
- Les appels à l’action sont séparés par emplacement (
hero,header,footer_cta,footer_nav,hero_manual) afin d’en attribuer la contribution. - Si
gtagest absent, le JS ne fait strictement rien — un chargement analytique en échec ne bloque jamais l’interface.
GA4 ne vous donne pas les mots-clés de recherche. Il rapporte le canal (recherche organique) et s’arrête là ; les requêtes ne se trouvent que dans Search Console. C’est pourquoi la balise meta de propriété est émise indépendamment de GA4 — vous pouvez valider la propriété sans activer GA4 du tout. Pour les rapports par site, voyez Analyse des visiteurs et des recherches.
Politique rédactionnelle
Les chiffres de confiance de la page d’accueil n’utilisent que ce qui peut être compté dans le code, et ils sont comptés au moment du rendu plutôt qu’écrits en dur (nombre de jeux de règles, nombre de contrôles, nombre d’adaptateurs e-mail/SMS, etc.).
Cette politique a mis au jour une erreur réelle — le nombre de contrôles était de 36, pas de 37. À l’inverse, les valeurs observées ne sont jamais utilisées : le nombre de signatures distinctes s’élève à 43 sur 24h, 67 sur 7d et 79 au total, elles changeraient donc d’une visite à l’autre et saperaient la confiance au lieu de la construire. S’agissant d’une page publique, elle ne touche jamais non plus la base de données — une requête par visite est inutile, et la surface marketing doit survivre à une base de données instable.
Sources de données
| Cible | Emplacement | Rôle |
|---|---|---|
infr_demo_request |
par défaut (000770) | boîte de réception des demandes de démo (status, note, locale, source, ip) |
config/analytics.php ← .env |
config | source de vérité des identifiants de mesure et de leur activation (App\Support\Analytics) |
public/brand/ |
fichiers statiques | logo et images OG |
public/brand/doit être commité. L’essentiel depublic/est une sortie générée (build,hot,storagesont dans le gitignore), il est donc facile de l’oublier, mais les ressources de marque ne sont pas une sortie de Vite — rien ne les construit, et sans le commit le logo et l’image OG renvoient 404 en production. L’image OG doit être en PNG : de nombreux robots des réseaux sociaux ne rendent pas un aperçu SVG.
Autorisations
- Page d’accueil, formulaire de démo, manuel : public.
- Administration ▸ Demandes de démo : niveau ≥ 10 (contrôle interne), chaque modification étant consignée dans
infr_audit_log.
Dépannage · FAQ
/me renvoie sans cesse vers la console — c’est correct : une session authentifiée est redirigée vers/console. Déconnectez-vous ou utilisez une fenêtre privée pour voir la page d’accueil.- La balise n’apparaît jamais — l’identifiant est vide, il a échoué à la validation de format, ou
GA_PRODUCTION_ONLY=truealors qu’il ne s’agit pas de la production. Cherchezgoogletagmanager.comdans le code source de la page pour le confirmer. - GA4 ne collecte rien — vérifiez que l’identifiant de mesure du site appartient bien à la propriété que vous comptez consulter (Administration GA4 ▸ Flux de données). Si les données arrivent dans une autre propriété, les rapports afficheront zéro à jamais.
- Une demande de démo n’a pas été enregistrée — un pot de miel touché renvoie un succès sans enregistrement (comportement voulu). Vérifiez aussi les erreurs de validation et la limite de 8 par minute (429).
- Le sélecteur liste huit langues mais seules ko/en sont traduites — les autres retombent sur l’anglais. La demande réelle pour les langues non traduites s’observe via le paramètre analytique
language. - Un 500 juste après un déploiement neuf — nginx doit être configuré pour attendre la fin de la compilation Vite. Comme la page d’accueil publique est
/, les robots et les prospects rencontreraient sinon un 500 en guise de première impression.
Voir aussi
- Analyse des visiteurs et des recherches — lire par site les données collectées
- Service ▸ Web — supervision des sites web enregistrés
- Langue et localisation — changement de langue et paquets de traduction
- Administration ▸ Journal d’audit — historique du traitement des demandes de démo
