# Story 5.7: Liens de Contact Secondaires
## Status
Ready for Dev
## 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
- [] **Task 1 : Ajouter la section dans contact.php** (AC: 1, 4)
- [] Titre "Retrouvez-moi aussi sur"
- [] Positionnement sous le formulaire (mt-16, pt-8, border-t)
- [] Style distinct mais cohérent (bg-surface-alt, border)
- [] **Task 2 : Ajouter les liens avec icônes** (AC: 2)
- [] LinkedIn avec icône SVG (#0A66C2)
- [] GitHub avec icône SVG
- [] Email avec icône SVG (primary)
- [] **Task 3 : Configurer les liens** (AC: 3)
- [] `target="_blank"` + `rel="noopener noreferrer"` pour LinkedIn/GitHub
- [] `mailto:` généré par JS pour l'email
- [] **Task 4 : Protéger l'email** (AC: 5)
- [] data-user et data-domain dans le HTML
- [] initEmailProtection() dans main.js
- [] 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
Claude Opus 4.5 (claude-opus-4-5-20251101)
### File List
| File | Action | Description |
|------|--------|-------------|
| `pages/contact.php` | Modified | Section liens secondaires (LinkedIn, GitHub, Email) |
| `assets/js/main.js` | Modified | Ajout initEmailProtection() |
### Completion Notes
- Section "Retrouvez-moi aussi sur" avec 3 liens
- LinkedIn : https://linkedin.com/in/celian-music (à personnaliser)
- 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
- target="_blank" + rel="noopener noreferrer" pour les liens externes
### 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) |