# Story 5.7: Liens de Contact Secondaires
## Status
review
## Story
**As a** visiteur,
**I want** avoir des alternatives au formulaire pour contacter le développeur,
**so that** je choisis le canal qui me convient.
## Acceptance Criteria
1. Sous le formulaire, une section affiche les liens secondaires : LinkedIn, GitHub, email direct (mailto)
2. Les liens sont affichés avec leurs icônes respectives
3. Les liens s'ouvrent dans un nouvel onglet (sauf mailto)
4. La section est visuellement distincte mais cohérente avec le formulaire
5. L'adresse email est protégée contre le scraping (encodage ou JS)
## Tasks / Subtasks
- [x] **Task 1 : Ajouter la section dans contact.php** (AC: 1, 4)
- [x] Titre "Retrouvez-moi aussi sur"
- [x] Positionnement sous le formulaire (mt-16, pt-8, border-t)
- [x] Style distinct mais cohérent (bg-surface-alt, border)
- [x] **Task 2 : Ajouter les liens avec icônes** (AC: 2)
- [x] LinkedIn avec icône SVG (#0A66C2)
- [x] GitHub avec icône SVG
- [x] Email avec icône SVG (primary)
- [x] **Task 3 : Configurer les liens** (AC: 3)
- [x] `target="_blank"` + `rel="noopener noreferrer"` pour LinkedIn/GitHub
- [x] `mailto:` généré par JS pour l'email
- [x] **Task 4 : Protéger l'email** (AC: 5)
- [x] data-user et data-domain dans le HTML
- [x] initEmailProtection() dans main.js
- [x] Reconstruction du mailto au chargement
## Dev Notes
### Section à ajouter dans contact.php
```php
```
### Protection de l'Email (JavaScript)
```javascript
// assets/js/main.js (ajouter)
/**
* Protection de l'email contre le scraping
* Reconstruit l'adresse email à partir de data-attributes
*/
function initEmailProtection() {
const emailLink = document.getElementById('email-link');
if (!emailLink) return;
const user = emailLink.dataset.user;
const domain = emailLink.dataset.domain;
if (user && domain) {
const email = `${user}@${domain}`;
emailLink.href = `mailto:${email}`;
// Optionnel : afficher l'email au hover
emailLink.title = email;
}
}
document.addEventListener('DOMContentLoaded', () => {
initEmailProtection();
});
```
### Alternative : Encodage HTML
```php
= $encodedEmail ?>
```
### Liens à Configurer
| Plateforme | URL | Notes |
|------------|-----|-------|
| LinkedIn | https://linkedin.com/in/votre-profil | Profil public |
| GitHub | https://github.com/votre-username | Profil public |
| Email | contact@monportfolio.fr | Via .env ou config |
### Couleurs des Icônes
| Plateforme | Couleur | Tailwind |
|------------|---------|----------|
| LinkedIn | #0A66C2 | `text-[#0A66C2]` |
| GitHub | Inherit (blanc) | `text-text-primary` |
| Email | Primary | `text-primary` |
## Testing
- [] Les 3 liens sont affichés avec leurs icônes
- [] LinkedIn et GitHub s'ouvrent dans un nouvel onglet
- [] Le lien mailto déclenche le client email
- [] L'email n'apparaît pas en clair dans le HTML source (data-attributes)
- [] Le JS reconstruit correctement le lien mailto
- [] Les hover states fonctionnent (border-primary/50)
- [] La section est visuellement distincte (border-t, mt-16)
## Dev Agent Record
### Agent Model Used
GPT-5 Codex
### Implementation Plan
- Implémenter les tâches 1 à 4 dans l’ordre avec tests à chaque étape.
- Ajouter section et protection email via main.js.
### File List
| File | Action | Description |
|------|--------|-------------|
| `pages/contact.php` | Modified | Section liens secondaires (LinkedIn, GitHub, Email) |
| `assets/js/main.js` | Modified | Ajout initEmailProtection() |
| `tests/contact-links.test.php` | Added | Tests liens secondaires |
| `tests/run.ps1` | Modified | Ajout du test contact-links |
### Completion Notes
- Section "Retrouvez-moi aussi sur" avec 3 liens
- LinkedIn : https://linkedin.com/in/celian-music
- GitHub : https://github.com/skycel
- Email protégé : data-user/data-domain + reconstruction JS
- Icônes SVG avec couleurs appropriées (LinkedIn bleu, GitHub inherit, Email primary)
- Hover state : border-primary/50
- Tests : `powershell -ExecutionPolicy Bypass -File tests/run.ps1`
### Debug Log References
Aucun problème rencontré.
## Change Log
| Date | Version | Description | Author |
|------|---------|-------------|--------|
| 2026-01-22 | 0.1 | Création initiale | Sarah (PO) |
| 2026-01-24 | 1.0 | Implémentation complète | James (Dev) |
| 2026-02-04 | 1.1 | Liens secondaires contact | Amelia (Dev) |