Install
$ agentstack add skill-littlpinguin-marketing-cockpit-template-carousel ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
carousel — carrousels LinkedIn brand-strict {{COMPANY_NAME}}
Tu construis des carrousels LinkedIn sous forme de PDFs multipages 1080×1350 portrait. Résultat attendu : niveau graphiste expert, pas un gabarit générique. Cette skill codifie tout ce qui a été appris en production pour qu'aucune règle ne soit redécouverte.
Étape 0 — Doctrine de marque (OBLIGATOIRE)
Avant le moindre plan de slides :
- Charger
01-brand/checklist-pre-composition.md— règles de voix, anti-style-IA, typographie carrousels (pas de point final sur les titres, plancher 22px), assets, réutilisation. - Charger
01-brand/voice.md+01-brand/style-guide.md— voix, vocabulaire, tokens visuels. - Consulter
01-brand/assets/index.mdet lister les assets pertinents AVANT d'improviser un visuel. Un asset existant se réutilise, il ne se régénère pas. Ne jamais se fier au nom brut d'un fichier : se fier à sa fiche dans l'index. - Consulter
_templates/inventory.md+ les carrousels passés de06-graphic-design/outputs/: repartir du plus récent validé, pas de zéro. - Charger
01-brand/design-anti-generique.md— doctrine design anti-générique : marqueurs du look IA interdits par défaut (emojis-icônes, excès d'animation, faible densité), checklist de pré-livraison.
Ne jamais produire sans. La copy des slides (hook, titres, légendes, finale) passe le filtre anti-style-IA intégral : aucun parallélisme négatif (« pas X, mais Y »), aucun mot IA mort, pas de tiret cadratin, pas de hype. Court, spécifique, une vraie position.
Quand l'utiliser
- L'utilisateur demande un carrousel LinkedIn / des slides LinkedIn / un post carrousel
- Tu illustres un post LinkedIn long-format avec un PDF document attaché
- Livrable final = PDF prêt à uploader (LinkedIn → « Add a document »)
Présentation projetée en réunion (1920×1080, navigation interactive HTML) → slides. Visuel isolé (image carrée, hero web) → image-generation.
Workflow obligatoire
- Brief court : audience LinkedIn, message-clé, copy du post (fournie par l'utilisateur), nombre de slides (8-10 typique).
- Plan de slides : 1 hook + 1 plot twist + actes/preuves + manifeste + CTA. Une ligne par slide.
- Brief visuel écrit, validé AVANT construction. Pour chaque slide : layout, texte, quel bloc porte le gradient (si la marque en a un), et :
- 3a. Passe catalogue — parcourir
01-brand/assets/index.mdet assigner un visuel porteur de sens à chaque slide (scène, icône, emblème, portrait), avec chemin exact + placement (coin alterné gauche/droite). Si une slide reste sans visuel, le justifier (data brute, manifeste typographique). Une slide « toute en texte » par défaut est un défaut, pas un choix. - 3b. Rythme (anti-monotonie) — planifier la cadence : une pause visuelle (gros chiffre ou mot-clé sur fond contrasté, bascule de fond) toutes les 2-3 slides ; varier intensité et compositions. Jamais 8 slides au même gabarit.
- Construction : HTML standalone dans
06-graphic-design/outputs/carrousel--/index.html, à partir de06-graphic-design/templates/carousel-base.html(s'il n'existe pas encore, le créer depuis le carrousel validé le plus récent et le référencer dans_templates/inventory.md). Tokens CSS en tête (palette, typo, espacement, fonts locales). - Export PDF :
python3 06-graphic-design/scripts/export-carousel-pdf.py(Playwright headless 1080×1350, rastérisation des gradients — voir plus bas). Créer le script à la première utilisation s'il manque. - Vérification visuelle : lire le PDF page par page (outil Read). Vérifier contre la checklist anti-patterns. Itérer.
- Brand-check + calendrier :
brand-checksur la copy du post + du carrousel ; mettre à jour le statut dans02-strategy/calendar/calendar.md(et {{EDITORIALCALENDARTOOL}} si configuré).
Format LinkedIn
- Dimensions : 1080×1350 px (4:5 portrait) — l'optimum du feed mobile LinkedIn (~80% du trafic).
- Livraison : PDF document multipage, max 100 MB, max 20 pages (limites LinkedIn).
- Rendu mobile : min lisible 22px source (≈ 8pt physique). Toute taille en dessous → corriger.
Échelle typographique STRICTE — non négociable
À déclarer en tête du ` (tokens + commentaire). **Aucune taille hors échelle.** Toujours déclarer font-size` explicitement à chaque niveau hiérarchique (les héritages silencieux ont déjà produit des labels à 16px).
| Rôle | Taille | Line-height | Letter-spacing | Usage | |---|---|---|---|---| | .h-xxl | 168px | 0.92 | -0.025em | Hook cover (1 slide max par deck) | | .h-xl | 124px | 0.94 | -0.022em | Titres d'impact, plot twists | | .h-l | 88px | 0.98 | -0.018em | Titres standard | | .h-m | 64px | 1.02 | -0.012em | Sous-titres | | .h-sub | 56px | 1.06 | -0.010em | Valeurs, headers tertiaires | | .num | ~300px | 0.90 | -0.03em | Chiffre héros (1 par slide data) | | .lede | 36px | 1.36 | 0 | Premier paragraphe | | .body-l | 30px | 1.42 | 0 | Texte principal | | .body-m | 28px | 1.42 | 0 | Texte secondaire | | .caption | 24px | 1.35 | 0 | Légendes, labels | | .eyebrow | 24px | 1.20 | 0.10em CAPS | Meta uppercase (parcimonieux — souvent à retirer) | | .footer | 22px | — | 0.01em | Baseline footer |
Seuil absolu : 22px.
Échelle d'espacement STRICTE
:root {
--sp-3xs: 8px; /* micro (label ↔ valeur) */
--sp-2xs: 16px; /* très petit (gap boutons) */
--sp-xs: 24px; /* petit (lignes connexes) */
--sp-sm: 32px; /* normal (eyebrow → titre) */
--sp-md: 48px; /* confortable (blocs voisins) */
--sp-lg: 64px; /* généreux (titre → contenu) */
--sp-xl: 80px; /* section (contenu → caption) */
--sp-2xl: 100px; /* hero (gaps verticaux des slides centrées) */
}
Seuil minimum : --sp-md (48px) pour tout gap entre deux blocs sémantiquement distincts. Aucune valeur hardcodée hors barème.
Palette et typographie de marque
Tokens dérivés de 01-brand/style-guide.md — jamais de hex en dur hors des tokens :
- Couleurs :
{{BRAND_COLOR_PRIMARY}}/{{BRAND_COLOR_ACCENT}}/{{BRAND_COLOR_DARK}}/{{BRAND_COLOR_LIGHT}}; gradient signature :{{BRAND_GRADIENT}}. - Police :
{{BRAND_FONT_PRIMARY}}, chargée en local (@font-facesur les woff2 de01-brand/assets/fonts/) — jamais de CDN Google Fonts dans un livrable (Chrome headless capture avant le chargement de la webfont → texte en Helvetica). - Border-radius : {{BRANDBORDERRADIUS}}.
- Interdits visuels : {{BRANDBANNEDVISUALS}}, tropes « IA » (dégradé violet→néon, cerveau-circuit, robot), glassmorphism, photos stock.
Le logo : règle absolue
On n'écrit jamais le nom de la marque au clavier dans un visuel quand un logo existe. On insère toujours le vrai logo (SVG inline, ids dédupliqués) depuis 01-brand/assets/. Vaut pour les titres et la signature de slide.
Export PDF — règles critiques (apprises en production)
Chromium rend mal certaines constructions CSS dans son pipeline PDF. Ces règles sont non négociables :
- Texte en gradient (
background-clip: text) : rendu en rectangle plein ou avec artefacts en PDF. Contournement câblé dansexport-carousel-pdf.py: chaque élément à gradient est rastérisé par screenshot Playwright (DPR×2) puis remplacé par un `aux dimensions exactes avantpage.pdf()`.
Conséquence design : le gradient ne s'applique qu'à des blocs autonomes occupant leurs propres lignes (un titre entier, une ligne dédiée, un .num). Jamais un `` gradient au milieu d'une phrase qui peut wrapper — la rastérisation casserait le flux inline. Un mot-clé en gradient = sa propre ligne de titre (c'est aussi un meilleur design).
box-shadowflou interdit : Chromium le rend en rectangle gris plein à l'export. Pour détacher une carte claire du fond :border: 1px solid rgba(0,0,0,.12)fin.- Halo/glow en élément séparé interdit (div alpha + border-radius) : rastérisé en bande grise rectangulaire. Cuire l'ambiance dans le
backgroundde la slide (radial-gradients alpha très faibles ~.05, sous un éventuel grain qui les dither). - Élément DOM à fond gradient (bouton CTA pill, badge, cadre) : rasterisé avec bords crénelés au zoom. Le rendre en SVG vecteur (gradient en `` + texte vecteur).
- SVG à
fill="url(#pattern)"ou image embarquée : rendu tronqué dans certains lecteurs (LinkedIn mobile). Pré-rastériser en PNG (Playwright,omit_background). - Rotation d'un cadre photo : jamais
transform: rotate()CSS sur un div (rasterisation → bords en escalier) ; incliner par une rotation vecteur à l'intérieur du SVG (`), photo en` embarqué pleine résolution. - Photos : copies redimensionnées à ~1800-2400px sur le grand côté, qualité ~92 dans
outputs/.../photos/— jamais les originaux pleine résolution (PDF trop lourd) ni sous 2000px (flou au zoom :page.pdfembarque la résolution source telle quelle). Vérifier avecpdfimages -list. - Zone basse ~12% de la slide : la barre du lecteur PDF mobile LinkedIn la recouvre. Aucun contenu critique (visage, tampon, CTA) dans cette zone ; un élément peut y déborder de façon sacrificielle, pas son point focal.
Recette minimale du script d'export (à créer dans 06-graphic-design/scripts/export-carousel-pdf.py si absent) : Playwright Chromium headless, viewport 1080×1350, device_scale_factor=2 ; screenshot de chaque élément [data-raster] (ou classe gradient) et remplacement DOM par ` ; puis page.pdf(width="1080px", height="1350px", printbackground=True, prefercsspagesize=True) avec page-break-after câblé sur chaque .page`.
Précision graphique — grille de repère OBLIGATOIRE
Les alignements comptent autant que le contenu. Jamais « à l'œil » :
- Overlay de grille activable dans le HTML (lignes horizontales tous les 50px + numéros + axe central vertical) pour MESURER puis positionner ; le retirer pour le livrable final.
- Un titre posé dans une forme conteneur doit être centré dans la masse de la forme (jamais calé en haut) : mesurer le vide au-dessus et en dessous, égaliser.
- Aucun mot orphelin en fin de bloc (titre, lede, CTA) : contrôler explicitement les sauts de ligne (lignes de titre voulues, lede en liste de lignes,
white-space: nowrapsur les noms propres). - Aucun mot composé coupé en fin de ligne : tiret insécable U+2011.
- Vérifier à la grille, slide par slide, avant livraison : centrages, marges, alternance gauche/droite, débordements, chevauchements.
Anti-uniformité — grammaires visuelles
Un carrousel ne doit pas ressembler au précédent. Choisir/inventer une grammaire visuelle selon le type de contenu, puis la varier :
- Famille « portrait / humain » : titres centrés, forme de marque conteneur sur cover/finale, visuels de coin, finale chaleureuse. Pour les portraits, témoignages.
- Famille « thèse / données » : grille cassée, aligné à gauche, cover plein cadre + filet, slides data en split-screen (chiffre héros ↔ caption), finale CTA plein cadre. Pour les posts marché/data.
- Famille « photo / carnet » : portée par de vraies photos (cadres de marque en SVG vecteur, alternance gauche/droite, fil conducteur graphique entre les slides).
Même palette pour toutes ; ce qui change = composition, alignement, traitement des données/photos. Pour un nouveau sujet, repartir de la famille adaptée et inventer des compositions propres.
Anti-patterns UX LinkedIn (à retirer systématiquement)
- Pas de folio « 01 / 10 » — LinkedIn affiche son propre indicateur de progression.
- Footer = le domaine seul (ex.
{{COMPANY_WEBSITE}}) — pas de « Marque · domaine » redondant. Et jamais footer domaine + bouton CTA domaine sur la même slide : sur la finale, l'URL vit dans le CTA. - Pas d'eyebrow « Acte 1 / Acte 2 » — les titres parlent d'eux-mêmes.
- Pas de point final sur les titres (
.h-*, punchlines, CTA courts). Les paragraphes (.lede,.body-*) gardent leur ponctuation. - Pas de tiret cadratin (
—) —–ou reformuler. - Pas d'emoji Unicode (💡, ✅, ✨…) — icône de marque depuis
01-brand/assets/ou générée viaimage-generation. - Pas de label sous les visuels expressifs (portraits, mascottes) — ils se lisent d'eux-mêmes.
- Flèche de progression → (droite) sur le hook, jamais ↓ (le carrousel se lit en swipe horizontal).
- Pas de taille hors échelle, pas de gap -carrousel-.md` (audience, copy du post, plan de slides + passe catalogue + rythme, validation).
- Source + export :
06-graphic-design/outputs/carrousel--/index.htmletexports/.pdf. - Calendrier : statut mis à jour dans
02-strategy/calendar/calendar.md(+ {{EDITORIALCALENDARTOOL}} si configuré).
Les assets contextuels générés restent en staging dans outputs/ ; ils ne migrent vers 01-brand/assets/ (avec fiche index.md) qu'après validation humaine.
Personnalisation par marque
{{CAROUSELSPECIFICRULES}}
Règles état de l'art (2026)
Voir docs/etat-de-lart/social-linkedin.md pour le détail sourcé :
- Le carrousel/document est le format n°1 sur LinkedIn en 2026 : 3,71 % d'engagement vs 1,80 % pour la vidéo (Metricool, 673 k posts) ; +278 % vs vidéo (Buffer, 2 M posts). L'assumer dans les recommandations de mix.
- Slide 1 = hook autonome lisible dans le feed — elle doit fonctionner seule, avant tout swipe et sans le texte du post.
- Optimiser chaque slide pour le swipe : tension, question ouverte ou série numérotée qui donne envie d'ouvrir la suivante — les swipes et saves comptent dans l'engagement « invisible » qui monte (+14 %).
- Juger la performance sur impressions, swipes et saves, pas sur les likes (en baisse structurelle de −13 %).
Skills associées
slides— présentations projetées 1920×1080 (pas pour LinkedIn)image-generation— génération d'icônes / illustrations brand-compliant (consulte d'abord01-brand/assets/index.md)social-content— copy du post qui accompagne le carrouselcopy-editing— relecture de la copybrand-check— validation finale obligatoire
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: Littlpinguin
- Source: Littlpinguin/marketing-cockpit-template
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.