promo/histoire.html raconte huit etapes du 24 juin au 17 septembre a partir des commits
accessibles depuis 05b85eb, avec l'archive recherchable des titres originaux et un
graphique d'activite tire du meme corpus. Le corpus est fige : les chiffres decrivent cet
instantane, pas l'etat courant du depot. Page autonome, sans police ni service distant,
lisible sans JavaScript ; ses styles sont isoles sous .history pour ne pas toucher les
quatre pages commerciales. La page Capacites y renvoie.
Le CHANGELOG consigne aussi la revision des dossiers de livraison et le comparatif SOC 2,
qui vivent hors de ce depot : aucun role, playbook ni reglage n'est modifie ici.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
157 lines
7.8 KiB
Markdown
157 lines
7.8 KiB
Markdown
# promo/ — pages de présentation Set-OPS
|
||
|
||
Cinq pages web **autonomes** (un seul fichier chacune, aucun asset externe, aucune
|
||
dépendance réseau) : quatre pages de présentation liées par la barre de navigation,
|
||
et une chronique éditoriale accessible depuis la page Capacités.
|
||
|
||
| 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 ?* |
|
||
| `histoire.html` | lecteur, contributeur, futur exploitant | *Comment ce moteur s'est-il construit, et qu'a-t-il appris ?* |
|
||
|
||
> ⚠️ **`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. |
|
||
| **`<title>`** | `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
|
||
|
||
### `histoire.html` — la chronique du dépôt
|
||
|
||
Huit chapitres racontent les décisions et les épreuves consignées entre le 24 juin
|
||
et le 17 septembre 2026. Le corpus est **figé au commit `05b85eb`** : 641 commits
|
||
accessibles depuis cette révision, fusions comprises, avec leurs dates d'auteur.
|
||
Les chiffres décrivent cet instantané, pas l'état courant du dépôt.
|
||
|
||
Les sources de chaque chapitre ouvrent le titre original, la date, l'identifiant
|
||
complet et la commande `git show` correspondante. L'archive intégrée permet de
|
||
rechercher les 641 titres et de filtrer par mois, sans réseau. Le récit, le graphique
|
||
et les réserves restent lisibles sans JavaScript ; la recherche et les détails
|
||
interactifs nécessitent JavaScript.
|
||
|
||
La page conserve la marque, les liens de navigation et la palette nocturne, avec une
|
||
composition éditoriale propre. Ses styles sont isolés sous `.history` : ils ne
|
||
modifient pas les sélecteurs communs aux quatre pages commerciales. Elle comprend
|
||
une mise en page mobile, une feuille d'impression et le respect du mouvement réduit.
|
||
|
||
Pour prolonger cette chronique, choisir explicitement une nouvelle révision, relire
|
||
les commits concernés et mettre à jour ensemble le récit, le JSON `commit-data`,
|
||
le graphique journalier, les compteurs, les périodes et le lien de la page Capacités.
|
||
Ne pas remplacer les résultats historiques par des affirmations sur la flotte actuelle.
|
||
|
||
### Ouvrir les pages
|
||
|
||
```bash
|
||
xdg-open promo/histoire.html
|
||
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.).
|