Palette (promo/, les 4 pages) — ajoute --rose:#ff6fc4 (frange magenta) et
--vert:#5cff9d (vert fluo), uniquement dans les DÉGRADÉS FONCÉS : fond fixe du
corps, nappe .aurora dérivante, filets .rule. Opacités de 5,5 % à 8,5 %, une
teinte et non un motif. Le vert entre par la gauche et le rose sort par la
droite, comme une vraie aurore. --aurora (texte et boutons) est inchangé :
l'identité de marque ne bouge pas. Appliqué identiquement aux quatre fichiers,
0 conflit CSS après coup.
Thème Forgejo (alliance.css, 29 → 118 lignes) — la feuille étant injectée par
templates/custom/header.tmpl sur toutes les pages, le wiki est couvert sans
feuille distincte. Réorganisée en deux sections de risque explicite :
§1 Variables — couleurs officielles + ciel nocturne. Sûr, résiste aux
mises à jour. ÉPROUVÉ sur forge-01 (CHANGELOG 2026-07-03).
§2 Décor — fond aurore, filet sous les titres, citations, tableaux et code
en ligne de .markup. Fragile (classes internes). JAMAIS RENDU.
Supprimer §2 ramène au thème sobre. Le ciel nocturne ne s'applique qu'aux
thèmes sombres, pour ne pas casser le thème clair.
docs/theme-forgejo-hors-flotte.md — pose manuelle sur une instance Forgejo non
gérée par Set-OPS (la forge historique qui héberge ce dépôt et son wiki).
Forgejo n'ayant aucun réglage web pour le CSS, il faut déposer la feuille sur
le serveur. La procédure ne duplique aucun fichier : elle pointe vers ceux du
rôle. Inclut la détection du répertoire custom, un garde-fou pour ne pas
écraser un header.tmpl existant (ajout de ligne), la vérification curl et la
marche arrière.
Corrige deux affirmations fausses de ma part :
- « thème jamais rendu par un Forgejo réel » était faux pour §1, éprouvée.
Le statut est désormais donné section par section.
- Contradiction consignée sur forge-01 : le plan la dit `etat: planifie`, le
CHANGELOG 2026-07-03 dit le branding « prouvé sur forge-01 ». Les deux ne
peuvent pas être vrais ; l'écart est écrit dans le README du rôle, à trancher.
Validé : équilibre accolades/parenthèses du CSS, 0 conflit CSS entre les quatre
pages, lien de doc résolu, ansible-lint 0 échec sur 485 fichiers,
prouver.py --verifier → CONFORME 16/16.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
||
|---|---|---|
| .. | ||
| index.html | ||
| offres.html | ||
| README.md | ||
| tarifs.html | ||
| valeur.html | ||
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.htmlest 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 :
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
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.).