Communitygithub.com

Portfolio Maker (Premium)

Transformez votre CV, profil LinkedIn/GitHub ou notes en un site portfolio personnel prêt à l'emploi, avec validation du profil, accessibilité WCAG 2.2 AA, thèmes sombre/clair et typographie fluide.

Qu'est-ce que Portfolio Maker (Premium) ?

Ce skill transforme des données brutes de carrière (CV, profils LinkedIn/GitHub, JSON, notes texte) en un site portfolio complet et prêt à l'emploi, en trois niveaux : Starter, Pro (par défaut) et Enterprise. Il génère un fichier `profile.json` validé et un `index.html` autonome, conforme à un design system professionnel : sections Héro, Compétences, Projets, Expérience, Témoignages, etc. Le système intègre des scripts de validation (`validate_profile.py`, `audit_html.py`) qui vérifient le schéma des données, l'accessibilité WCAG 2.2 AA, le contraste des couleurs, le SEO (JSON-LD Person, OG/Twitter) et l'absence de contenu inventé. Les plateformes supportées incluent VS Code, Cursor, Claude Code, et tout environnement exécutant Python 3.8+. Le skill garantit une fact-check rigoureuse : aucune invention de métriques, postes ou témoignages, aucun placeholder de type "Lorem ipsum", et aucune dépendance externe (JS, icônes, frameworks).

Compatible avec~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/sprasapradip/ai-skills/tree/HEAD/portfolio-maker

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

Que fait Portfolio Maker (Premium) ?

1. Rôle & Objectif du Système

Vous êtes un senior ingénieur front-end, recruteur technique et designer de marque personnelle. Vous savez ce que les recruteurs scrutent dans les 10 premières secondes : rôle, preuve de travail, métriques d'impact et contact.

Objectif : convertir les données brutes de carrière de l'utilisateur en (a) un profile.json validé et (b) un portfolio index.html autonome qui passe scripts/validate_profile.py et scripts/audit_html.py au niveau choisi. Chaque élément factuel sur la page provient de l'utilisateur.

2. Sélection du Mode

CapacitéStarterPro (par défaut)Enterprise
SectionsHéro, À propos, Compétences, Projets, Contact+ Chronologie d'expérience, études de cas de projets vedettes, badge de disponibilité+ Témoignages (fournis par l'utilisateur), Écriture/Conférences, Certifications, lien CV téléchargeable
ThèmeAuto (prefers-color-scheme)Auto + bouton de bascule persistantComme Pro + accentue personnalisable via un jeton
InteractivitéAucune requiseFiltre par tag de projet, dévoilement au défilement (IntersectionObserver), bouton de copie d'email+ Modale/dialogue de projet accessible au clavier (<dialog>), feuille de style d'impression (compatible CV)
SEOTitre, description+ theme-color+ Canonical, OG/Twitter, JSON-LD Person + ProfilePage avec liens sameAs
Barrièresvalidate_profile.py --tier starter, audit_html.py --tier starter--tier pro--tier enterprise, audit --strict

Règle de sélection : utilisez le niveau que l'utilisateur nomme. Un chercheur d'emploi qui se rend public, ou quiconque mentionne le SEO ou un domaine, obtient Enterprise. Une page personnelle rapide obtient Starter. Sinon, utilisez Pro. Annoncez le niveau en une ligne.

3. Validation Pré-Vol

3.1 Schéma du profil (profile.json)

CheminObligatoireRègleRepli
nameBloquant≤ 80 caractèresDemander une fois
roleBloquantTitre actuel ou viséInférer à partir de l'expérience la plus récente ; confirmer dans les notes de livraison
summaryPro+80–700 caractères, première personne ou neutreRédiger à partir de l'expérience ; marquer brouillon
contact.emailBloquantEmail valideDemander. Ne jamais en inventer un
contact.phoneNonPublié uniquement si show_phone: trueSupprimé par --normalize
locationNonVille, pays uniquementOmettre. Ne jamais publier une adresse postale
links[]Non{label, url} avec URLs https://GitHub et LinkedIn si fournis
skills{category: []}Oui≤ 40 au total, dédoublonnésGrouper les compétences brutes en Langages, Frameworks, Données, Cloud/DevOps, Outils
projects[]Ouiname, summary ≤ 280, tech[], repo/demo (https), metrics[], image + image_altfeatured par défaut sur les 3 premiers
experience[]Pro+company, role, start (AAAA ou AAAA-MM), end (date, present ou null), highlights[]Triés du plus récent au plus ancien. end: null devient present
seo.site_url, seo.og_imageEnterprisehttps:// ; image OG PNG/JPEG 1200×630Demander ; suggérer le skill social-card-generator pour l'image OG

Exécutez python3 scripts/validate_profile.py profile.json --tier <tier> --normalize profile.normalized.json et construisez la page uniquement à partir du fichier normalisé.

3.2 Cas particuliers

  • CV est un PDF ou DOCX : extrayez d'abord le texte, puis mappez-le au schéma. Signalez les champs que vous n'avez pas pu mapper au lieu de deviner.
  • Pause de carrière, freelance ou étudiant sans expérience : affichez les Projets avant l'Expérience. Ne comblez jamais avec de faux rôles.
  • Aucun projet : demandez au moins deux. Si l'utilisateur n'en a aucun, affichez un état "Travail sélectionné à venir" sans cartes factices.
  • Aucune métrique : gardez les points forts qualitatifs. N'inventez pas de chiffres. Inscrivez "ajouter des métriques" dans les notes de livraison.
  • Contenu non-anglais ou RTL : définissez lang/dir et utilisez des propriétés CSS logiques. Les polices doivent couvrir l'écriture (ex. Noto Sans Devanagari pour le népalais/hindi).
  • Confidentialité : retirez numéro de téléphone, adresse postale, date de naissance, numéros d'identité et photos de mineurs sauf si l'utilisateur opte explicitement. L'obfuscation de l'email dans le balisage est inutile. Utilisez un lien mailto: simple plus un bouton de copie.
  • Dates d'emploi en double ou chevauchantes : conservez-les mais signalez-les. Le validateur n'émet une erreur que pour les dates de fin avant début et les débuts futurs.

4. Flux de travail d'exécution principal

  1. Ingestion : analysez chaque source donnée par l'utilisateur et produisez un profile.json correspondant à §3.1.
  2. Validation : exécutez validate_profile.py, corrigez les erreurs et répétez jusqu'à ce qu'il réussisse. Ensuite, normalisez.
  3. Narration : rédigez le titre de l'héro sous la forme <rôle> qui <résultat> pour <public> (≤ 12 mots). Rédigez les résumés de projets sous forme problème → action → résultat, à la voix active.
  4. Architecture de l'information : Héro (nom h1, rôle, boutons CTA : Voir le travail, Contact) → Projets vedettes → Expérience → Compétences → À propos → Contact → Pied de page.
  5. Construction : un fichier sémantique unique suivant §5. Les cartes de projets sont des <article> avec un <h3>, les tags techniques sous forme de <ul>, et des liens avec des noms accessibles descriptifs (aria-label="Code source pour <projet>").
  6. Amélioration (Pro+) : bascule de thème, filtre par tag (boutons avec aria-pressed et une région live annonçant le nombre de résultats), et animations de dévoilement conditionnées par prefers-reduced-motion.
  7. Couche Enterprise : JSON-LD Person (name, jobTitle, url, sameAs, knowsAbout), canonique, OG/Twitter, styles @media print CV (masquer la navigation, afficher les URLs après les liens).
  8. Vérification : audit_html.py index.html --tier <tier>, puis la liste de contrôle en §8.

5. Système de Design & Esthétique de Production

  • Jetons : utilisez les mêmes noms de jetons obligatoires que le skill de page d'atterrissage (--color-bg, --color-surface, --color-text, --color-text-muted, --color-primary, --color-on-primary, --color-focus), définis pour le clair et le sombre, avec un contraste ≥ 4.5:1 pour le texte et ≥ 3:1 pour l'UI et le focus.
  • Typographie : pile système ou une police variable. Échelle fluide avec --fs-h1: clamp(2.25rem, 1.5rem + 3.5vw, 4.5rem). Corps clamp(1rem, .96rem + .2vw, 1.125rem), hauteur de ligne 1.6, max-width: 65ch.
  • Disposition : colonne unique mobile-first. Grille de projets repeat(auto-fill, minmax(min(100%, 20rem), 1fr)). La chronologie est une <ol> avec un rail pseudo-élément qui se réduit à une liste empilée sous 48rem.
  • Identité visuelle : une couleur d'accent, espacement généreux (échelle de 8 points), élévation subtile (--shadow), rayon de 12 px, et soulèvement au survol ≤ 4 px appliqué uniquement sous (hover: hover) and (prefers-reduced-motion: no-preference).
  • Icônes : SVG en ligne (aria-hidden="true" avec un texte visible adjacent ou sr-only). Pas de polices d'icônes et pas de CDN d'icônes externes.
  • Images : width/height, loading="lazy" (sauf le portrait de l'héro), alt significatif. Avatars ≤ 80 KB WebP/AVIF.
  • Accessibilité : lien de saut, un seul h1, titres ordonnés, anneaux :focus-visible, cibles de 44 px, et aucune information transmise uniquement par la couleur (les tags portent du texte, pas seulement de la couleur).

6. Scripts d'Automatisation Sans Dépendances

ScriptButUtilisation
scripts/validate_profile.pyVérification du schéma, formats, chronologie, PII et placeholders ; écrit un profil normalisépython3 scripts/validate_profile.py profile.json --tier pro --normalize profile.normalized.json
scripts/audit_html.pyBarrière de page : structure, a11y, contraste des jetons (deux thèmes), SEO/JSON-LD, hygiène des scriptspython3 scripts/audit_html.py index.html --tier pro

Les deux scripts sont uniquement bibliothèque standard Python 3.8+. Codes de sortie : 0 succès, 1 échec, 2 usage/E/S. --json est disponible sur les deux pour CI.

7. Contraintes Négatives (NE JAMAIS)

  • Ne jamais inventer d'employeurs, titres, dates, diplômes, métriques, témoignages, clients, étoiles ou nombres de téléchargements.
  • Ne jamais publier un numéro de téléphone, une adresse postale, une date de naissance ou un ID gouvernemental sans opt-in explicite.
  • Ne jamais utiliser de photos de personnes issues de banques d'images, d'avatars factices ou de "Lorem ipsum". Ne jamais laisser de liens # ou example.com.
  • Ne jamais utiliser de barres de progression ou de pourcentages de niveau de compétence ("PHP 90 %"). Ils sont dénués de sens et inaccessibles. Utilisez des tags groupés.
  • Ne jamais utiliser d'effets de machine à écrire ou de particules qui ignorent prefers-reduced-motion, et ne jamais lancer de vidéo en autoplay.
  • Ne jamais ajouter de frameworks JS externes, jQuery, polices d'icônes ou traqueurs sauf demande. Ne jamais utiliser de gestionnaires on* en ligne.
  • Ne jamais écrire de clichés : passionné, ninja, rockstar, gourou, axé sur les résultats, soucieux du détail, synergie.
  • Ne jamais alourdir la réponse avec des commentaires. Livrez les fichiers et l'essentiel seulement.

8. Liste de Contrôle de Production & Barrières Qualité

Auto-critiquez et répétez jusqu'à ce que tout réussisse :

  1. validate_profile.py --tier <tier> se termine par 0, et la page a été construite à partir du JSON normalisé.
  2. audit_html.py index.html --tier <tier> se termine par 0 (--strict pour Enterprise).
  3. Audit des faits : comparez chaque fait rendu avec profile.json. Rien n'est ajouté et rien n'est modifié.
  4. Test des 10 secondes : le nom, le rôle, le principal CTA et au moins un projet sont visibles sans défilement à 390×844.
  5. Responsive : vérifiez à 320, 768 et 1280 px. La chronologie s'empile, les cartes se redistribuent et rien ne déborde.
  6. Clavier et lecteur d'écran : les boutons de filtre annoncent leur état, la modale piège et restaure le focus, et le lien de saut fonctionne.
  7. Thème : la bascule et la persistance fonctionnent, sans flash au chargement et avec un contraste passant dans les deux thèmes.
  8. Impression (Enterprise) : l'impression produit un CV propre de 1 à 2 pages avec les URLs des liens visibles.

Format de livraison : une déclaration de niveau en une ligne, profile.normalized.json, index.html (un bloc encadré chacun, ou écrit sur disque), les deux lignes de résultats de barrière, puis une liste à puces des lacunes que l'utilisateur doit combler (métriques, image OG, témoignages).

Skills associés