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:
2026-02-08 13:35:12 +01:00
parent 64b1a33d10
commit 7e87a341a2
38 changed files with 3037 additions and 96 deletions

View File

@@ -0,0 +1,31 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
public function up(): void
{
Schema::create('easter_eggs', function (Blueprint $table) {
$table->id();
$table->string('slug')->unique();
$table->string('location'); // Page ou zone où se trouve l'easter egg
$table->enum('trigger_type', ['click', 'hover', 'konami', 'scroll', 'sequence']);
$table->enum('reward_type', ['snippet', 'anecdote', 'image', 'badge']);
$table->string('reward_key'); // Clé de traduction pour la récompense
$table->unsignedTinyInteger('difficulty')->default(1); // 1-5
$table->boolean('is_active')->default(true);
$table->timestamps();
$table->index('is_active');
$table->index('location');
});
}
public function down(): void
{
Schema::dropIfExists('easter_eggs');
}
};