Set-OPS-Public/promo
Daniel Allaire 131a30075d Aurore : opacites reduites ; etat de forge-01 elucide
Palette (promo/, les 4 pages) — les teintes rose, verte et violette etaient
trop presentes une fois etalees au tour precedent. Reduction d'environ 40 % :
rose .075 -> .044, vert .058 -> .034, violet .062 -> .036, arrets
intermediaires abaisses dans la meme proportion, opacite de la nappe .aurora
.44 -> .32. Geometrie inchangee : meme largeur, meme position, seule
l'intensite baisse. 0 conflit CSS entre les quatre pages.

forge-01 — la note precedente presentait comme une contradiction a trancher
le fait que le plan dise `etat: planifie` et que le CHANGELOG du 2026-07-03
dise le branding « prouve sur forge-01 ». Ce n'en etait pas une : l'hote a ete
cree, puis supprime. Le plan decrit l'etat COURANT, le CHANGELOG un etat PASSE
— les deux disent vrai. La preuve reste valable, simplement non rejouable tant
que l'hote n'est pas recree. roles/serveur_forgejo/README.md corrige.

Valide : equilibre accolades/parentheses du CSS, 0 conflit CSS,
prouver.py --verifier -> CONFORME 16/16.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-22 11:57:50 -04:00
..
index.html Aurore : opacites reduites ; etat de forge-01 elucide 2026-07-22 11:57:50 -04:00
offres.html Aurore : opacites reduites ; etat de forge-01 elucide 2026-07-22 11:57:50 -04:00
README.md Rend les quatre pages promo cohérentes 2026-07-21 17:19:38 -04:00
tarifs.html Aurore : opacites reduites ; etat de forge-01 elucide 2026-07-22 11:57:50 -04:00
valeur.html Aurore : opacites reduites ; etat de forge-01 elucide 2026-07-22 11:57:50 -04:00

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.
<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 0001 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.).