# promo/ — pages de présentation Set-OPS Quatre pages web **autonomes** (un seul fichier chacune, aucun asset externe, aucune dépendance réseau), sœurs de thème et liées entre elles par la barre de navigation. | Fichier | Public visé | Répond à | |---|---|---| | `index.html` | sysadmin, personne technique | *Qu'est-ce que je peux faire avec ça ?* | | `offres.html` | prospect, client | *Qu'est-ce que vous pouvez bâtir pour moi ?* | | `tarifs.html` | prospect, acheteur | *Combien ça coûte ?* | | `valeur.html` | direction, CA, bailleur de fonds | *Qu'est-ce que ça me rapporte, et comment le vérifier ?* | > ⚠️ **`tarifs.html` est du matériel commercial de Chezlepro inc.**, publié dans un dépôt > public. Les montants y sont donc visibles de tous, y compris des concurrents et des > clients existants, et l'historique git en conserve chaque version. C'est un choix > assumé ; le rappeler avant chaque ajustement de prix. - **Thème** : identité *Alliance Boréale* (ciel nocturne + aurore + constellation), reprise des thèmes Keycloak/Forgejo du dépôt. ## Conventions communes — à respecter pour toute modification Les quatre pages forment un ensemble navigable : ce qui suit doit rester **identique** partout, sous peine de dérive (c'est déjà arrivé une fois, et il a fallu une passe complète pour la résorber). | Élément | Règle | |---|---| | **Adresse au lecteur** | **Vouvoiement**, sans exception. Ce sont des pages commerciales. | | **Barre de navigation** | `Capacités · Offres · Tarifs · Valeur` + bouton « Nous parler ». Même ordre, mêmes libellés, page courante marquée `aria-current="page"`. | | **Marque** | `Set-OPS · Chezlepro` dans la barre ; `Chezlepro inc. · Saint-Bruno-de-Montarville, Québec` au pied. | | **``** | `Set-OPS — <Section> · Chezlepro` | | **Vocabulaire d'état** | Trois valeurs seulement : **Éprouvé** (`.st.ok`), **En chantier** (`.st.wip`), **Feuille de route** (`.st.road`). Jamais d'autre mot, jamais d'autre classe. | | **Fin de page** | Section `#reserves` (bloc `.honest`) puis bloc `.close`. Les quatre pages assument leurs limites. | | **CSS partagé** | Un sélecteur commun (`section`, `.card`, `.sec-head`, `ul.does`, `.st`, `footer`…) doit avoir **la même déclaration** dans les quatre fichiers. | Vérifier avant de committer : ```bash python3 - <<'EOF' import re,pathlib from collections import defaultdict r=defaultdict(dict) for f in ['index.html','offres.html','tarifs.html','valeur.html']: css=re.sub(r'/\*.*?\*/','',re.search(r'<style>(.*?)</style>', pathlib.Path('promo',f).read_text(encoding='utf-8'),re.S).group(1),flags=re.S) d,buf,sel=0,'',None for c in css: if c=='{': d+=1 if d==1: sel,buf=buf.strip(),'' else: buf+=c elif c=='}': d-=1 if d==0: if not sel.startswith('@'): r[sel][f]=re.sub(r'\s+','',buf) buf='' else: buf+=c else: buf+=c print("conflits CSS :",sum(1 for s,d in r.items() if len(set(d.values()))>1)) EOF ``` - **Honnêteté** : les capacités **éprouvées** (déployées sur VM réelles) sont distinguées de ce qui est **en chantier** et de la **feuille de route**, conformément au principe « ne jamais affirmer plus que ce qui est prouvé » (cf. `docs/audit/`). Les trois pages portent une section de réserves assumées. ## `offres.html` — périmètre tiré des modèles réels Chaque offre correspond à un modèle d'instance existant, et le **nombre de machines annoncé est celui du plan**, pas une estimation : | Offre | Modèle | VM | État | |---|---|---|---| | Le Socle | `socle` (public) | 4 | éprouvé | | Identité | `identite` | 7 | éprouvé | | Maison OBNL · Cabinet | `collaboration` | 8 | **en chantier** | | Atelier | `forge` | 6 | éprouvé | | Vigie | `observabilite` | 7 | éprouvé | | Intégral | `integral` | 12 | éprouvé | | Présence Web | `presence-web` | 7 | **feuille de route — non vendable** | > Si un modèle change de périmètre (VM ajoutée, module éprouvé), **mettre la page à jour** : > son intérêt tient entièrement à ce que ces chiffres soient vrais. Les montants de départ sont repris de `tarifs.html`, dont c'est la source de vérité — en cas d'ajustement de prix, **modifier `tarifs.html` puis reporter dans `offres.html`**. ## `tarifs.html` — grille tarifaire Chezlepro inc. Alignée sur les **six offres du site chezlepro.ca** (diagnostic, socle opérateur, tenant portable, audit-ready ops, exploitation gérée, observabilité), et non sur les noms de modèles Set-OPS. | Mandat | Prix de départ | |---|---| | Diagnostic & Trajectoire | dès 4 500 $ (déduit du mandat suivant) | | Socle Opérateur Souverain | dès 18 000 $ | | Tenant Portable Clé en Main | dès 12 000 $ · dès 7 500 $ pour les suivants | | Audit-Ready Ops | dès 9 000 $ | | Observabilité & Journalisation | dès 7 500 $ | | Parcours Démarrage Souverain | dès 38 000 $ (au lieu de 42 000 $) | | Exploitation Gérée & Transfert | 750 / 1 500 / 2 800 $ par mois | > **Ces montants sont des estimations de marché**, calées sur un taux effectif de > ~1 000–1 100 $/jour (firme spécialisée québécoise), pas des prix validés par une vente > réelle. À confronter au premier vrai mandat et à corriger. Dollars canadiens, avant taxes. ## `valeur.html` — le calculateur Le comparatif coût total est **interactif** : le visiteur remplace les hypothèses par les siennes (personnes desservies, coût des abonnements, matériel, mise en place, exploitation) et l'addition se refait en direct sur un horizon de 5 ans, matériel amorti sur 5 ans. Il affiche **honnêtement le cas défavorable** : sous ~40 personnes (aux valeurs par défaut), l'autohébergement ne se rembourse pas dans l'horizon retenu, et la page le dit — le gain devient la souveraineté, pas le budget. Les valeurs par défaut ne sont pas des tarifs Set-OPS : ce sont des ordres de grandeur à remplacer. ## Voir / publier ```bash xdg-open promo/offres.html python3 -m http.server -d promo 8080 # puis http://localhost:8080/offres.html ``` Les fichiers sont prêts à déposer tels quels sur n'importe quel hébergement statique (Forgejo Pages, un vhost `serveur_nginx`, etc.).