# 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 — · 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'',
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.).