Spaces:
Sleeping
Sleeping
I want a job
Browse files- public/resume.pdf +0 -0
- src/app/api/text/question/route.ts +1 -8
- src/app/api/text/story/route.ts +0 -11
- src/app/api/text/verdict/route.ts +0 -4
- src/app/api/voice/route.ts +0 -5
- src/app/page.tsx +15 -20
- src/components/accusation/Accusation.tsx +16 -0
- src/components/common/Layout.tsx +16 -0
- src/components/components/LanguageSelector.tsx +16 -0
- src/components/court/Court.tsx +16 -0
- src/components/defense/Defense.tsx +16 -1
- src/components/end/End.tsx +16 -1
- src/components/intro/Intro.tsx +16 -1
- src/components/lawyer/Lawyer.tsx +16 -0
- src/components/menu/Menu.tsx +16 -0
public/resume.pdf
ADDED
|
Binary file (34.6 kB). View file
|
|
|
src/app/api/text/question/route.ts
CHANGED
|
@@ -9,9 +9,6 @@ export async function POST(request: Request) {
|
|
| 9 |
try {
|
| 10 |
const body = await request.json();
|
| 11 |
const { language, story, chat } = body;
|
| 12 |
-
console.log('language:', language)
|
| 13 |
-
console.log('story:', story)
|
| 14 |
-
console.log('chat:', chat)
|
| 15 |
|
| 16 |
const chatHistory = chat.messages
|
| 17 |
.map((m: { role: string; content: string }) =>
|
|
@@ -103,11 +100,9 @@ export async function POST(request: Request) {
|
|
| 103 |
}`
|
| 104 |
};
|
| 105 |
|
| 106 |
-
console.log('prompts:', prompts[language as Language])
|
| 107 |
|
| 108 |
const seed = Math.floor(Math.random() * 1000000);
|
| 109 |
|
| 110 |
-
console.log('seed:', seed)
|
| 111 |
|
| 112 |
const response = await mistral.chat.complete({
|
| 113 |
model: "mistral-large-latest",
|
|
@@ -116,12 +111,10 @@ export async function POST(request: Request) {
|
|
| 116 |
randomSeed: seed,
|
| 117 |
});
|
| 118 |
|
| 119 |
-
console.log('response:', response)
|
| 120 |
|
| 121 |
const functionCall = response.choices?.[0]?.message.content;
|
| 122 |
const JSONResponse = functionCall ? JSON.parse(functionCall as string) : null;
|
| 123 |
-
|
| 124 |
-
console.log('JSONResponse:', JSONResponse)
|
| 125 |
|
| 126 |
return NextResponse.json(JSONResponse || {
|
| 127 |
'question': 'Erreur de génération de question',
|
|
|
|
| 9 |
try {
|
| 10 |
const body = await request.json();
|
| 11 |
const { language, story, chat } = body;
|
|
|
|
|
|
|
|
|
|
| 12 |
|
| 13 |
const chatHistory = chat.messages
|
| 14 |
.map((m: { role: string; content: string }) =>
|
|
|
|
| 100 |
}`
|
| 101 |
};
|
| 102 |
|
|
|
|
| 103 |
|
| 104 |
const seed = Math.floor(Math.random() * 1000000);
|
| 105 |
|
|
|
|
| 106 |
|
| 107 |
const response = await mistral.chat.complete({
|
| 108 |
model: "mistral-large-latest",
|
|
|
|
| 111 |
randomSeed: seed,
|
| 112 |
});
|
| 113 |
|
|
|
|
| 114 |
|
| 115 |
const functionCall = response.choices?.[0]?.message.content;
|
| 116 |
const JSONResponse = functionCall ? JSON.parse(functionCall as string) : null;
|
| 117 |
+
|
|
|
|
| 118 |
|
| 119 |
return NextResponse.json(JSONResponse || {
|
| 120 |
'question': 'Erreur de génération de question',
|
src/app/api/text/story/route.ts
CHANGED
|
@@ -13,9 +13,6 @@ export async function POST(request: Request) {
|
|
| 13 |
try {
|
| 14 |
const body = await request.json();
|
| 15 |
const { language = 'fr' } = body;
|
| 16 |
-
console.log('body:', body)
|
| 17 |
-
|
| 18 |
-
console.log('language:', language)
|
| 19 |
|
| 20 |
const prompts = {
|
| 21 |
fr: `Vous êtes passé maître dans l'art de générer de fausses histoires de procès.
|
|
@@ -44,12 +41,8 @@ export async function POST(request: Request) {
|
|
| 44 |
alibi: [<String>],
|
| 45 |
}`;
|
| 46 |
|
| 47 |
-
console.log('chatPrompt:', chatPrompt)
|
| 48 |
-
|
| 49 |
const seed = Math.floor(Math.random() * 1000000);
|
| 50 |
|
| 51 |
-
console.log('seed:', seed)
|
| 52 |
-
|
| 53 |
const response = await mistral.chat.complete({
|
| 54 |
model: "mistral-large-latest",
|
| 55 |
messages: [{role: 'user', content: chatPrompt}],
|
|
@@ -57,12 +50,8 @@ export async function POST(request: Request) {
|
|
| 57 |
randomSeed: seed,
|
| 58 |
});
|
| 59 |
|
| 60 |
-
console.log('response:', response)
|
| 61 |
-
|
| 62 |
const functionCall = response.choices?.[0]?.message.content;
|
| 63 |
const JSONResponse = functionCall ? JSON.parse(functionCall as string) : null;
|
| 64 |
-
console.log('functionCall:', functionCall)
|
| 65 |
-
console.log('JSONResponse:', JSONResponse)
|
| 66 |
const storyData: Story = JSONResponse?.accusation || {
|
| 67 |
description: "Erreur de génération",
|
| 68 |
alibi: [],
|
|
|
|
| 13 |
try {
|
| 14 |
const body = await request.json();
|
| 15 |
const { language = 'fr' } = body;
|
|
|
|
|
|
|
|
|
|
| 16 |
|
| 17 |
const prompts = {
|
| 18 |
fr: `Vous êtes passé maître dans l'art de générer de fausses histoires de procès.
|
|
|
|
| 41 |
alibi: [<String>],
|
| 42 |
}`;
|
| 43 |
|
|
|
|
|
|
|
| 44 |
const seed = Math.floor(Math.random() * 1000000);
|
| 45 |
|
|
|
|
|
|
|
| 46 |
const response = await mistral.chat.complete({
|
| 47 |
model: "mistral-large-latest",
|
| 48 |
messages: [{role: 'user', content: chatPrompt}],
|
|
|
|
| 50 |
randomSeed: seed,
|
| 51 |
});
|
| 52 |
|
|
|
|
|
|
|
| 53 |
const functionCall = response.choices?.[0]?.message.content;
|
| 54 |
const JSONResponse = functionCall ? JSON.parse(functionCall as string) : null;
|
|
|
|
|
|
|
| 55 |
const storyData: Story = JSONResponse?.accusation || {
|
| 56 |
description: "Erreur de génération",
|
| 57 |
alibi: [],
|
src/app/api/text/verdict/route.ts
CHANGED
|
@@ -12,8 +12,6 @@ interface Message {
|
|
| 12 |
export async function POST(request: Request) {
|
| 13 |
try {
|
| 14 |
const { language, story, chat } = await request.json();
|
| 15 |
-
console.log('story:', story)
|
| 16 |
-
console.log('chat:', chat)
|
| 17 |
// Prepare the context from story and chat history
|
| 18 |
const accusationContext = `Crime description: ${story.accusation.description}\nSuspect's alibi: ${story.accusation.alibi.join(", ")}`;
|
| 19 |
|
|
@@ -110,8 +108,6 @@ export async function POST(request: Request) {
|
|
| 110 |
|
| 111 |
const functionCall = response.choices?.[0]?.message.content;
|
| 112 |
const JSONResponse = functionCall ? JSON.parse(functionCall as string) : null;
|
| 113 |
-
console.log('functionCall:', functionCall)
|
| 114 |
-
console.log('JSONResponse:', JSONResponse)
|
| 115 |
const verdictData = JSONResponse;
|
| 116 |
|
| 117 |
return NextResponse.json({
|
|
|
|
| 12 |
export async function POST(request: Request) {
|
| 13 |
try {
|
| 14 |
const { language, story, chat } = await request.json();
|
|
|
|
|
|
|
| 15 |
// Prepare the context from story and chat history
|
| 16 |
const accusationContext = `Crime description: ${story.accusation.description}\nSuspect's alibi: ${story.accusation.alibi.join(", ")}`;
|
| 17 |
|
|
|
|
| 108 |
|
| 109 |
const functionCall = response.choices?.[0]?.message.content;
|
| 110 |
const JSONResponse = functionCall ? JSON.parse(functionCall as string) : null;
|
|
|
|
|
|
|
| 111 |
const verdictData = JSONResponse;
|
| 112 |
|
| 113 |
return NextResponse.json({
|
src/app/api/voice/route.ts
CHANGED
|
@@ -48,9 +48,6 @@ const VOICES = {
|
|
| 48 |
export async function POST(request: Request) {
|
| 49 |
try {
|
| 50 |
const { text, language = 'en', role } = await request.json();
|
| 51 |
-
console.log('language:', language);
|
| 52 |
-
console.log('text:', text);
|
| 53 |
-
console.log('role:', role)
|
| 54 |
|
| 55 |
let voice;
|
| 56 |
if (role === 'lawyer') {
|
|
@@ -60,8 +57,6 @@ export async function POST(request: Request) {
|
|
| 60 |
} else if (role === 'glitch') {
|
| 61 |
voice = VOICES[language as keyof typeof VOICES].GLITCH_VOICE.id;
|
| 62 |
}
|
| 63 |
-
console.log('voice:', voice);
|
| 64 |
-
|
| 65 |
const response = await fetch(
|
| 66 |
`https://api.elevenlabs.io/v1/text-to-speech/${voice}`,
|
| 67 |
{
|
|
|
|
| 48 |
export async function POST(request: Request) {
|
| 49 |
try {
|
| 50 |
const { text, language = 'en', role } = await request.json();
|
|
|
|
|
|
|
|
|
|
| 51 |
|
| 52 |
let voice;
|
| 53 |
if (role === 'lawyer') {
|
|
|
|
| 57 |
} else if (role === 'glitch') {
|
| 58 |
voice = VOICES[language as keyof typeof VOICES].GLITCH_VOICE.id;
|
| 59 |
}
|
|
|
|
|
|
|
| 60 |
const response = await fetch(
|
| 61 |
`https://api.elevenlabs.io/v1/text-to-speech/${voice}`,
|
| 62 |
{
|
src/app/page.tsx
CHANGED
|
@@ -1,3 +1,18 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
'use client';
|
| 2 |
|
| 3 |
import { useState, useEffect } from 'react';
|
|
@@ -109,8 +124,6 @@ export default function Home() {
|
|
| 109 |
throw new Error('Failed to generate verdict');
|
| 110 |
}
|
| 111 |
|
| 112 |
-
console.log('data.verdict:', data.verdict)
|
| 113 |
-
|
| 114 |
setVerdict(data.verdict);
|
| 115 |
} catch (error) {
|
| 116 |
console.error('Error generating verdict:', error);
|
|
@@ -183,7 +196,6 @@ export default function Home() {
|
|
| 183 |
}
|
| 184 |
};
|
| 185 |
|
| 186 |
-
console.log('currentScene:', currentScene)
|
| 187 |
|
| 188 |
if (currentScene === 'intro') {
|
| 189 |
fetchStory();
|
|
@@ -191,12 +203,6 @@ export default function Home() {
|
|
| 191 |
// eslint-disable-next-line react-hooks/exhaustive-deps
|
| 192 |
}, [currentScene]); // on écoute les changements de currentScene
|
| 193 |
|
| 194 |
-
useEffect(() => {
|
| 195 |
-
if (reaction !== '') {
|
| 196 |
-
console.log('reaction:', reaction)
|
| 197 |
-
}
|
| 198 |
-
}, [reaction]);
|
| 199 |
-
|
| 200 |
useEffect(() => {
|
| 201 |
const fetchQuestion = async () => {
|
| 202 |
try {
|
|
@@ -213,13 +219,10 @@ export default function Home() {
|
|
| 213 |
});
|
| 214 |
|
| 215 |
const data = await response.json();
|
| 216 |
-
console.log('data:', data)
|
| 217 |
-
console.log('round:', round)
|
| 218 |
if (data.question && data.words) {
|
| 219 |
setCurrentQuestion(data.question);
|
| 220 |
setRequiredWords(data.words);
|
| 221 |
if (data.reaction && data.reaction !== '') {
|
| 222 |
-
console.log('data.reaction:', data.reaction)
|
| 223 |
setReaction(data.reaction);
|
| 224 |
}
|
| 225 |
setChat(prevChat => ({
|
|
@@ -232,19 +235,11 @@ export default function Home() {
|
|
| 232 |
};
|
| 233 |
|
| 234 |
if ((currentScene === 'accusation' && story) || (currentScene === 'lawyer' && round < 3 && story)) {
|
| 235 |
-
console.log('fetchQuestion')
|
| 236 |
fetchQuestion();
|
| 237 |
}
|
| 238 |
// eslint-disable-next-line react-hooks/exhaustive-deps
|
| 239 |
}, [currentScene]);
|
| 240 |
|
| 241 |
-
useEffect(() => {
|
| 242 |
-
if (currentQuestion && requiredWords.length > 0) {
|
| 243 |
-
console.log('currentQuestion:', currentQuestion)
|
| 244 |
-
console.log('requiredWords:', requiredWords)
|
| 245 |
-
}
|
| 246 |
-
}, [currentQuestion, requiredWords])
|
| 247 |
-
|
| 248 |
switch (currentScene) {
|
| 249 |
case 'menu':
|
| 250 |
return <MenuScene {...commonProps} />;
|
|
|
|
| 1 |
+
// /$$$$$$ /$$$$$$ /$$ /$$ /$$$$$$$$ /$$ /$$ /$$$$$$$$ /$$$$$$ /$$$$$ /$$$$$$ /$$$$$$$
|
| 2 |
+
// /$$__ $$|_ $$_/| $$ | $$| $$_____/ | $$$ /$$$| $$_____/ /$$__ $$ |__ $$ /$$__ $$| $$__ $$
|
| 3 |
+
// | $$ \__/ | $$ | $$ | $$| $$ | $$$$ /$$$$| $$ | $$ \ $$ | $$| $$ \ $$| $$ \ $$
|
| 4 |
+
// | $$ /$$$$ | $$ | $$ / $$/| $$$$$ | $$ $$/$$ $$| $$$$$ | $$$$$$$$ | $$| $$ | $$| $$$$$$$
|
| 5 |
+
// | $$|_ $$ | $$ \ $$ $$/ | $$__/ | $$ $$$| $$| $$__/ | $$__ $$ /$$ | $$| $$ | $$| $$__ $$
|
| 6 |
+
// | $$ \ $$ | $$ \ $$$/ | $$ | $$\ $ | $$| $$ | $$ | $$ | $$ | $$| $$ | $$| $$ \ $$
|
| 7 |
+
// | $$$$$$/ /$$$$$$ \ $/ | $$$$$$$$ | $$ \/ | $$| $$$$$$$$ | $$ | $$ | $$$$$$/| $$$$$$/| $$$$$$$/
|
| 8 |
+
// \______/ |______/ \_/ |________/ |__/ |__/|________/ |__/ |__/ \______/ \______/ |_______/
|
| 9 |
+
//
|
| 10 |
+
// Hi, I'm Roland and i'm looking for a job.
|
| 11 |
+
// Resume in /public/resume.pdf
|
| 12 |
+
// roland.vrignon@roland.com
|
| 13 |
+
// https://www.linkedin.com/in/roland-vrignon/
|
| 14 |
+
//
|
| 15 |
+
|
| 16 |
'use client';
|
| 17 |
|
| 18 |
import { useState, useEffect } from 'react';
|
|
|
|
| 124 |
throw new Error('Failed to generate verdict');
|
| 125 |
}
|
| 126 |
|
|
|
|
|
|
|
| 127 |
setVerdict(data.verdict);
|
| 128 |
} catch (error) {
|
| 129 |
console.error('Error generating verdict:', error);
|
|
|
|
| 196 |
}
|
| 197 |
};
|
| 198 |
|
|
|
|
| 199 |
|
| 200 |
if (currentScene === 'intro') {
|
| 201 |
fetchStory();
|
|
|
|
| 203 |
// eslint-disable-next-line react-hooks/exhaustive-deps
|
| 204 |
}, [currentScene]); // on écoute les changements de currentScene
|
| 205 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 206 |
useEffect(() => {
|
| 207 |
const fetchQuestion = async () => {
|
| 208 |
try {
|
|
|
|
| 219 |
});
|
| 220 |
|
| 221 |
const data = await response.json();
|
|
|
|
|
|
|
| 222 |
if (data.question && data.words) {
|
| 223 |
setCurrentQuestion(data.question);
|
| 224 |
setRequiredWords(data.words);
|
| 225 |
if (data.reaction && data.reaction !== '') {
|
|
|
|
| 226 |
setReaction(data.reaction);
|
| 227 |
}
|
| 228 |
setChat(prevChat => ({
|
|
|
|
| 235 |
};
|
| 236 |
|
| 237 |
if ((currentScene === 'accusation' && story) || (currentScene === 'lawyer' && round < 3 && story)) {
|
|
|
|
| 238 |
fetchQuestion();
|
| 239 |
}
|
| 240 |
// eslint-disable-next-line react-hooks/exhaustive-deps
|
| 241 |
}, [currentScene]);
|
| 242 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 243 |
switch (currentScene) {
|
| 244 |
case 'menu':
|
| 245 |
return <MenuScene {...commonProps} />;
|
src/components/accusation/Accusation.tsx
CHANGED
|
@@ -1,3 +1,19 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
'use client';
|
| 2 |
import { FC } from 'react';
|
| 3 |
import Image from 'next/image';
|
|
|
|
| 1 |
+
// /$$$$$$ /$$$$$$ /$$ /$$ /$$$$$$$$ /$$ /$$ /$$$$$$$$ /$$$$$$ /$$$$$ /$$$$$$ /$$$$$$$
|
| 2 |
+
// /$$__ $$|_ $$_/| $$ | $$| $$_____/ | $$$ /$$$| $$_____/ /$$__ $$ |__ $$ /$$__ $$| $$__ $$
|
| 3 |
+
// | $$ \__/ | $$ | $$ | $$| $$ | $$$$ /$$$$| $$ | $$ \ $$ | $$| $$ \ $$| $$ \ $$
|
| 4 |
+
// | $$ /$$$$ | $$ | $$ / $$/| $$$$$ | $$ $$/$$ $$| $$$$$ | $$$$$$$$ | $$| $$ | $$| $$$$$$$
|
| 5 |
+
// | $$|_ $$ | $$ \ $$ $$/ | $$__/ | $$ $$$| $$| $$__/ | $$__ $$ /$$ | $$| $$ | $$| $$__ $$
|
| 6 |
+
// | $$ \ $$ | $$ \ $$$/ | $$ | $$\ $ | $$| $$ | $$ | $$ | $$ | $$| $$ | $$| $$ \ $$
|
| 7 |
+
// | $$$$$$/ /$$$$$$ \ $/ | $$$$$$$$ | $$ \/ | $$| $$$$$$$$ | $$ | $$ | $$$$$$/| $$$$$$/| $$$$$$$/
|
| 8 |
+
// \______/ |______/ \_/ |________/ |__/ |__/|________/ |__/ |__/ \______/ \______/ |_______/
|
| 9 |
+
//
|
| 10 |
+
// Hi, I'm Roland and i'm looking for a job.
|
| 11 |
+
// Resume in /public/resume.pdf
|
| 12 |
+
// roland.vrignon@roland.com
|
| 13 |
+
// https://www.linkedin.com/in/roland-vrignon/
|
| 14 |
+
//
|
| 15 |
+
|
| 16 |
+
|
| 17 |
'use client';
|
| 18 |
import { FC } from 'react';
|
| 19 |
import Image from 'next/image';
|
src/components/common/Layout.tsx
CHANGED
|
@@ -1,3 +1,19 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
'use client';
|
| 2 |
|
| 3 |
import { FC, ReactNode } from 'react';
|
|
|
|
| 1 |
+
// /$$$$$$ /$$$$$$ /$$ /$$ /$$$$$$$$ /$$ /$$ /$$$$$$$$ /$$$$$$ /$$$$$ /$$$$$$ /$$$$$$$
|
| 2 |
+
// /$$__ $$|_ $$_/| $$ | $$| $$_____/ | $$$ /$$$| $$_____/ /$$__ $$ |__ $$ /$$__ $$| $$__ $$
|
| 3 |
+
// | $$ \__/ | $$ | $$ | $$| $$ | $$$$ /$$$$| $$ | $$ \ $$ | $$| $$ \ $$| $$ \ $$
|
| 4 |
+
// | $$ /$$$$ | $$ | $$ / $$/| $$$$$ | $$ $$/$$ $$| $$$$$ | $$$$$$$$ | $$| $$ | $$| $$$$$$$
|
| 5 |
+
// | $$|_ $$ | $$ \ $$ $$/ | $$__/ | $$ $$$| $$| $$__/ | $$__ $$ /$$ | $$| $$ | $$| $$__ $$
|
| 6 |
+
// | $$ \ $$ | $$ \ $$$/ | $$ | $$\ $ | $$| $$ | $$ | $$ | $$ | $$| $$ | $$| $$ \ $$
|
| 7 |
+
// | $$$$$$/ /$$$$$$ \ $/ | $$$$$$$$ | $$ \/ | $$| $$$$$$$$ | $$ | $$ | $$$$$$/| $$$$$$/| $$$$$$$/
|
| 8 |
+
// \______/ |______/ \_/ |________/ |__/ |__/|________/ |__/ |__/ \______/ \______/ |_______/
|
| 9 |
+
//
|
| 10 |
+
// Hi, I'm Roland and i'm looking for a job.
|
| 11 |
+
// Resume in /public/resume.pdf
|
| 12 |
+
// roland.vrignon@roland.com
|
| 13 |
+
// https://www.linkedin.com/in/roland-vrignon/
|
| 14 |
+
//
|
| 15 |
+
|
| 16 |
+
|
| 17 |
'use client';
|
| 18 |
|
| 19 |
import { FC, ReactNode } from 'react';
|
src/components/components/LanguageSelector.tsx
CHANGED
|
@@ -1,3 +1,19 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
'use client';
|
| 2 |
|
| 3 |
type Language = {
|
|
|
|
| 1 |
+
// /$$$$$$ /$$$$$$ /$$ /$$ /$$$$$$$$ /$$ /$$ /$$$$$$$$ /$$$$$$ /$$$$$ /$$$$$$ /$$$$$$$
|
| 2 |
+
// /$$__ $$|_ $$_/| $$ | $$| $$_____/ | $$$ /$$$| $$_____/ /$$__ $$ |__ $$ /$$__ $$| $$__ $$
|
| 3 |
+
// | $$ \__/ | $$ | $$ | $$| $$ | $$$$ /$$$$| $$ | $$ \ $$ | $$| $$ \ $$| $$ \ $$
|
| 4 |
+
// | $$ /$$$$ | $$ | $$ / $$/| $$$$$ | $$ $$/$$ $$| $$$$$ | $$$$$$$$ | $$| $$ | $$| $$$$$$$
|
| 5 |
+
// | $$|_ $$ | $$ \ $$ $$/ | $$__/ | $$ $$$| $$| $$__/ | $$__ $$ /$$ | $$| $$ | $$| $$__ $$
|
| 6 |
+
// | $$ \ $$ | $$ \ $$$/ | $$ | $$\ $ | $$| $$ | $$ | $$ | $$ | $$| $$ | $$| $$ \ $$
|
| 7 |
+
// | $$$$$$/ /$$$$$$ \ $/ | $$$$$$$$ | $$ \/ | $$| $$$$$$$$ | $$ | $$ | $$$$$$/| $$$$$$/| $$$$$$$/
|
| 8 |
+
// \______/ |______/ \_/ |________/ |__/ |__/|________/ |__/ |__/ \______/ \______/ |_______/
|
| 9 |
+
//
|
| 10 |
+
// Hi, I'm Roland and i'm looking for a job.
|
| 11 |
+
// Resume in /public/resume.pdf
|
| 12 |
+
// roland.vrignon@roland.com
|
| 13 |
+
// https://www.linkedin.com/in/roland-vrignon/
|
| 14 |
+
//
|
| 15 |
+
|
| 16 |
+
|
| 17 |
'use client';
|
| 18 |
|
| 19 |
type Language = {
|
src/components/court/Court.tsx
CHANGED
|
@@ -1,3 +1,19 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
'use client';
|
| 2 |
import { FC, useEffect, useState, useRef } from 'react';
|
| 3 |
import Image from 'next/image';
|
|
|
|
| 1 |
+
// /$$$$$$ /$$$$$$ /$$ /$$ /$$$$$$$$ /$$ /$$ /$$$$$$$$ /$$$$$$ /$$$$$ /$$$$$$ /$$$$$$$
|
| 2 |
+
// /$$__ $$|_ $$_/| $$ | $$| $$_____/ | $$$ /$$$| $$_____/ /$$__ $$ |__ $$ /$$__ $$| $$__ $$
|
| 3 |
+
// | $$ \__/ | $$ | $$ | $$| $$ | $$$$ /$$$$| $$ | $$ \ $$ | $$| $$ \ $$| $$ \ $$
|
| 4 |
+
// | $$ /$$$$ | $$ | $$ / $$/| $$$$$ | $$ $$/$$ $$| $$$$$ | $$$$$$$$ | $$| $$ | $$| $$$$$$$
|
| 5 |
+
// | $$|_ $$ | $$ \ $$ $$/ | $$__/ | $$ $$$| $$| $$__/ | $$__ $$ /$$ | $$| $$ | $$| $$__ $$
|
| 6 |
+
// | $$ \ $$ | $$ \ $$$/ | $$ | $$\ $ | $$| $$ | $$ | $$ | $$ | $$| $$ | $$| $$ \ $$
|
| 7 |
+
// | $$$$$$/ /$$$$$$ \ $/ | $$$$$$$$ | $$ \/ | $$| $$$$$$$$ | $$ | $$ | $$$$$$/| $$$$$$/| $$$$$$$/
|
| 8 |
+
// \______/ |______/ \_/ |________/ |__/ |__/|________/ |__/ |__/ \______/ \______/ |_______/
|
| 9 |
+
//
|
| 10 |
+
// Hi, I'm Roland and i'm looking for a job.
|
| 11 |
+
// Resume in /public/resume.pdf
|
| 12 |
+
// roland.vrignon@roland.com
|
| 13 |
+
// https://www.linkedin.com/in/roland-vrignon/
|
| 14 |
+
//
|
| 15 |
+
|
| 16 |
+
|
| 17 |
'use client';
|
| 18 |
import { FC, useEffect, useState, useRef } from 'react';
|
| 19 |
import Image from 'next/image';
|
src/components/defense/Defense.tsx
CHANGED
|
@@ -1,3 +1,19 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
'use client';
|
| 2 |
import { FC, useState, useEffect, Dispatch, SetStateAction } from 'react';
|
| 3 |
import Image from 'next/image';
|
|
@@ -78,7 +94,6 @@ const DefenseScene: FC<DefenseSceneProps> = ({
|
|
| 78 |
// Timer
|
| 79 |
const timer = setInterval(() => {
|
| 80 |
setCountdown((prev) => {
|
| 81 |
-
console.log('prev:', prev)
|
| 82 |
if (prev === 0) {
|
| 83 |
clearInterval(timer);
|
| 84 |
setIsTimeUp(true);
|
|
|
|
| 1 |
+
// /$$$$$$ /$$$$$$ /$$ /$$ /$$$$$$$$ /$$ /$$ /$$$$$$$$ /$$$$$$ /$$$$$ /$$$$$$ /$$$$$$$
|
| 2 |
+
// /$$__ $$|_ $$_/| $$ | $$| $$_____/ | $$$ /$$$| $$_____/ /$$__ $$ |__ $$ /$$__ $$| $$__ $$
|
| 3 |
+
// | $$ \__/ | $$ | $$ | $$| $$ | $$$$ /$$$$| $$ | $$ \ $$ | $$| $$ \ $$| $$ \ $$
|
| 4 |
+
// | $$ /$$$$ | $$ | $$ / $$/| $$$$$ | $$ $$/$$ $$| $$$$$ | $$$$$$$$ | $$| $$ | $$| $$$$$$$
|
| 5 |
+
// | $$|_ $$ | $$ \ $$ $$/ | $$__/ | $$ $$$| $$| $$__/ | $$__ $$ /$$ | $$| $$ | $$| $$__ $$
|
| 6 |
+
// | $$ \ $$ | $$ \ $$$/ | $$ | $$\ $ | $$| $$ | $$ | $$ | $$ | $$| $$ | $$| $$ \ $$
|
| 7 |
+
// | $$$$$$/ /$$$$$$ \ $/ | $$$$$$$$ | $$ \/ | $$| $$$$$$$$ | $$ | $$ | $$$$$$/| $$$$$$/| $$$$$$$/
|
| 8 |
+
// \______/ |______/ \_/ |________/ |__/ |__/|________/ |__/ |__/ \______/ \______/ |_______/
|
| 9 |
+
//
|
| 10 |
+
// Hi, I'm Roland and i'm looking for a job.
|
| 11 |
+
// Resume in /public/resume.pdf
|
| 12 |
+
// roland.vrignon@roland.com
|
| 13 |
+
// https://www.linkedin.com/in/roland-vrignon/
|
| 14 |
+
//
|
| 15 |
+
|
| 16 |
+
|
| 17 |
'use client';
|
| 18 |
import { FC, useState, useEffect, Dispatch, SetStateAction } from 'react';
|
| 19 |
import Image from 'next/image';
|
|
|
|
| 94 |
// Timer
|
| 95 |
const timer = setInterval(() => {
|
| 96 |
setCountdown((prev) => {
|
|
|
|
| 97 |
if (prev === 0) {
|
| 98 |
clearInterval(timer);
|
| 99 |
setIsTimeUp(true);
|
src/components/end/End.tsx
CHANGED
|
@@ -1,3 +1,19 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
'use client';
|
| 2 |
import { FC, useEffect, useState, useRef } from 'react';
|
| 3 |
import Image from 'next/image';
|
|
@@ -24,7 +40,6 @@ const EndScene: FC<EndSceneProps> = ({
|
|
| 24 |
|
| 25 |
useEffect(() => {
|
| 26 |
if (verdict) {
|
| 27 |
-
console.log('End verdict:', verdict);
|
| 28 |
setIsLoading(false);
|
| 29 |
|
| 30 |
const playVerdict = async () => {
|
|
|
|
| 1 |
+
// /$$$$$$ /$$$$$$ /$$ /$$ /$$$$$$$$ /$$ /$$ /$$$$$$$$ /$$$$$$ /$$$$$ /$$$$$$ /$$$$$$$
|
| 2 |
+
// /$$__ $$|_ $$_/| $$ | $$| $$_____/ | $$$ /$$$| $$_____/ /$$__ $$ |__ $$ /$$__ $$| $$__ $$
|
| 3 |
+
// | $$ \__/ | $$ | $$ | $$| $$ | $$$$ /$$$$| $$ | $$ \ $$ | $$| $$ \ $$| $$ \ $$
|
| 4 |
+
// | $$ /$$$$ | $$ | $$ / $$/| $$$$$ | $$ $$/$$ $$| $$$$$ | $$$$$$$$ | $$| $$ | $$| $$$$$$$
|
| 5 |
+
// | $$|_ $$ | $$ \ $$ $$/ | $$__/ | $$ $$$| $$| $$__/ | $$__ $$ /$$ | $$| $$ | $$| $$__ $$
|
| 6 |
+
// | $$ \ $$ | $$ \ $$$/ | $$ | $$\ $ | $$| $$ | $$ | $$ | $$ | $$| $$ | $$| $$ \ $$
|
| 7 |
+
// | $$$$$$/ /$$$$$$ \ $/ | $$$$$$$$ | $$ \/ | $$| $$$$$$$$ | $$ | $$ | $$$$$$/| $$$$$$/| $$$$$$$/
|
| 8 |
+
// \______/ |______/ \_/ |________/ |__/ |__/|________/ |__/ |__/ \______/ \______/ |_______/
|
| 9 |
+
//
|
| 10 |
+
// Hi, I'm Roland and i'm looking for a job.
|
| 11 |
+
// Resume in /public/resume.pdf
|
| 12 |
+
// roland.vrignon@roland.com
|
| 13 |
+
// https://www.linkedin.com/in/roland-vrignon/
|
| 14 |
+
//
|
| 15 |
+
|
| 16 |
+
|
| 17 |
'use client';
|
| 18 |
import { FC, useEffect, useState, useRef } from 'react';
|
| 19 |
import Image from 'next/image';
|
|
|
|
| 40 |
|
| 41 |
useEffect(() => {
|
| 42 |
if (verdict) {
|
|
|
|
| 43 |
setIsLoading(false);
|
| 44 |
|
| 45 |
const playVerdict = async () => {
|
src/components/intro/Intro.tsx
CHANGED
|
@@ -1,3 +1,19 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
'use client';
|
| 2 |
import { FC, useEffect, useRef } from 'react';
|
| 3 |
import Image from 'next/image';
|
|
@@ -76,7 +92,6 @@ const IntroScene: FC<IntroSceneProps> = ({
|
|
| 76 |
}, [language]);
|
| 77 |
|
| 78 |
const handleContinue = () => {
|
| 79 |
-
console.log('handleContinue:')
|
| 80 |
if (audioRef.current) {
|
| 81 |
audioRef.current.pause();
|
| 82 |
document.body.removeChild(audioRef.current);
|
|
|
|
| 1 |
+
// /$$$$$$ /$$$$$$ /$$ /$$ /$$$$$$$$ /$$ /$$ /$$$$$$$$ /$$$$$$ /$$$$$ /$$$$$$ /$$$$$$$
|
| 2 |
+
// /$$__ $$|_ $$_/| $$ | $$| $$_____/ | $$$ /$$$| $$_____/ /$$__ $$ |__ $$ /$$__ $$| $$__ $$
|
| 3 |
+
// | $$ \__/ | $$ | $$ | $$| $$ | $$$$ /$$$$| $$ | $$ \ $$ | $$| $$ \ $$| $$ \ $$
|
| 4 |
+
// | $$ /$$$$ | $$ | $$ / $$/| $$$$$ | $$ $$/$$ $$| $$$$$ | $$$$$$$$ | $$| $$ | $$| $$$$$$$
|
| 5 |
+
// | $$|_ $$ | $$ \ $$ $$/ | $$__/ | $$ $$$| $$| $$__/ | $$__ $$ /$$ | $$| $$ | $$| $$__ $$
|
| 6 |
+
// | $$ \ $$ | $$ \ $$$/ | $$ | $$\ $ | $$| $$ | $$ | $$ | $$ | $$| $$ | $$| $$ \ $$
|
| 7 |
+
// | $$$$$$/ /$$$$$$ \ $/ | $$$$$$$$ | $$ \/ | $$| $$$$$$$$ | $$ | $$ | $$$$$$/| $$$$$$/| $$$$$$$/
|
| 8 |
+
// \______/ |______/ \_/ |________/ |__/ |__/|________/ |__/ |__/ \______/ \______/ |_______/
|
| 9 |
+
//
|
| 10 |
+
// Hi, I'm Roland and i'm looking for a job.
|
| 11 |
+
// Resume in /public/resume.pdf
|
| 12 |
+
// roland.vrignon@roland.com
|
| 13 |
+
// https://www.linkedin.com/in/roland-vrignon/
|
| 14 |
+
//
|
| 15 |
+
|
| 16 |
+
|
| 17 |
'use client';
|
| 18 |
import { FC, useEffect, useRef } from 'react';
|
| 19 |
import Image from 'next/image';
|
|
|
|
| 92 |
}, [language]);
|
| 93 |
|
| 94 |
const handleContinue = () => {
|
|
|
|
| 95 |
if (audioRef.current) {
|
| 96 |
audioRef.current.pause();
|
| 97 |
document.body.removeChild(audioRef.current);
|
src/components/lawyer/Lawyer.tsx
CHANGED
|
@@ -1,3 +1,19 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
'use client';
|
| 2 |
import { FC, useState, useEffect, Dispatch, SetStateAction, useRef } from 'react';
|
| 3 |
import Image from 'next/image';
|
|
|
|
| 1 |
+
// /$$$$$$ /$$$$$$ /$$ /$$ /$$$$$$$$ /$$ /$$ /$$$$$$$$ /$$$$$$ /$$$$$ /$$$$$$ /$$$$$$$
|
| 2 |
+
// /$$__ $$|_ $$_/| $$ | $$| $$_____/ | $$$ /$$$| $$_____/ /$$__ $$ |__ $$ /$$__ $$| $$__ $$
|
| 3 |
+
// | $$ \__/ | $$ | $$ | $$| $$ | $$$$ /$$$$| $$ | $$ \ $$ | $$| $$ \ $$| $$ \ $$
|
| 4 |
+
// | $$ /$$$$ | $$ | $$ / $$/| $$$$$ | $$ $$/$$ $$| $$$$$ | $$$$$$$$ | $$| $$ | $$| $$$$$$$
|
| 5 |
+
// | $$|_ $$ | $$ \ $$ $$/ | $$__/ | $$ $$$| $$| $$__/ | $$__ $$ /$$ | $$| $$ | $$| $$__ $$
|
| 6 |
+
// | $$ \ $$ | $$ \ $$$/ | $$ | $$\ $ | $$| $$ | $$ | $$ | $$ | $$| $$ | $$| $$ \ $$
|
| 7 |
+
// | $$$$$$/ /$$$$$$ \ $/ | $$$$$$$$ | $$ \/ | $$| $$$$$$$$ | $$ | $$ | $$$$$$/| $$$$$$/| $$$$$$$/
|
| 8 |
+
// \______/ |______/ \_/ |________/ |__/ |__/|________/ |__/ |__/ \______/ \______/ |_______/
|
| 9 |
+
//
|
| 10 |
+
// Hi, I'm Roland and i'm looking for a job.
|
| 11 |
+
// Resume in /public/resume.pdf
|
| 12 |
+
// roland.vrignon@roland.com
|
| 13 |
+
// https://www.linkedin.com/in/roland-vrignon/
|
| 14 |
+
//
|
| 15 |
+
|
| 16 |
+
|
| 17 |
'use client';
|
| 18 |
import { FC, useState, useEffect, Dispatch, SetStateAction, useRef } from 'react';
|
| 19 |
import Image from 'next/image';
|
src/components/menu/Menu.tsx
CHANGED
|
@@ -1,3 +1,19 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
'use client';
|
| 2 |
|
| 3 |
import { FC } from 'react';
|
|
|
|
| 1 |
+
// /$$$$$$ /$$$$$$ /$$ /$$ /$$$$$$$$ /$$ /$$ /$$$$$$$$ /$$$$$$ /$$$$$ /$$$$$$ /$$$$$$$
|
| 2 |
+
// /$$__ $$|_ $$_/| $$ | $$| $$_____/ | $$$ /$$$| $$_____/ /$$__ $$ |__ $$ /$$__ $$| $$__ $$
|
| 3 |
+
// | $$ \__/ | $$ | $$ | $$| $$ | $$$$ /$$$$| $$ | $$ \ $$ | $$| $$ \ $$| $$ \ $$
|
| 4 |
+
// | $$ /$$$$ | $$ | $$ / $$/| $$$$$ | $$ $$/$$ $$| $$$$$ | $$$$$$$$ | $$| $$ | $$| $$$$$$$
|
| 5 |
+
// | $$|_ $$ | $$ \ $$ $$/ | $$__/ | $$ $$$| $$| $$__/ | $$__ $$ /$$ | $$| $$ | $$| $$__ $$
|
| 6 |
+
// | $$ \ $$ | $$ \ $$$/ | $$ | $$\ $ | $$| $$ | $$ | $$ | $$ | $$| $$ | $$| $$ \ $$
|
| 7 |
+
// | $$$$$$/ /$$$$$$ \ $/ | $$$$$$$$ | $$ \/ | $$| $$$$$$$$ | $$ | $$ | $$$$$$/| $$$$$$/| $$$$$$$/
|
| 8 |
+
// \______/ |______/ \_/ |________/ |__/ |__/|________/ |__/ |__/ \______/ \______/ |_______/
|
| 9 |
+
//
|
| 10 |
+
// Hi, I'm Roland and i'm looking for a job.
|
| 11 |
+
// Resume in /public/resume.pdf
|
| 12 |
+
// roland.vrignon@roland.com
|
| 13 |
+
// https://www.linkedin.com/in/roland-vrignon/
|
| 14 |
+
//
|
| 15 |
+
|
| 16 |
+
|
| 17 |
'use client';
|
| 18 |
|
| 19 |
import { FC } from 'react';
|