feat(correspondance): le format de lettre commerciale devient un gabarit réutilisable

Fixé avec le dossier KissMetrics du 24/08 et validé par l'opérateur : « on peut
se souvenir de ce format pour les communications avec KM et futurs
prospects/clients ». Il ne servira à rien s'il faut le reconstituer à chaque
fois — d'où un gabarit, un script, et les raisons écrites.

LE TEST DU GABARIT : la lettre du 24/08 s'en régénère à l'identique, au mot
près, vérifié par diff du texte extrait. Un gabarit qui ne reproduit pas son
propre exemple n'est pas un gabarit.

LES CHOIX, ET POURQUOI. Charter pour le texte — dessinée par Matthew Carter
pour tenir le petit corps là où d'autres se délitent — et Optima pour les
titres. Les deux incorporées au PDF : le rendu est le même chez le
destinataire. Chiffres elzéviriens, pour que les montants s'alignent au lieu de
faire des bâtons. Deux encadrés, deux usages : le gris porte une question, le
rouge sourd ce qui doit être lu en diagonale — UN SEUL par lettre, deux et plus
rien ne ressort. Les tableaux portent un <thead>, sans quoi ils perdent leur
en-tête en se coupant entre deux pages.

LE PIÈGE, consigné parce qu'il coûte une heure à qui le redécouvre : weasyprint
NE SAIT PAS rendre Apple Color Emoji. C'est un format bitmap sbix qu'il ignore,
et les trois emblèmes 🏹💻🪽 sortent en carrés vides — sans erreur, sans
avertissement. D'où correspondance/emblemes/*.png, rendus une fois pour toutes
par test/emoji2png.ts, qui passe par Chromium : lui lit la police système.

Les PNG sont incorporés en base64 À LA GÉNÉRATION, pas dans le gabarit : un
gabarit de 400 Ko dont 97 % de charabia ne se relit pas. Le PDF produit reste
autonome.

Les trois emblèmes viennent du site — « Gabriel 🪽 Radureau, pour 🏹 réussir vos
projets 💻 ». L'arc et l'ange sont dans le nom lui-même.

lettre.py proteste au-delà de deux pages : une lettre d'affaires qui déborde ne
se lit pas, et la tentation est alors de rétrécir la typographie plutôt que le
propos. C'est le propos qu'il faut resserrer.

Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
This commit is contained in:
2026-08-24 18:17:55 +02:00
co-authored by Claude Opus 5
parent 1cab6f85f7
commit 6abc437c81
7 changed files with 293 additions and 0 deletions
+79
View File
@@ -0,0 +1,79 @@
# Correspondance commerciale — le format maison
Le gabarit des lettres qu'Arcodange adresse à ses clients et prospects. Fixé le
24 août 2026 avec le dossier KissMetrics, et validé par l'opérateur : « on peut
se souvenir de ce format pour les communications avec KM et futurs
prospects/clients ».
## Produire une lettre
```bash
python3 correspondance/lettre.py corps.html sortie.pdf \
--titre "Contracts and invoices — cycles M1 to M4" \
--date "24 August 2026" --prenom Evan \
--destinataire "Evan Sforzo" --fonction "Chief Executive Officer" \
--societe "Kissmetrics Inc." \
--adresse "2850 34th Street North, 307 — St. Petersburg, Florida 33713 — United States" \
--copie "Hendrik Rootering" \
--pied "Arcodange × Kissmetrics Inc. — 24 August 2026"
```
`corps.html` ne porte que le corps — les `<h2>`, `<p>`, `<table>`, encadrés.
L'en-tête, le bloc destinataire, la signature et le pied viennent du gabarit.
Sans `--copie`, la ligne « cc » disparaît entièrement.
Le script vérifie le nombre de pages et proteste au-delà de deux : une lettre
d'affaires qui déborde ne se lit pas. Resserrer le CORPS, jamais la typographie.
## Les choix, et pourquoi
**Charter pour le texte, Optima pour les titres.** Charter a été dessinée par
Matthew Carter pour tenir le petit corps là où d'autres se délitent — elle reste
lisible à l'écran comme sur papier bon marché. Optima lui donne un contrepoint
humaniste sans raideur. Les deux sont incorporées au PDF : le rendu est le même
chez le destinataire, quelle que soit sa machine. Chiffres elzéviriens activés,
pour que les montants dans le texte s'alignent au lieu de faire des bâtons.
**Deux encadrés, deux usages.** Le gris (`.calme`) porte une question ou une
demande — elle ne doit pas se noyer dans un paragraphe. Le rouge sourd
(`.encart`) porte ce qui doit être lu même en diagonale. **Un seul par lettre** ;
deux, et plus rien ne ressort.
**Les tableaux portent un `<thead>`.** Sans lui, un tableau qui se coupe entre
deux pages perd son en-tête et devient illisible. Avec, il se répète.
**Les trois emblèmes 🏹💻🪽** viennent du site — *« Gabriel 🪽 Radureau, pour 🏹
réussir vos projets 💻 »*. L'arc et l'ange sont dans le nom lui-même. Ils
figurent en marque sous le mot-marque, et l'aile seule entre prénom et nom dans
la signature.
## Le piège des emblèmes
> [!IMPORTANT]
> **`weasyprint` ne sait pas rendre Apple Color Emoji.** C'est un format bitmap
> `sbix` qu'il ignore : les trois emblèmes sortent en carrés vides, sans erreur
> ni avertissement. Vérifié le 24/08/2026.
D'où `emblemes/*.png`, rendus une fois pour toutes par `test/emoji2png.ts`, qui
passe par Chromium — lui lit la police système. Pour les régénérer ou en ajouter :
```bash
cd test && deno run -A emoji2png.ts ../correspondance/emblemes 🏹 💻 🪽
```
Les PNG sont incorporés en base64 **à la génération**, pas dans le gabarit : un
gabarit de 400 Ko dont 97 % de charabia ne se relit pas. Le PDF produit, lui,
reste autonome.
## Ce que le format ne fait pas
Il ne remplace pas le message d'accompagnement. La lettre est le document qu'on
joint ; le mot sur Slack ou par courriel reste séparé, plus court, et dit
pourquoi on écrit. Les deux doivent rester d'accord — vérifier que la lettre ne
mentionne aucune pièce absente de l'envoi.
## Exemple de référence
`1_DOCUMENTS/prospects/KissMetrics/relances/2026-08-24_lettre_KM.html` — la
lettre du 24/08/2026, dont ce gabarit est extrait. Elle se régénère à
l'identique, au mot près, ce qui est le test du gabarit.