# Story 4.7: Révélation "Monde de Code"
Status: ready-for-dev
## Story
As a visiteur ayant complété le parcours,
I want vivre un moment waouh de révélation finale,
so that la découverte du développeur est mémorable.
## Acceptance Criteria
1. **Given** le visiteur accède à la zone Contact (après challenge ou skip) **When** la révélation se déclenche **Then** une transition immersive mène vers le "Monde de Code"
2. **And** un paysage composé de blocs de code ASCII art s'affiche (montagnes, arbres, ville en code)
3. **And** le code scroll/apparaît progressivement (animation)
4. **And** l'avatar illustré de Célian est révélé au centre du monde de code
5. **And** le narrateur (Le Bug) commente : "Tu l'as trouvé !"
6. **And** le message "Tu m'as trouvé !" s'affiche avec effet de célébration
7. **And** sur mobile, une version allégée mais émotionnellement équivalente s'affiche
8. **And** `prefers-reduced-motion` affiche une version statique
9. **And** une description alternative est disponible pour les screen readers
10. **And** un bouton permet de continuer vers le formulaire de contact
## Tasks / Subtasks
- [ ] **Task 1: Créer la page révélation** (AC: #1, #10)
- [ ] Créer `frontend/app/pages/revelation.vue`
- [ ] Vérifier que le contact est débloqué
- [ ] Structure en phases : transition → monde de code → avatar → message
- [ ] **Task 2: Créer le composant CodeWorld** (AC: #2, #3)
- [ ] Créer `frontend/app/components/feature/CodeWorld.vue`
- [ ] ASCII art représentant un paysage (montagnes, arbres, soleil)
- [ ] Animation de révélation ligne par ligne
- [ ] Couleurs syntaxiques (comme du code)
- [ ] **Task 3: Créer l'ASCII art du paysage**
- [ ] Montagnes en caractères (`/\`, `^`, etc.)
- [ ] Arbres stylisés (`{}`, `[]`)
- [ ] Soleil ou étoiles
- [ ] Personnage au centre
- [ ] **Task 4: Révéler l'avatar de Célian** (AC: #4)
- [ ] Image illustrée de Célian
- [ ] Animation d'apparition (fade + scale)
- [ ] Position centrale sur le monde de code
- [ ] **Task 5: Message du narrateur** (AC: #5)
- [ ] Le Bug s'exclame "Tu l'as trouvé !"
- [ ] Utiliser NarratorBubble ou message intégré
- [ ] Ton enthousiaste et célébratoire
- [ ] **Task 6: Message de Célian** (AC: #6)
- [ ] "Tu m'as trouvé !" avec effet typewriter
- [ ] Animation de célébration autour
- [ ] Signature de Célian
- [ ] **Task 7: Version mobile** (AC: #7)
- [ ] ASCII art simplifié ou image de remplacement
- [ ] Mêmes éléments clés : avatar, message, émotion
- [ ] Performance optimisée
- [ ] **Task 8: Accessibilité** (AC: #8, #9)
- [ ] Respecter prefers-reduced-motion (version statique)
- [ ] Description alternative pour screen readers
- [ ] aria-label descriptif
- [ ] **Task 9: Tests et validation**
- [ ] Tester l'animation complète
- [ ] Vérifier la version mobile
- [ ] Tester prefers-reduced-motion
- [ ] Valider l'accessibilité
## Dev Notes
### ASCII Art du Monde de Code
```
* . *
* . . *
. ___ .
* . / \ *
. / ^ \ . *
* / /^\ \ *
. /____/ \____\ .
* | | | | *
. | | | | .
_______| |_____| |_______
/ | | | | \
{ Vue }| TS |{PHP}| DB |{Nuxt}
\_______________________/
|| || ||
{ } { } { }
|| || ||
___||_____||_____||___
| YOU |
| FOUND ME! 🎉 |
|_____________________|
```
### Page revelation.vue
```vue
{{ t('revelation.srDescription') }}
{{ t('revelation.transition') }}
✨
{{ t('revelation.foundMe') }}
{{ t('revelation.greeting') }}
— Célian, {{ t('revelation.title') }}
{{ t('revelation.foundMe') }}
{{ t('revelation.greeting') }}
```
### Composant CodeWorld
```vue
```
### Clés i18n
**fr.json :**
```json
{
"revelation": {
"transition": "Le voilà...",
"foundMe": "Tu m'as trouvé !",
"greeting": "Bienvenue dans mon monde de code. Je suis Célian, le développeur que tu cherchais depuis le début.",
"title": "Développeur Web Fullstack",
"contactMe": "Me contacter",
"codeWorldAlt": "Un paysage stylisé composé de caractères de code, représentant l'univers du développeur",
"srDescription": "Vous avez découvert le développeur ! Célian vous accueille dans son monde de code."
}
}
```
**en.json :**
```json
{
"revelation": {
"transition": "There he is...",
"foundMe": "You found me!",
"greeting": "Welcome to my world of code. I'm Célian, the developer you've been looking for all along.",
"title": "Fullstack Web Developer",
"contactMe": "Contact me",
"codeWorldAlt": "A stylized landscape made of code characters, representing the developer's universe",
"srDescription": "You discovered the developer! Célian welcomes you to his world of code."
}
}
```
### Dépendances
**Cette story nécessite :**
- Story 3.5 : Store de progression (contactUnlocked)
- Story 3.2 : useReducedMotion
- Story 3.3 : useNarrator (révélation)
**Cette story prépare pour :**
- Story 4.8 : Page contact (destination finale)
### Project Structure Notes
**Fichiers à créer :**
```
frontend/app/
├── pages/
│ └── revelation.vue # CRÉER
├── components/feature/
│ └── CodeWorld.vue # CRÉER
└── public/images/
└── avatar-celian.svg # CRÉER (asset)
```
**Fichiers à modifier :**
```
frontend/i18n/fr.json # AJOUTER revelation.*
frontend/i18n/en.json # AJOUTER revelation.*
```
### References
- [Source: docs/planning-artifacts/epics.md#Story-4.7]
- [Source: docs/planning-artifacts/ux-design-specification.md#Revelation]
- [Source: docs/brainstorming-gamification-2026-01-26.md#Revelation]
### Technical Requirements
| Requirement | Value | Source |
|-------------|-------|--------|
| ASCII Art | Paysage stylisé | Epics |
| Avatar | Image de Célian | Epics |
| Message | "Tu m'as trouvé !" | Epics |
| Accessibilité | prefers-reduced-motion, aria | Epics |
## Dev Agent Record
### Agent Model Used
{{agent_model_name_version}}
### Debug Log References
### Completion Notes List
### Change Log
| Date | Change | Author |
|------|--------|--------|
| 2026-02-04 | Story créée avec contexte complet | SM Agent |
### File List