Skip to content

feat: profil professionnel, page publique et carte à partager (#159) - #162

Merged
algabah2004 merged 2 commits into
mainfrom
159-profil-pro-api
Nov 14, 2026
Merged

algabah2004 merged 2 commits into
mainfrom
159-profil-pro-api

Conversation

@algabah2004

Copy link
Copy Markdown
Owner

Closes #159

Le profil ne montrait que GitHub. Pour qu'un client ou un coéquipier fasse confiance, il manquait l'identité professionnelle, et un moyen de partager son profil (vote du public du 17 au 20).

Ce qui a été fait

API et contrat (profils.yaml)

  • Nouveaux champs déclarés : titre, linkedin, siteWeb, langues (ISO 639-1, 8 max), competencesPhares (3 max), realisations (6 max : titre, rôle, description, technologies, lien, année).
  • Migration horodatée V20261114_1725__profil_pro.sql (règle de docs: un module par personne, territoires et CODEOWNERS (#157) #160).
  • Validation stricte : liens http(s) seulement (jamais javascript: ni data:), LinkedIn uniquement sur linkedin.com, langues et compétences normalisées, tout ou rien comme avant.
  • Un profil publié se lit sans compte (GET /api/profils/{id}, security: []) : c'est la cible du lien partagé et du QR code. La recherche (/api/profils) et les preuves restent réservées. Jamais l'e-mail.

Front

  • FicheProfil.vue : l'affichage commun à « Mon profil » et à la page publique. En-tête avec photo, titre, drapeau SVG (flag-icons, MIT : Windows n'affiche pas les drapeaux emoji), disponibilité, liens, langues, 3 compétences mises en avant.
  • Réalisations hors Jamii, étiquetées « Déclaré » ; seuls les projets Jamii sont vérifiés. Ça prolonge le principe « chaque point se vérifie ».
  • Formulaire : titre, LinkedIn, site, langues (pastilles), compétences phares, réalisations.
  • Page publique /p/:id, lisible sans compte, avec une invitation à créer son profil.
  • « Partager ma carte » : image 1200 × 630 dessinée en canvas (photo, nom, titre, drapeau, compétences, chiffres, QR code vers /p/:id, via uqr, MIT). Enregistrer, envoyer (partage natif sur téléphone) ou copier le lien.
  • Le texte « profil publié » dit maintenant clairement qu'il est visible par toute personne qui a le lien.

Comment c'est vérifié

  • tests API : ProfilsTest 22/22 (3 nouveaux : déclaration complète et conservée après régénération, liens dangereux et listes trop longues refusés, lecture publique sans compte mais pas la recherche), ModulesTest vert.
  • tests front : profils 13/13 (fiche publique, profil introuvable, drapeau, lien), traductions fr/en identiques, vue-tsc, build.
  • testé manuellement en local : migration appliquée, profil publié lisible sans compte (404 sinon).

Décisions et alternatives écartées

  • Drapeaux en SVG plutôt qu'en emoji : illisibles sous Windows. ?no-inline pour que les 271 drapeaux ne gonflent pas le JS (seul le drapeau affiché est téléchargé).
  • Carte en canvas natif plutôt qu'avec html2canvas : pas de dépendance lourde, rendu identique partout.
  • Pas d'envoi de photo : il faudrait un stockage de fichiers (S3 Systalink), trop risqué avant la soumission. La photo reste celle de GitHub.

Pistes d'amélioration

  • 🔴 La PR dépasse 400 lignes (≈ 1 300 hors fichiers générés) : je l'assume à la veille de la soumission, l'API et le front vont ensemble.
  • 🟡 Le module profils est maintenant à @rev22rse22 (docs: un module par personne, territoires et CODEOWNERS (#157) #160) : relecture bienvenue.
  • 💡 Balises Open Graph pour que le lien /p/:id montre la carte en aperçu sur WhatsApp et LinkedIn (rendu côté serveur nécessaire).
  • 💡 Envoi d'une photo de profil via le stockage S3 Systalink.

Outils d'IA utilisés : Claude Code (Claude Opus 5.5).

🤖 Generated with Claude Code

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Copilot AI balanced review requested due to automatic review settings November 14, 2026 17:24

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has insufficient remaining quota. Try requesting a review at a lower effort level.

@algabah2004
algabah2004 merged commit 6be0e2b into main Nov 14, 2026
7 checks passed
@algabah2004
algabah2004 deleted the 159-profil-pro-api branch November 14, 2026 17:27
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Profil professionnel : titre, liens, langues, réalisations, page publique et carte à partager

2 participants