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
Binary file not shown.

After

Width:  |  Height:  |  Size: 166 KiB