Communitygithub.com

portfolio-kup

Crée un profil one-page montrant les compétences, la personnalité, le parcours et les orientations professionnelles d'un utilisateur à partir de son historique Claude Code (local et via SSH) + tests + entretien.

Qu'est-ce que portfolio-kup ?

Ce skill analyse l'historique réel d'utilisation de Claude Code par un développeur (fichiers locaux et machines distantes via SSH) pour générer un profil professionnel synthétique sous forme de page web unique bilingue (thaï/français, avec termes techniques en anglais). Il collecte des métriques quantitatives (nombre de prompts, heures de travail, tokens, comportements) via des scripts Python, puis évalue qualitativement les prompts pour identifier le métier probable, le niveau (junior/mid/senior), les forces et faiblesses. L'utilisateur peut passer des tests de compétences contextualisés, obtenir une estimation de salaire par recherche web, et découvrir 3 parcours professionnels adaptés avec un plan en 3 phases. Le skill inclut une phase d'entretien interactive via le skill `grilling` pour affiner les objectifs, et génère une page web responsive avec graphiques radar, barres de progression et timeline de progression. Les données sensibles (clés, tokens, emails) ne sont jamais exposées et la page affiche les salaires par défaut sous forme d'astérisques, sauf demande explicite de l'utilisateur.

Compatible avec✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Neckkup/portfolio-kup/tree/HEAD

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-kup ?

Créez le profil de l'utilisateur à partir de preuves réelles, puis générez une page web one-page bilingue (th/fr). Répondez à l'utilisateur en thaï ; les termes techniques restent en anglais.

Procédure

Suivez l'ordre · Pour toute question nécessitant une décision de l'utilisateur, utilisez AskUserQuestion · Pour les sujets riches en données, résumez d'abord dans le chat avant de les ajouter à la page.

1. Collecte de données

  1. Demandez s'il existe d'autres machines utilisant Claude Code (ssh user@host) · Si l'utilisateur les a déjà fournies dans la demande, ne demandez pas.
  2. Exécutez le script sur chaque machine (ne renvoyez que les chiffres, sans texte d'invite ni clé) :
    S=~/.claude/skills/portfolio-kup/scripts; D=<scratchpad>/pk; mkdir -p $D
    python3 $S/collect.py > $D/local.json
    ssh -o BatchMode=yes user@host python3 - < $S/collect.py > $D/host1.json
    python3 $S/merge.py $D/*.json > $D/metrics.json     # tableau récapitulatif sur stderr
    
  3. Lisez le contenu des prompts vous-même pour une évaluation qualitative (~/.claude/history.jsonl champs display, project) · Échantillonnez aléatoirement sur tous les projets/mois · Ne copiez aucune clé/token/mot de passe trouvé dans la réponse ou la page ; comptez-les uniquement.

Limites à communiquer à l'utilisateur :

  • history.jsonl ne compte que les saisies de l'utilisateur · Les périodes où l'agent travaille longtemps ne sont pas comptabilisées.
  • Les transcriptions (~/.claude/projects/**/*.jsonl) sont supprimées au-delà de cleanupPeriodDays (valeur par défaut 30 jours) · Les tokens et le temps de travail de l'IA ne couvrent donc que la période récente.
  • Pour les mois avec moins de 100 prompts (enough_data: false), les chiffres fluctuent fortement ; ne les utilisez pas pour des comparaisons.
  • Le comptage des comportements est basé sur des mots-clés ; il indique des tendances, pas une mesure précise.

2. Évaluation (réponse dans le chat)

  • Métier probable · Niveau (Junior / Mid / Senior) · Forces, faiblesses avec preuves
  • Soyez direct, ne flattez pas exagérément · Distinguez "livrable grâce à une bonne maîtrise de l'IA" de "compréhension personnelle du fond"
  • Si vous trouvez une clé/secret dans l'historique → prévenez immédiatement de la faire pivoter (indiquez le type, pas la valeur)

3. Test (si l'utilisateur veut vérifier s'il est vraiment faible)

  • 2 séries de 4 questions via AskUserQuestion · Les questions sont des situations issues du travail réel de l'utilisateur (sa stack)
  • Mélangez deux formats : symptôme → cause et explication du mécanisme sous-jacent · Les options sont de longueur équivalente, sans suggérer la réponse
  • Énoncez les règles : pas d'aide de l'IA · Si l'utilisateur ne sait pas, il répond "Je ne sais pas"
  • Corrigez chaque question avec une brève justification, puis résumez le profil (ex. symptôme 4/4, mécanisme 0/4)

4. Salaire et parcours

  • Effectuez une WebSearch de type extended avec plusieurs requêtes simultanées (TH + EN, année en cours) · Citez les sources à chaque fois
  • Distinguez AI/ML Engineer (qui crée des modèles) de AI Application Engineer (qui utilise l'IA dans des apps) · Les fourchettes sont très différentes
  • Pensez large : listez 8 à 10 métiers correspondant aux compétences + personnalité + progression (pas seulement techniques : consultant, pre-sales, formateur, produit EdTech, freelance) · Réduisez ensuite à 3 parcours les plus adaptés + maximum 5 métiers secondaires comme étiquettes · Mentionnez les métiers "pas encore adaptés" dans le chat, sans les mettre dans la page
  • Fournissez une seule recommandation claire sur la direction à prendre (en fonction des objectifs issus de l'entretien) avec un plan en 3 phases
  • Sur la page web, le salaire est affiché sous forme de * par défaut ; ne mettez les chiffres que si l'utilisateur le demande

5. Entretien

Appelez le skill grilling (ou grill-me) en posant des questions par rounds via AskUserQuestion : Raison de vouloir ce parcours · Expérience avec des personnes/clients en dehors du chat · Calendrier · Projets existants (personnels ou entreprise) · Temps libre par semaine · Définition de la réussite · Critères pour continuer/arrêter

  • Si les réponses se contredisent ou ne répondent pas à la question → reposez la question
  • Signalez directement les schémas observés (ex. répond "tout prendre" quand on ne force pas un choix) · Indiquez les points de désaccord, mais laissez l'utilisateur décider
  • Terminez par un résumé de la compréhension commune, puis attendez la confirmation avant d'éditer la page

6. Création de la page web

  1. Copiez templates/onepage.html dans le scratchpad puis modifiez uniquement le JSON dans <script id="profile"> · Chaque texte est un objet {"th":…,"fr":…}
  2. Artifact → quickstart (intent other) la première fois, puis publiez · icône profile
  3. Modifiez selon les retours avec Edit + publiez le même fichier (même URL)

Règles de conception (issues des retours utilisateurs réels · ne pas enfreindre)

SujetÀ faireÀ ne pas faire
Structure de pageColonne unique, lecture de haut en bas · Identité → 01 Compétences → 02 Mode de travail → 03 Progression → 04 Perspectives · Largeur jusqu'à 1600px selon l'écranSidebar latérale · Panneau foncé différent des autres · Largeur fixe étroite
Perspectives (04)Boîte "Recommandation" : 1 conseil + 1 phrase de raison + plan 3 phases · Cartes 3 parcours : seulement Préparation / Pourquoi ça convient / À combler · Badge ★ Recommandé en haut à droite de la carte choisie · "Peut aussi faire" en badge une ligne · "Que faire en premier" ≤4 élémentsTableau de métiers long · Badges d'étape / premier pas / salaire dans les cartes · Infos redondantes avec le plan 3 phases (l'utilisateur dit "brouillon")
CouleursTous les panneaux utilisent une seule palette (fond blanc, bordure fine) · Bleu = soft/amélioration · Or = dur/objectif · Rouge = attention/maintenantMélange de plusieurs tons
Avertissements sur les sourcesBoîte tout en haut listant toutes les sources + ce qui n'est pas compté + "Évaluation par IA, pas une certification"Sources cachées en bas de page
LangueThaï par défaut + bouton Th/Fr · Utilisez they/them ou évitez les pronoms en françaisDeviner le genre à partir du prénom
Compréhensible par un non-initiéLangage simple · Comparaisons comme "moitié", "double", "un tiers"Noms de projets internes · Numéros de questions d'entretien (Q20) · Chiffres bruts sans unité ("43 fois", nombre de prompts) · Jargon comme "502 Traefik"
CompétencesRadar + badges 3 niveaux (Fort / Moyen / À renforcer) dans la section Compétences · Soft et Hard côte à côte, liste numérotée 01– avec badge de preuve · Hard inclut le nom de l'outilBarres de progression à côté des traits de personnalité (l'utilisateur ne comprend pas ce que "plein" signifie) · Cartes de hauteur inégale
PersonnalitéNommez les soft skills comme les RH · Persona : un nom + une phrase · Style en barres bipolaires · "Traits à surveiller" dans une boîte séparéeIntégrer les résultats du test comme un panneau dans la page (l'utilisateur les a demandés retirés)
Heures de travailGraphique des heures commençant à 06:00 · Jours de la semaine en % du total, avec une ligne expliquant ce qu'est le %Axe des ordonnées avec des comptes
ProgressionÉchelle cliquable, une étape à la fois · Hauteur = niveau de compétence (nom du niveau sur la barre) · Badge "▼ Vous êtes ici" · Chaque étape : Réalisé / Encore des lacunes / Point de bascule · "Comparé à l'étape précédente" seulement pour les mois avec suffisamment de données · Token uniquement pour les étapes avec transcription · Dernière étape = objectif (ligne pointillée dorée)Graphique du nombre de prompts par mois (l'utilisateur ne comprend pas) · Tous les détails de chaque étape affichés en même temps
Salaire* + explication dans la boîte d'avertissement et en bas de pageChiffres de salaire sans demande
ConfidentialitéPas de clé, IP, hostname, email · Chiffres négatifs rédigés sans humiliation ("a déjà collé une clé là où il ne fallait pas")Publier/pusher la page de profil réelle publiquement sans demander

Fichiers dans le skill

  • scripts/collect.py · Collecte les chiffres d'une seule machine (prompts mensuels, comportements, heures/jours, tokens, timestamps) · N'envoie pas de texte
  • scripts/merge.py · Fusionne plusieurs machines → metrics.json (mensuel, enough_data, % heures à partir de 06:00, % jours, heures de travail manuel vs IA, tokens)
  • templates/onepage.html · Page web rendue à partir d'un seul JSON · Les données du fichier sont un exemple fictif

Correspondance metrics → contenu de la page

metrics.jsonUtilisé où
hours_pct_from_6am[].pcthoursPctFrom6am (24 valeurs, de 06:00)
weekday_pctweekdayPct
late_night_pcthoursNote ex. "près d'un tiers du travail après 21h"
monthly[*] avec enough_datastages[i].compare.items (comparaison avec étape précédente) · stages[i].peak/hot mois le plus chargé
tokens[*]stages[i].tokens (uniquement les mois concernés) · Proportion de cache read
hands_on_hours / ai_working_hoursRésumé dans le chat "~X h/semaine de travail manuel · ~Y h/semaine de travail IA"
secrets_pasted > 0Alerte dans le chat + "Traits à surveiller" + premier élément de acts

Partie JSON 04 dans le template

  • rec · title, reason, phases[] (when, t, d) recommandation en 3 phases
  • paths[] · 3 parcours : tag, title, ready (0–100), fits, gap, pick: true pour le parcours recommandé, gold: true pour le parcours indépendant/founder
  • also[] · Noms des métiers secondaires ≤5 (texte simple)
  • acts[] · ≤4 éléments (t, d)

Skills associés