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';
|