✨ feat(epic-4): chemins narratifs, easter eggs, challenge et contact
Epic 4: Chemins Narratifs, Challenge & Contact Stories implementees: - 4.1: Composant ChoiceCards pour choix narratifs binaires - 4.2: Sequence d'intro narrative avec Le Bug - 4.3: Chemins narratifs differencies avec useNarrativePath - 4.4: Table easter_eggs et systeme de detection (API + composable) - 4.5: Easter eggs UI (popup, notification, collection) - 4.6: Page challenge avec puzzle de code - 4.7: Page revelation "Monde de Code" - 4.8: Page contact avec formulaire et stats Fichiers crees: - Frontend: ChoiceCards, IntroSequence, ZoneEndChoice, EasterEggPopup, CodePuzzle, ChallengeSuccess, CodeWorld, et pages intro/challenge/revelation - API: EasterEggController, Model, Migration, Seeder Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -179,6 +179,16 @@
|
||||
"clickToSkip": "Click or press Space to skip",
|
||||
"bugAlt": "The Bug - Stage {stage}"
|
||||
},
|
||||
"intro": {
|
||||
"continue": "Continue",
|
||||
"startExploring": "Start exploring",
|
||||
"skip": "Skip intro",
|
||||
"fallback": {
|
||||
"seq1": "Welcome to my domain... I am The Bug, your guide for this adventure.",
|
||||
"seq2": "There's someone here you're looking for... A mysterious developer who created everything you see.",
|
||||
"seq3": "To find them, explore this world. Each zone hides a part of their story. Are you ready?"
|
||||
}
|
||||
},
|
||||
"map": {
|
||||
"ariaLabel": "Interactive portfolio map. Use Tab to navigate between zones and Enter to explore.",
|
||||
"instructions": "Use Tab keys to navigate between zones and Enter or Space to explore a zone.",
|
||||
@@ -252,5 +262,63 @@
|
||||
"title": "Quick Resume",
|
||||
"description": "The essentials at a glance"
|
||||
}
|
||||
},
|
||||
"easterEgg": {
|
||||
"found": "Easter Egg found!",
|
||||
"count": "{found} / {total} discovered",
|
||||
"difficulty": "Difficulty",
|
||||
"collection": "My Collection",
|
||||
"allFound": "Collection complete! You're a true explorer!",
|
||||
"hint": "Keep exploring... surprises are hidden everywhere!"
|
||||
},
|
||||
"challenge": {
|
||||
"title": "One last challenge...",
|
||||
"intro": "Before meeting the developer, prove you understand the basics of code. Nothing too hard, I promise.",
|
||||
"accept": "Accept the challenge",
|
||||
"skip": "Skip to contact",
|
||||
"puzzleTitle": "Put the code in order",
|
||||
"puzzleInstruction": "Drag the lines to reconstruct the function that unlocks access to the developer.",
|
||||
"hint1": "The function starts with function unlockDeveloper() {",
|
||||
"hint2": "The secret variable is defined right after the opening brace",
|
||||
"hint3": "The last line before the closing brace is return Keep exploring...",
|
||||
"hintLabel": "Hint",
|
||||
"needHint": "Need help?",
|
||||
"validate": "Check",
|
||||
"validating": "Checking...",
|
||||
"wrongOrder": "That's not the right order... Try again!",
|
||||
"moveUp": "Move up",
|
||||
"moveDown": "Move down",
|
||||
"success": "Well done!",
|
||||
"successMessage": "You've proven your worth. The path to the developer is now open...",
|
||||
"redirecting": "Redirecting..."
|
||||
},
|
||||
"revelation": {
|
||||
"loading": "Loading...",
|
||||
"bugSays": "The Bug says: You found them!",
|
||||
"foundMe": "You found me!",
|
||||
"message": "Welcome to my world of code. Thank you for exploring all this way to find me.",
|
||||
"contactCta": "Contact me",
|
||||
"srDescription": "Revelation page. You found the developer Celian. A button allows you to contact them.",
|
||||
"codeWorldAlt": "An ASCII art world representing a code landscape with the message You found me in the center."
|
||||
},
|
||||
"contact": {
|
||||
"statsTitle": "Your journey",
|
||||
"zones": "Zones visited",
|
||||
"easterEggs": "Easter eggs",
|
||||
"challenge": "Challenge",
|
||||
"title": "Contact me",
|
||||
"subtitle": "Congratulations for exploring all this way! I'd be happy to chat with you.",
|
||||
"name": "Name",
|
||||
"namePlaceholder": "Your name",
|
||||
"email": "Email",
|
||||
"emailPlaceholder": "your.email(at)example.com",
|
||||
"message": "Message",
|
||||
"messagePlaceholder": "What brings you here?",
|
||||
"send": "Send",
|
||||
"sending": "Sending...",
|
||||
"success": "Message sent!",
|
||||
"successMessage": "Thanks for your message. I'll get back to you as soon as possible.",
|
||||
"error": "An error occurred. Please try again later.",
|
||||
"rateLimitError": "Too many attempts. Please wait a moment before trying again."
|
||||
}
|
||||
}
|
||||
|
||||
@@ -179,6 +179,16 @@
|
||||
"clickToSkip": "Cliquez ou appuyez sur Espace pour passer",
|
||||
"bugAlt": "Le Bug - Stade {stage}"
|
||||
},
|
||||
"intro": {
|
||||
"continue": "Continuer",
|
||||
"startExploring": "Commencer l'exploration",
|
||||
"skip": "Passer l'intro",
|
||||
"fallback": {
|
||||
"seq1": "Bienvenue dans mon domaine... Je suis Le Bug, ton guide pour cette aventure.",
|
||||
"seq2": "Il y a quelqu'un ici que tu cherches... Un développeur mystérieux qui a créé tout ce que tu vois.",
|
||||
"seq3": "Pour le trouver, explore ce monde. Chaque zone cache une partie de son histoire. Es-tu prêt ?"
|
||||
}
|
||||
},
|
||||
"map": {
|
||||
"ariaLabel": "Carte interactive du portfolio. Utilisez Tab pour naviguer entre les zones et Entrée pour explorer.",
|
||||
"instructions": "Utilisez les touches Tab pour naviguer entre les zones et Entrée ou Espace pour explorer une zone.",
|
||||
@@ -252,5 +262,63 @@
|
||||
"title": "Résumé Express",
|
||||
"description": "L'essentiel en un coup d'œil"
|
||||
}
|
||||
},
|
||||
"easterEgg": {
|
||||
"found": "Easter Egg trouve !",
|
||||
"count": "{found} / {total} decouverts",
|
||||
"difficulty": "Difficulte",
|
||||
"collection": "Ma Collection",
|
||||
"allFound": "Collection complete ! Tu es un vrai explorateur !",
|
||||
"hint": "Continue d'explorer... des surprises sont cachees partout !"
|
||||
},
|
||||
"challenge": {
|
||||
"title": "Une derniere epreuve...",
|
||||
"intro": "Avant de rencontrer le developpeur, prouve que tu maitrises les bases du code. Rien de bien mechant, promis.",
|
||||
"accept": "Relever le defi",
|
||||
"skip": "Passer directement au contact",
|
||||
"puzzleTitle": "Remets le code dans l'ordre",
|
||||
"puzzleInstruction": "Glisse les lignes pour reconstituer la fonction qui debloque l'acces au developpeur.",
|
||||
"hint1": "La fonction commence par function unlockDeveloper() {",
|
||||
"hint2": "La variable secret est definie juste apres l'accolade ouvrante",
|
||||
"hint3": "La derniere ligne avant l'accolade fermante est return Keep exploring...",
|
||||
"hintLabel": "Indice",
|
||||
"needHint": "Besoin d'aide ?",
|
||||
"validate": "Verifier",
|
||||
"validating": "Verification...",
|
||||
"wrongOrder": "Ce n'est pas le bon ordre... Essaie encore !",
|
||||
"moveUp": "Monter",
|
||||
"moveDown": "Descendre",
|
||||
"success": "Bravo !",
|
||||
"successMessage": "Tu as prouve ta valeur. Le chemin vers le developpeur est maintenant ouvert...",
|
||||
"redirecting": "Redirection en cours..."
|
||||
},
|
||||
"revelation": {
|
||||
"loading": "Chargement...",
|
||||
"bugSays": "Le Bug dit : Tu l'as trouve !",
|
||||
"foundMe": "Tu m'as trouve !",
|
||||
"message": "Bienvenue dans mon monde de code. Merci d'avoir explore tout ce chemin pour me trouver.",
|
||||
"contactCta": "Me contacter",
|
||||
"srDescription": "Page de revelation. Vous avez trouve le developpeur Celian. Un bouton permet de le contacter.",
|
||||
"codeWorldAlt": "Un monde en ASCII art representant un paysage de code avec le message Tu m'as trouve au centre."
|
||||
},
|
||||
"contact": {
|
||||
"statsTitle": "Ton parcours",
|
||||
"zones": "Zones visitees",
|
||||
"easterEggs": "Easter eggs",
|
||||
"challenge": "Defi",
|
||||
"title": "Me contacter",
|
||||
"subtitle": "Felicitations pour avoir explore tout ce chemin ! Je serais ravi d'echanger avec toi.",
|
||||
"name": "Nom",
|
||||
"namePlaceholder": "Ton nom",
|
||||
"email": "Email",
|
||||
"emailPlaceholder": "ton.email(at)example.com",
|
||||
"message": "Message",
|
||||
"messagePlaceholder": "Qu'est-ce qui t'amene ?",
|
||||
"send": "Envoyer",
|
||||
"sending": "Envoi en cours...",
|
||||
"success": "Message envoye !",
|
||||
"successMessage": "Merci pour ton message. Je te repondrai dans les plus brefs delais.",
|
||||
"error": "Une erreur s'est produite. Reessaie plus tard.",
|
||||
"rateLimitError": "Trop de tentatives. Patiente un moment avant de reessayer."
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user