Felix Zieger commited on
Commit
2d83648
·
1 Parent(s): a64b653
src/components/game/LanguageSelector.tsx CHANGED
@@ -15,6 +15,7 @@ const languages: { code: Language; name: string; flag: string }[] = [
15
  { code: 'de', name: 'Deutsch', flag: '🇩🇪' },
16
  { code: 'it', name: 'Italiano', flag: '🇮🇹' },
17
  { code: 'es', name: 'Español', flag: '🇪🇸' },
 
18
  ];
19
 
20
 
 
15
  { code: 'de', name: 'Deutsch', flag: '🇩🇪' },
16
  { code: 'it', name: 'Italiano', flag: '🇮🇹' },
17
  { code: 'es', name: 'Español', flag: '🇪🇸' },
18
+ { code: 'pt', name: 'Português', flag: '🇵🇹' },
19
  ];
20
 
21
 
src/components/game/WelcomeScreen.tsx CHANGED
@@ -56,23 +56,25 @@ export const WelcomeScreen = ({ onStartDaily: onStartDaily, onStartNew: onStartN
56
  />
57
  </motion.div>
58
 
59
- <motion.div
60
- initial={{ opacity: 0 }}
61
- animate={{ opacity: 1 }}
62
- transition={{ delay: 0.1 }}
63
- className="max-w-2xl mx-auto text-center mt-8"
64
- >
65
- <ContestSection />
66
- </motion.div>
67
-
68
  <motion.div
69
  initial={{ opacity: 0 }}
70
  animate={{ opacity: 1 }}
71
  transition={{ delay: 0.2 }}
72
  className="max-w-2xl mx-auto text-center mt-8"
73
  >
74
- <HuggingFaceLink />
75
- </motion.div>
 
 
 
 
 
 
 
 
 
 
 
76
 
77
  <Dialog open={showHighScores} onOpenChange={setShowHighScores}>
78
  <DialogContent className="max-h-[90vh] overflow-y-auto sm:max-w-[600px]">
 
56
  />
57
  </motion.div>
58
 
 
 
 
 
 
 
 
 
 
59
  <motion.div
60
  initial={{ opacity: 0 }}
61
  animate={{ opacity: 1 }}
62
  transition={{ delay: 0.2 }}
63
  className="max-w-2xl mx-auto text-center mt-8"
64
  >
65
+ <div className="mt-12 text-sm text-gray-500 space-y-2">
66
+ <p>
67
+ Made by{" "}
68
+ <a href="https://www.linkedin.com/in/sandro-mikautadze/" target="_blank" rel="noopener noreferrer" className="text-primary hover:underline">Sandro</a>,{" "}
69
+ <a href="https://www.linkedin.com/in/alessandro-pranzo/" target="_blank" rel="noopener noreferrer" className="text-primary hover:underline">Alessandro</a>,{" "}
70
+ <a href="https://www.linkedin.com/in/mattia-martino-528363225/" target="_blank" rel="noopener noreferrer" className="text-primary hover:underline"> Mattia</a>,{" "}
71
+ <a href="https://www.linkedin.com/in/michael-sheroubi/" target="_blank" rel="noopener noreferrer" className="text-primary hover:underline">Michael</a>,{" "}
72
+ <a href="https://www.linkedin.com/in/michael-sheroubi/" target="_blank" rel="noopener noreferrer" className="text-primary hover:underline">Emiliano</a>, and{" "}
73
+ <a href="https://felixzieger.de/" target="_blank" rel="noopener noreferrer" className="text-primary hover:underline">Felix</a>{" "}
74
+ </p>
75
+ </div>
76
+ </motion.div >
77
+
78
 
79
  <Dialog open={showHighScores} onOpenChange={setShowHighScores}>
80
  <DialogContent className="max-h-[90vh] overflow-y-auto sm:max-w-[600px]">
src/components/game/leaderboard/ScoresTable.tsx CHANGED
@@ -56,6 +56,8 @@ const getLanguageEmoji = (language: string) => {
56
  return '🇮🇹';
57
  case 'es':
58
  return '🇪🇸';
 
 
59
  default:
60
  return '🌐';
61
  }
 
56
  return '🇮🇹';
57
  case 'es':
58
  return '🇪🇸';
59
+ case 'pt':
60
+ return '🇵🇹';
61
  default:
62
  return '🌐';
63
  }
src/contexts/LanguageContext.tsx CHANGED
@@ -8,7 +8,7 @@ interface LanguageContextType {
8
 
9
  export const LanguageContext = createContext<LanguageContextType>({
10
  language: 'en',
11
- setLanguage: () => {},
12
  });
13
 
14
  interface LanguageProviderProps {
@@ -21,7 +21,7 @@ export const LanguageProvider = ({ children }: LanguageProviderProps) => {
21
  useEffect(() => {
22
  const savedLang = localStorage.getItem('language') as Language;
23
  console.log('[LanguageContext] Initial load - Saved language:', savedLang);
24
- if (savedLang && ['en', 'fr', 'de', 'it', 'es'].includes(savedLang)) {
25
  setLanguage(savedLang);
26
  }
27
  }, []);
 
8
 
9
  export const LanguageContext = createContext<LanguageContextType>({
10
  language: 'en',
11
+ setLanguage: () => { },
12
  });
13
 
14
  interface LanguageProviderProps {
 
21
  useEffect(() => {
22
  const savedLang = localStorage.getItem('language') as Language;
23
  console.log('[LanguageContext] Initial load - Saved language:', savedLang);
24
+ if (savedLang && ['en', 'fr', 'de', 'it', 'es', 'pt'].includes(savedLang)) {
25
  setLanguage(savedLang);
26
  }
27
  }, []);
src/i18n/translations/de.ts CHANGED
@@ -6,7 +6,7 @@ export const de = {
6
  buildSubtitle: "Fügt abwechselnd Wörter hinzu, um einen Satz zu bilden",
7
  startSentence: "Beginne deinen Satz...",
8
  inputPlaceholder: "Gib EIN Wort ein...",
9
- addWord: "Wort hinzufügen",
10
  makeGuess: "Raten",
11
  aiThinking: "KI denkt nach...",
12
  aiDelayed: "Die KI ist derzeit beschäftigt. Bitte versuche es gleich noch einmal.",
 
6
  buildSubtitle: "Fügt abwechselnd Wörter hinzu, um einen Satz zu bilden",
7
  startSentence: "Beginne deinen Satz...",
8
  inputPlaceholder: "Gib EIN Wort ein...",
9
+ addWord: "Hinzufügen",
10
  makeGuess: "Raten",
11
  aiThinking: "KI denkt nach...",
12
  aiDelayed: "Die KI ist derzeit beschäftigt. Bitte versuche es gleich noch einmal.",
src/i18n/translations/index.ts CHANGED
@@ -3,13 +3,15 @@ import { fr } from './fr';
3
  import { de } from './de';
4
  import { it } from './it';
5
  import { es } from './es';
 
6
 
7
  export const translations = {
8
  en,
9
  fr,
10
  de,
11
  it,
12
- es
 
13
  } as const;
14
 
15
  export type Language = keyof typeof translations;
 
3
  import { de } from './de';
4
  import { it } from './it';
5
  import { es } from './es';
6
+ import { pt } from './pt';
7
 
8
  export const translations = {
9
  en,
10
  fr,
11
  de,
12
  it,
13
+ es,
14
+ pt,
15
  } as const;
16
 
17
  export type Language = keyof typeof translations;
src/i18n/translations/pt.ts ADDED
@@ -0,0 +1,178 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ export const pt = {
2
+ game: {
3
+ title: "Think in Sync",
4
+ round: "Rodada",
5
+ buildDescription: "Construam uma frase juntos",
6
+ buildSubtitle: "Adicionem palavras alternadamente para criar uma frase",
7
+ startSentence: "Comece a construir sua frase...",
8
+ inputPlaceholder: "Insira UMA palavra...",
9
+ addWord: "Adicionar palavra",
10
+ makeGuess: "Adivinhar",
11
+ aiThinking: "A IA está pensando...",
12
+ aiDelayed: "A IA está ocupada no momento. Por favor, tente novamente mais tarde.",
13
+ invalidWord: "Palavra inválida",
14
+ cantUseTargetWord: "Não use a palavra secreta",
15
+ shorterWord: "Use uma palavra mais curta",
16
+ lettersOnly: "Por favor, use apenas letras",
17
+ singleWordOnly: "Por favor, insira apenas uma palavra",
18
+ leaveGameTitle: "Sair do jogo?",
19
+ leaveGameDescription: "Seu progresso atual será perdido. Tem certeza de que deseja sair?",
20
+ cancel: "Cancelar",
21
+ confirm: "Confirmar",
22
+ describeWord: "Seu objetivo é descrever a palavra",
23
+ nextRound: "Próxima Rodada",
24
+ playAgain: "Jogar Novamente",
25
+ saveScore: "Salvar Pontuação",
26
+ playNewWords: "Jogar novas palavras",
27
+ review: {
28
+ title: "Resumo do Jogo",
29
+ successfulRounds: "Rodadas Bem-sucedidas",
30
+ description: "Aqui estão seus resultados:",
31
+ playAgain: "Jogar as mesmas palavras novamente",
32
+ playNewWords: "Jogar novas palavras",
33
+ saveScore: "Salvar Pontuação",
34
+ shareGame: "Compartilhar",
35
+ urlCopied: "URL copiada!",
36
+ urlCopiedDesc: "Compartilhe esta URL com amigos para que joguem com as mesmas palavras",
37
+ urlCopyError: "Erro ao copiar a URL",
38
+ urlCopyErrorDesc: "Por favor, tente copiar a URL manualmente",
39
+ youWin: "Você ganhou!",
40
+ youLost: "Você perdeu!",
41
+ friendScore: (score: number, avgWords: string) =>
42
+ `A pessoa que te desafiou completou ${score} rodadas com sucesso com uma média de ${avgWords} palavras.`,
43
+ word: "Palavra",
44
+ yourWords: "Você",
45
+ friendWords: "Amigo",
46
+ result: "Resultado",
47
+ details: "Detalhes",
48
+ yourDescription: "Sua Descrição",
49
+ friendDescription: "Descrição do Amigo",
50
+ aiGuessed: "A IA adivinhou",
51
+ words: "Palavras"
52
+ },
53
+ invitation: {
54
+ title: "Convite para o Jogo",
55
+ description: "Ei, você foi convidado para jogar! Jogue agora para ver como se sai com as mesmas palavras!"
56
+ },
57
+ error: {
58
+ title: "Não foi possível iniciar o jogo",
59
+ description: "Por favor, tente novamente mais tarde."
60
+ }
61
+ },
62
+ leaderboard: {
63
+ title: "Maiores Pontuações",
64
+ yourScore: "Sua Pontuação",
65
+ roundCount: "rodadas",
66
+ wordsPerRound: "palavras por rodada",
67
+ enterName: "Insira seu nome",
68
+ submitting: "Enviando...",
69
+ submit: "Enviar Pontuação",
70
+ rank: "Posição",
71
+ player: "Jogador",
72
+ roundsColumn: "Rodadas",
73
+ avgWords: "Média de Palavras",
74
+ noScores: "Ainda não há pontuações",
75
+ previous: "Anterior",
76
+ next: "Próximo",
77
+ success: "Pontuação enviada com sucesso!",
78
+ theme: "Tema",
79
+ actions: "Ações",
80
+ playSameWords: "Jogar com as mesmas palavras",
81
+ scoreUpdated: "Pontuação atualizada!",
82
+ scoreUpdatedDesc: "Sua pontuação anterior para este jogo foi atualizada",
83
+ scoreSubmitted: "Pontuação enviada!",
84
+ scoreSubmittedDesc: "Sua pontuação foi adicionada ao placar",
85
+ modes: {
86
+ daily: "Desafio Diário",
87
+ "all-time": "Histórico"
88
+ },
89
+ error: {
90
+ invalidName: "Por favor, insira um nome válido",
91
+ noRounds: "Você deve completar pelo menos uma rodada",
92
+ alreadySubmitted: "Pontuação já enviada",
93
+ newHighScore: "Nova Maior Pontuação!",
94
+ beatRecord: "Você superou seu recorde anterior de {score}!",
95
+ notHigher: "Pontuação de {current} não é superior à sua melhor pontuação de {best}",
96
+ submitError: "Erro ao enviar a pontuação"
97
+ }
98
+ },
99
+ guess: {
100
+ title: "Suposição da IA",
101
+ goalDescription: "Seu objetivo era descrever a palavra",
102
+ providedDescription: "Você forneceu a descrição",
103
+ aiGuessedDescription: "Com base nesta descrição, a IA adivinhou",
104
+ correct: "Isso está correto!",
105
+ incorrect: "Isso está incorreto.",
106
+ nextRound: "Próxima Rodada",
107
+ playAgain: "Jogar Novamente",
108
+ viewLeaderboard: "Ver Placar",
109
+ cheatingDetected: "Trapaça detectada!"
110
+ },
111
+ themes: {
112
+ title: "Escolha um Tema",
113
+ subtitle: "Selecione um tema para a palavra que a IA tentará adivinhar",
114
+ standard: "Padrão",
115
+ technology: "Tecnologia",
116
+ sports: "Esportes",
117
+ food: "Comida",
118
+ custom: "Tema Personalizado",
119
+ customPlaceholder: "Insira seu tema personalizado...",
120
+ continue: "Continuar",
121
+ generating: "Gerando...",
122
+ pressKey: "Pressione",
123
+ playing: "Tema"
124
+ },
125
+ welcome: {
126
+ title: "Think in Sync",
127
+ subtitle: "Forme uma equipe com a IA para criar uma pista e deixe outra IA adivinhar sua palavra secreta!",
128
+ startButton: "Iniciar jogo",
129
+ startDailyButton: "Desafio Diário",
130
+ startNewButton: "Novo Jogo",
131
+ dailyLeaderboard: "Placar diário",
132
+ howToPlay: "Como jogar",
133
+ leaderboard: "Placar",
134
+ credits: "Criado durante o",
135
+ likeGameText: "Se você quiser apoiar este jogo",
136
+ contest: {
137
+ prize: "Estamos preparando algo...",
138
+ terms: "Descubra mais",
139
+ howTo: "Para se antecipar ao que planejamos:",
140
+ conditions: [
141
+ "Jogue Pense em Sincronia usando a lista de palavras padrão",
142
+ "Defina seu nome no placar igual ao seu nome de usuário no Hugging Face",
143
+ "Curta nosso projeto no Hugging Face"
144
+ ],
145
+ deadline: "Em breve anunciaremos os detalhes aqui",
146
+ prizes: {
147
+ title: "Compita pelos 5 primeiros lugares e ganhe:",
148
+ list: [
149
+ "🥇 1º: 50€",
150
+ "🥈 2º: 20€",
151
+ "🥉 3º: 10€",
152
+ "🎖️ 4º e 5º: 10€ cada"
153
+ ]
154
+ },
155
+ fairPlay: "🚨 O jogo limpo está sendo monitorado. Qualquer trapaça resultará em desclassificação!"
156
+ },
157
+ likeOnHuggingface: "Curta no Hugging Face"
158
+ },
159
+ howToPlay: {
160
+ setup: {
161
+ title: "Preparação",
162
+ description: "Escolha um tema e obtenha uma palavra secreta que a IA tentará adivinhar."
163
+ },
164
+ goal: {
165
+ title: "Objetivo",
166
+ description: "Construa frases junto com a IA que descrevam sua palavra sem usá-la diretamente."
167
+ },
168
+ rules: {
169
+ title: "Regras",
170
+ items: [
171
+ "Adicione palavras alternadamente para construir frases descritivas",
172
+ "Não use a palavra secreta ou suas variações",
173
+ "Seja criativo e descritivo",
174
+ "A IA tentará adivinhar sua palavra após cada frase"
175
+ ]
176
+ }
177
+ }
178
+ };
src/lib/words-food.ts CHANGED
@@ -201,6 +201,48 @@ export const spanishFoodWords = [
201
  "MERMELADA"
202
  ];
203
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
204
  export const getRandomFoodWord = (language: string = 'en') => {
205
  let wordList;
206
  switch (language) {
@@ -216,8 +258,11 @@ export const getRandomFoodWord = (language: string = 'en') => {
216
  case 'es':
217
  wordList = spanishFoodWords;
218
  break;
 
 
 
219
  default:
220
  wordList = englishFoodWords;
221
  }
222
  return wordList[Math.floor(Math.random() * wordList.length)];
223
- };
 
201
  "MERMELADA"
202
  ];
203
 
204
+ export const portugueseFoodWords = [
205
+ "PIZZA",
206
+ "PASTA",
207
+ "PÃO",
208
+ "QUEIJO",
209
+ "MAÇÃ",
210
+ "BANANA",
211
+ "LARANJA",
212
+ "CENOURA",
213
+ "BATATA",
214
+ "TOMATE",
215
+ "FRANGO",
216
+ "CARNE",
217
+ "PEIXE",
218
+ "ARROZ",
219
+ "SOPA",
220
+ "SALADA",
221
+ "BOLO",
222
+ "BOLACHA",
223
+ "CHOCOLATE",
224
+ "MEL",
225
+ "UVAS",
226
+ "LIMÃO",
227
+ "PIMENTA",
228
+ "CEBOLA",
229
+ "ALHO",
230
+ "COUVE",
231
+ "BRÓCOLIS",
232
+ "ESPINAFRE",
233
+ "COGUMELO",
234
+ "ABÓBORA",
235
+ "ABOBRINHA",
236
+ "PIMENTÃO",
237
+ "MILHO",
238
+ "ABACATE",
239
+ "IOGURTE",
240
+ "NOZES",
241
+ "CEREAIS",
242
+ "CREME",
243
+ "GELEIA"
244
+ ];
245
+
246
  export const getRandomFoodWord = (language: string = 'en') => {
247
  let wordList;
248
  switch (language) {
 
258
  case 'es':
259
  wordList = spanishFoodWords;
260
  break;
261
+ case 'pt':
262
+ wordList = portugueseFoodWords;
263
+ break;
264
  default:
265
  wordList = englishFoodWords;
266
  }
267
  return wordList[Math.floor(Math.random() * wordList.length)];
268
+ };
src/lib/words-sports.ts CHANGED
@@ -213,6 +213,46 @@ export const spanishSportsWords = [
213
  "LACROSSE"
214
  ];
215
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
216
  export const getRandomSportsWord = (language: string = 'en') => {
217
  let wordList;
218
  switch (language) {
@@ -228,6 +268,9 @@ export const getRandomSportsWord = (language: string = 'en') => {
228
  case 'es':
229
  wordList = spanishSportsWords;
230
  break;
 
 
 
231
  default:
232
  wordList = englishSportsWords;
233
  }
 
213
  "LACROSSE"
214
  ];
215
 
216
+ export const portugueseSportsWords = [
217
+ "FUTEBOL",
218
+ "TÊNIS",
219
+ "GOLFE",
220
+ "BEISEBOL",
221
+ "BASQUETEBOL",
222
+ "VÓLEI",
223
+ "HÓQUEI",
224
+ "RÚGUEBI",
225
+ "CRÍQUETE",
226
+ "NATAÇÃO",
227
+ "CORRIDA",
228
+ "CICLISMO",
229
+ "ESQUI",
230
+ "BOXE",
231
+ "PATINAÇÃO",
232
+ "SURFE",
233
+ "ESCALADA",
234
+ "MERGULHO",
235
+ "VELA",
236
+ "LUTA",
237
+ "GINÁSTICA",
238
+ "ESGRIMA",
239
+ "MOTOCICLISMO",
240
+ "TIRO",
241
+ "HIPISMO",
242
+ "ANDEBOL",
243
+ "SNOWBOARD",
244
+ "POLO AQUÁTICO",
245
+ "TRIÁTLO",
246
+ "HALTEROFILISMO",
247
+ "JUDÔ",
248
+ "TAEKWONDO",
249
+ "SKATEBOARD",
250
+ "WINDSURF",
251
+ "BADMINTON",
252
+ "REMO",
253
+ "LACROSSE"
254
+ ];
255
+
256
  export const getRandomSportsWord = (language: string = 'en') => {
257
  let wordList;
258
  switch (language) {
 
268
  case 'es':
269
  wordList = spanishSportsWords;
270
  break;
271
+ case 'pt':
272
+ wordList = portugueseSportsWords;
273
+ break;
274
  default:
275
  wordList = englishSportsWords;
276
  }
src/lib/words-standard.ts CHANGED
@@ -1,3 +1,5 @@
 
 
1
  export const englishWords = [
2
  "DOG",
3
  "CAT",
@@ -1112,6 +1114,230 @@ export const spanishWords = [
1112
  "CÁMARA"
1113
  ];
1114
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1115
  export const getRandomWord = (language: string = 'en') => {
1116
  let wordList;
1117
  switch (language) {
@@ -1127,6 +1353,9 @@ export const getRandomWord = (language: string = 'en') => {
1127
  case 'es':
1128
  wordList = spanishWords;
1129
  break;
 
 
 
1130
  default:
1131
  wordList = englishWords;
1132
  }
 
1
+ import { portugueseFoodWords } from "./words-food";
2
+
3
  export const englishWords = [
4
  "DOG",
5
  "CAT",
 
1114
  "CÁMARA"
1115
  ];
1116
 
1117
+ export const portugueseWords = [
1118
+ "CÃO",
1119
+ "GATO",
1120
+ "SOL",
1121
+ "CHUVA",
1122
+ "ÁRVORE",
1123
+ "ESTRELA",
1124
+ "LUA",
1125
+ "PEIXE",
1126
+ "PÁSSARO",
1127
+ "NUVEM",
1128
+ "CÉU",
1129
+ "VENTO",
1130
+ "NEVE",
1131
+ "FLOR",
1132
+ "BORBOLETA",
1133
+ "ÁGUA",
1134
+ "OCEANO",
1135
+ "RIO",
1136
+ "MONTANHA",
1137
+ "FLORESTA",
1138
+ "CASA",
1139
+ "VELA",
1140
+ "JARDIM",
1141
+ "PONTE",
1142
+ "ILHA",
1143
+ "BRISA",
1144
+ "LUZ",
1145
+ "TROVÃO",
1146
+ "ARCO-ÍRIS",
1147
+ "SORRISO",
1148
+ "AMIGO",
1149
+ "FAMÍLIA",
1150
+ "MAÇÃ",
1151
+ "BANANA",
1152
+ "CARRO",
1153
+ "BARCO",
1154
+ "BOLA",
1155
+ "BOLO",
1156
+ "RÃ",
1157
+ "CAVALO",
1158
+ "LEÃO",
1159
+ "MACACO",
1160
+ "AVIÃO",
1161
+ "TREM",
1162
+ "DOCE",
1163
+ "PIPA",
1164
+ "BALÃO",
1165
+ "PARQUE",
1166
+ "PRAIA",
1167
+ "BRINQUEDO",
1168
+ "LIVRO",
1169
+ "BOLHA",
1170
+ "CONCHA",
1171
+ "CANETA",
1172
+ "GELO",
1173
+ "CHAPÉU",
1174
+ "SAPATO",
1175
+ "RELÓGIO",
1176
+ "CAMA",
1177
+ "XÍCARA",
1178
+ "CHAVE",
1179
+ "PORTA",
1180
+ "FRANGO",
1181
+ "PATO",
1182
+ "OVELHA",
1183
+ "VACA",
1184
+ "PORCO",
1185
+ "CABRA",
1186
+ "RAPOSA",
1187
+ "URSO",
1188
+ "VEADO",
1189
+ "CORUJA",
1190
+ "OVO",
1191
+ "NINHO",
1192
+ "PEDRA",
1193
+ "FOLHA",
1194
+ "PINCEL",
1195
+ "DENTE",
1196
+ "MÃO",
1197
+ "PÉS",
1198
+ "OLHO",
1199
+ "NARIZ",
1200
+ "ORELHA",
1201
+ "BOCA",
1202
+ "CRIANÇA",
1203
+ "CAPA DE CHUVA",
1204
+ "ESCADA",
1205
+ "JANELA",
1206
+ "MÉDICO",
1207
+ "ENFERMEIRA",
1208
+ "PROFESSOR",
1209
+ "ESTUDANTE",
1210
+ "LÁPIS",
1211
+ "MESA",
1212
+ "CADEIRA",
1213
+ "LÂMPADA",
1214
+ "ESPELHO",
1215
+ "TIGELA",
1216
+ "PRATO",
1217
+ "COLHER",
1218
+ "GARFO",
1219
+ "FACA",
1220
+ "COPO",
1221
+ "CANECA",
1222
+ "RÉGUA",
1223
+ "PAPEL",
1224
+ "CESTA",
1225
+ "TAPETE",
1226
+ "SOFÁ",
1227
+ "TELEVISÃO",
1228
+ "RÁDIO",
1229
+ "BATERIA",
1230
+ "VELA", // duplicado
1231
+ "CERCA",
1232
+ "CAIXA DE CORREIO",
1233
+ "TIJOLO",
1234
+ "LANTERNA",
1235
+ "RODA",
1236
+ "SINO",
1237
+ "GUARDA-CHUVA",
1238
+ "CAMINHÃO",
1239
+ "MOTOCICLETA",
1240
+ "BICICLETA",
1241
+ "FOGÃO",
1242
+ "GELADEIRA",
1243
+ "MICRO-ONDAS",
1244
+ "MÁQUINA DE LAVAR",
1245
+ "SECADORA",
1246
+ "FORNO",
1247
+ "VENTILADOR",
1248
+ "PINCEI", // pincel de pintura
1249
+ "BALDE",
1250
+ "ESPONJA",
1251
+ "SABÃO",
1252
+ "TOALHA",
1253
+ "TECIDO",
1254
+ "TESOURA",
1255
+ "FITA",
1256
+ "FITA", // FITA (pode ser “LAÇO” para diferenciar)
1257
+ "LINHA",
1258
+ "AGULHA",
1259
+ "BOTÃO",
1260
+ "ZÍPER",
1261
+ "PANTUFA",
1262
+ "CASACO",
1263
+ "LUVAS SEM DEDOS",
1264
+ "CACHECOL",
1265
+ "LUVAS",
1266
+ "CALÇAS",
1267
+ "CAMISA",
1268
+ "JAQUETA",
1269
+ "VESTIDO",
1270
+ "SAIA",
1271
+ "MEIA",
1272
+ "BOTA",
1273
+ "SANDÁLIA",
1274
+ "CHAPÉU", // duplicado
1275
+ "BONÉ",
1276
+ "MÁSCARA",
1277
+ "RELÓGIO", // duplicado
1278
+ "COLAR",
1279
+ "PULSEIRA",
1280
+ "ANEL",
1281
+ "BRINCO",
1282
+ "MOCHILA",
1283
+ "MALA",
1284
+ "BILHETE",
1285
+ "PASSAPORTE",
1286
+ "MAPA",
1287
+ "BÚSSOLA",
1288
+ "TOCHA",
1289
+ "LANTERNA",
1290
+ "FOGUEIRA",
1291
+ "PIQUENIQUE",
1292
+ "BANCO",
1293
+ "CERCA", // duplicado
1294
+ "PORTÃO",
1295
+ "PLACA",
1296
+ "SEMAFÓRO",
1297
+ "CALÇADA",
1298
+ "LANTERNA", // duplicado
1299
+ "BALÃO", // duplicado
1300
+ "CARTÃO POSTAL",
1301
+ "SELO",
1302
+ "CARTA",
1303
+ "ENVELOPE",
1304
+ "ESTACIONAMENTO",
1305
+ "RUA",
1306
+ "RODOVIA",
1307
+ "PONTE", // duplicado
1308
+ "TÚNEL",
1309
+ "ESTÁTUA",
1310
+ "FONTE",
1311
+ "TORRE",
1312
+ "CASTELO",
1313
+ "PIRÂMIDE",
1314
+ "PLANETA",
1315
+ "GALÁXIA",
1316
+ "SATÉLITE",
1317
+ "ASTRONAUTA",
1318
+ "TELESCÓPIO",
1319
+ "MICROSCÓPIO",
1320
+ "ÍMÃ",
1321
+ "BATERIA", // duplicado
1322
+ "LÂMPADA",
1323
+ "TOMADA",
1324
+ "TOMADA", // PLUG (pode ser “PLUGUE,” mas “TOMADA” também é comum)
1325
+ "CABO",
1326
+ "INTERRUPTOR",
1327
+ "CIRCUITO",
1328
+ "ROBOT",
1329
+ "COMPUTADOR",
1330
+ "MOUSE",
1331
+ "TECLADO",
1332
+ "TELA",
1333
+ "IMPRESSORA",
1334
+ "ALTO-FALANTE",
1335
+ "FONES DE OUVIDO",
1336
+ "TELEFONE",
1337
+ "CÂMERA"
1338
+ ];
1339
+
1340
+
1341
  export const getRandomWord = (language: string = 'en') => {
1342
  let wordList;
1343
  switch (language) {
 
1353
  case 'es':
1354
  wordList = spanishWords;
1355
  break;
1356
+ case 'pt':
1357
+ wordList = portugueseWords;
1358
+ break;
1359
  default:
1360
  wordList = englishWords;
1361
  }
supabase/functions/generate-daily-challenge/index.ts CHANGED
@@ -8,224 +8,215 @@ const corsHeaders = {
8
  };
9
 
10
  const wordTranslations: Record<string, Record<string, string>> = {
11
- "CAT": { de: "KATZE", fr: "CHAT", it: "GATTO", es: "GATO" },
12
- "DOG": { de: "HUND", fr: "CHIEN", it: "CANE", es: "PERRO" },
13
- "SUN": { de: "SONNE", fr: "SOLEIL", it: "SOLE", es: "SOL" },
14
- "RAIN": { de: "REGEN", fr: "PLUIE", it: "PIOGGIA", es: "LLUVIA" },
15
- "TREE": { de: "BAUM", fr: "ARBRE", it: "ALBERO", es: "ÁRBOL" },
16
- "STAR": { de: "STERN", fr: "ÉTOILE", it: "STELLA", es: "ESTRELLA" },
17
- "MOON": { de: "MOND", fr: "LUNE", it: "LUNA", es: "LUNA" },
18
- "FISH": { de: "FISCH", fr: "POISSON", it: "PESCE", es: "PEZ" },
19
- "BIRD": { de: "VOGEL", fr: "OISEAU", it: "UCCELLO", es: "PÁJARO" },
20
- "CLOUD": { de: "WOLKE", fr: "NUAGE", it: "NUVOLA", es: "NUBE" },
21
- "SKY": { de: "HIMMEL", fr: "CIEL", it: "CIELO", es: "CIELO" },
22
- "WIND": { de: "WIND", fr: "VENT", it: "VENTO", es: "VIENTO" },
23
- "SNOW": { de: "SCHNEE", fr: "NEIGE", it: "NEVE", es: "NIEVE" },
24
- "FLOWER": { de: "BLUME", fr: "FLEUR", it: "FIORE", es: "FLOR" },
25
- "BUTTERFLY": { de: "SCHMETTERLING", fr: "PAPILLON", it: "FARFALLA", es: "MARIPOSA" },
26
- "WATER": { de: "WASSER", fr: "EAU", it: "ACQUA", es: "AGUA" },
27
- "OCEAN": { de: "OZEAN", fr: "OCÉAN", it: "OCEANO", es: "OCÉANO" },
28
- "RIVER": { de: "FLUSS", fr: "FLEUVE", it: "FIUME", es: "RÍO" },
29
- "MOUNTAIN": { de: "BERG", fr: "MONTAGNE", it: "MONTAGNA", es: "MONTAÑA" },
30
- "FOREST": { de: "WALD", fr: "FORÊT", it: "FORESTA", es: "BOSQUE" },
31
- "HOUSE": { de: "HAUS", fr: "MAISON", it: "CASA", es: "CASA" },
32
- "CANDLE": { de: "KERZE", fr: "BOUGIE", it: "CANDELA", es: "VELA" },
33
- "GARDEN": { de: "GARTEN", fr: "JARDIN", it: "GIARDINO", es: "JARDÍN" },
34
- "BRIDGE": { de: "BRÜCKE", fr: "PONT", it: "PONTE", es: "PUENTE" },
35
- "ISLAND": { de: "INSEL", fr: "ÎLE", it: "ISOLA", es: "ISLA" },
36
- "BREEZE": { de: "BRISE", fr: "BRISE", it: "BREZZA", es: "BRISA" },
37
- "LIGHT": { de: "LICHT", fr: "LUMIÈRE", it: "LUCE", es: "LUZ" },
38
- "THUNDER": { de: "DONNER", fr: "TONNERRE", it: "TUONO", es: "TRUENO" },
39
- "RAINBOW": { de: "REGENBOGEN", fr: "ARC-EN-CIEL", it: "ARCOBALENO", es: "ARCOÍRIS" },
40
- "SMILE": { de: "LÄCHELN", fr: "SOURIRE", it: "SORRISO", es: "SONRISA" },
41
- "FRIEND": { de: "FREUND", fr: "AMI", it: "AMICO", es: "AMIGO" },
42
- "FAMILY": { de: "FAMILIE", fr: "FAMILLE", it: "FAMIGLIA", es: "FAMILIA" },
43
- "APPLE": { de: "APFEL", fr: "POMME", it: "MELA", es: "MANZANA" },
44
- "BANANA": { de: "BANANE", fr: "BANANE", it: "BANANA", es: "BANANA" },
45
- "CAR": { de: "AUTO", fr: "VOITURE", it: "AUTO", es: "COCHE" },
46
- "BOAT": { de: "BOOT", fr: "BATEAU", it: "BARCA", es: "BARCO" },
47
- "BALL": { de: "BALL", fr: "BALLE", it: "PALLA", es: "PELOTA" },
48
- "CAKE": { de: "KUCHEN", fr: "GÂTEAU", it: "TORTA", es: "PASTEL" },
49
- "FROG": { de: "FROSCH", fr: "GRENOUILLE", it: "RANA", es: "RANA" },
50
- "HORSE": { de: "PFERD", fr: "CHEVAL", it: "CAVALLO", es: "CABALLO" },
51
- "LION": { de: "LÖWE", fr: "LION", it: "LEONE", es: "LEÓN" },
52
- "MONKEY": { de: "AFFE", fr: "SINGE", it: "SCIMMIA", es: "MONO" },
53
- "PANDA": { de: "PANDA", fr: "PANDA", it: "PANDA", es: "PANDA" },
54
- "PLANE": { de: "FLUGZEUG", fr: "AVION", it: "AEREO", es: "AVIÓN" },
55
- "TRAIN": { de: "ZUG", fr: "TRAIN", it: "TRENO", es: "TREN" },
56
- "CANDY": { de: "SÜSSIGKEIT", fr: "BONBON", it: "CARAMELLA", es: "CARAMELO" },
57
- "KITE": { de: "DRACHEN", fr: "CERF-VOLANT", it: "AQUILONE", es: "COMETA" },
58
- "BALLOON": { de: "BALLON", fr: "BALLON", it: "PALLONCINO", es: "GLOBO" },
59
- "PARK": { de: "PARK", fr: "PARC", it: "PARCO", es: "PARQUE" },
60
- "BEACH": { de: "STRAND", fr: "PLAGE", it: "SPIAGGIA", es: "PLAYA" },
61
- "TOY": { de: "SPIELZEUG", fr: "JOUET", it: "GIOCATTOLO", es: "JUGUETE" },
62
- "BOOK": { de: "BUCH", fr: "LIVRE", it: "LIBRO", es: "LIBRO" },
63
- "BUBBLE": { de: "BLASE", fr: "BULLE", it: "BOLLA", es: "BURBUJA" },
64
- "SHELL": { de: "MUSCHEL", fr: "COQUILLAGE", it: "CONCHIGLIA", es: "CONCHA" },
65
- "PEN": { de: "STIFT", fr: "STYLO", it: "PENNA", es: "BOLÍGRAFO" },
66
- "ICE": { de: "EIS", fr: "GLACE", it: "GHIACCIO", es: "HIELO" },
67
- "HAT": { de: "HUT", fr: "CHAPEAU", it: "CAPPELLO", es: "SOMBRERO" },
68
- "SHOE": { de: "SCHUH", fr: "CHAUSSURE", it: "SCARPA", es: "ZAPATO" },
69
- "CLOCK": { de: "UHR", fr: "HORLOGE", it: "OROLOGIO", es: "RELOJ" },
70
- "BED": { de: "BETT", fr: "LIT", it: "LETTO", es: "CAMA" },
71
- "CUP": { de: "TASSE", fr: "TASSE", it: "Tazza", es: "TazA" },
72
- "KEY": { de: "SCHLÜSSEL", fr: "CLÉ", it: "CHIAVE", es: "LLAVE" },
73
- "DOOR": { de: "TÜR", fr: "PORTE", it: "PORTA", es: "PUERTA" },
74
- "CHICKEN": { de: "HÜHNCHEN", fr: "POULET", it: "POLLO", es: "POLLO" },
75
- "DUCK": { de: "ENTE", fr: "CANARD", it: "ANATRA", es: "PATO" },
76
- "SHEEP": { de: "SCHAF", fr: "MOUTON", it: "PECORA", es: "OVEJA" },
77
- "COW": { de: "KUH", fr: "VACHE", it: "MUCCA", es: "VACA" },
78
- "PIG": { de: "SCHWEIN", fr: "COCHON", it: "MAIALE", es: "CERDO" },
79
- "GOAT": { de: "ZIEGE", fr: "CHÈVRE", it: "CAPRA", es: "CABRA" },
80
- "FOX": { de: "FUCHS", fr: "RENARD", it: "VOLPE", es: "ZORRO" },
81
- "BEAR": { de: "BÄR", fr: "OURS", it: "ORSO", es: "OSO" },
82
- "DEER": { de: "REH", fr: "CERF", it: "CERVO", es: "CIERVO" },
83
- "OWL": { de: "EULE", fr: "HIBOU", it: "GUFO", es: "BÚHO" },
84
- "EGG": { de: "EI", fr: "ŒUF", it: "UOVO", es: "HUEVO" },
85
- "NEST": { de: "NEST", fr: "NID", it: "NIDO", es: "NIDO" },
86
- "ROCK": { de: "STEIN", fr: "ROCHE", it: "ROCCIA", es: "ROCA" },
87
- "LEAF": { de: "BLATT", fr: "FEUILLE", it: "FOGLIA", es: "HOJA" },
88
- "BRUSH": { de: "PINSEL", fr: "BROSSE", it: "PENNELLO", es: "Pincel" },
89
- "TOOTH": { de: "ZAHN", fr: "DENT", it: "DENTE", es: "DIENTE" },
90
- "HAND": { de: "HAND", fr: "MAIN", it: "MANO", es: "MANO" },
91
- "FEET": { de: "FÜSSE", fr: "PIEDS", it: "PIEDI", es: "PIES" },
92
- "EYE": { de: "AUGE", fr: "ŒIL", it: "OCCHIO", es: "OJO" },
93
- "NOSE": { de: "NASE", fr: "NEZ", it: "NASO", es: "NARIZ" },
94
- "EAR": { de: "OHR", fr: "OREILLE", it: "ORECCHIO", es: "OREJA" },
95
- "MOUTH": { de: "MUND", fr: "BOUCHE", it: "BOCCA", es: "BOCA" },
96
- "CHILD": { de: "KIND", fr: "ENFANT", it: "BAMBINO", es: "NIÑO" },
97
- "RAINCOAT": { de: "REGENMANTEL", fr: "IMPERMÉABLE", it: "IMPERMEABILE", es: "IMPERMEABLE" },
98
- "LADDER": { de: "LEITER", fr: "ÉCHELLE", it: "SCALA", es: "ESCALERA" },
99
- "WINDOW": { de: "FENSTER", fr: "FENÊTRE", it: "FINESTRA", es: "VENTANA" },
100
- "DOCTOR": { de: "ARZT", fr: "MÉDECIN", it: "MEDICO", es: "MÉDICO" },
101
- "NURSE": { de: "KRANKENSCHWESTER", fr: "INFIRMIÈRE", it: "INFERMIERA", es: "ENFERMERA" },
102
- "TEACHER": { de: "LEHRER", fr: "ENSEIGNANT", it: "INSEGNANTE", es: "MAESTRO" },
103
- "STUDENT": { de: "STUDENT", fr: "ÉTUDIANT", it: "STUDENTE", es: "ESTUDIANTE" },
104
- "PENCIL": { de: "BLEISTIFT", fr: "CRAYON", it: "MATITA", es: "LÁPIZ" },
105
- "TABLE": { de: "TISCH", fr: "TABLE", it: "Tavolo", es: "MESA" },
106
- "CHAIR": { de: "STUHL", fr: "CHAISE", it: "SEDIA", es: "SILLA" },
107
- "LAMP": { de: "LAMPE", fr: "LAMPE", it: "LAMPADA", es: "LÁMPARA" },
108
- "MIRROR": { de: "SPIEGEL", fr: "MIROIR", it: "SPECCHIO", es: "ESPEJO" },
109
- "BOWL": { de: "SCHÜSSEL", fr: "BOL", it: "CIOTOLA", es: "CUENCO" },
110
- "PLATE": { de: "TELLER", fr: "ASSIETTE", it: "PIATTO", es: "PLATO" },
111
- "SPOON": { de: "LÖFFEL", fr: "CUILLÈRE", it: "CUCCHIAIO", es: "CUCHARA" },
112
- "FORK": { de: "GABEL", fr: "FOURCHETTE", it: "FORCHETTA", es: "TENEDOR" },
113
- "KNIFE": { de: "MESSER", fr: "COUTEAU", it: "COLTELLO", es: "CUCHILLO" },
114
- "GLASS": { de: "GLAS", fr: "VERRE", it: "BICCHIERE", es: "VASO" },
115
- "STRAW": { de: "STROHHALM", fr: "PAILLE", it: "CANNUCCIA", es: "PAJITA" },
116
- "RULER": { de: "LINEAL", fr: "RÈGLE", it: "RIGHELLO", es: "REGLA" },
117
- "PAPER": { de: "PAPIER", fr: "PAPIER", it: "CARTA", es: "PAPEL" },
118
- "BASKET": { de: "KORB", fr: "PANIER", it: "CESTINO", es: "CESTA" },
119
- "CARPET": { de: "TEPPICH", fr: "TAPIS", it: "TAPPETO", es: "ALFOMBRA" },
120
- "SOFA": { de: "SOFA", fr: "CANAPÉ", it: "DIVANO", es: "SOFÁ" },
121
- "TELEVISION": { de: "FERNSEHER", fr: "TÉLÉVISION", it: "TELEVISIONE", es: "TELEVISIÓN" },
122
- "RADIO": { de: "RADIO", fr: "RADIO", it: "RADIO", es: "RADIO" },
123
- "BATTERY": { de: "BATTERIE", fr: "PILE", it: "BATTERIA", es: "BATERÍA" },
124
- "FENCE": { de: "ZAUN", fr: "CLÔTURE", it: "RECINTO", es: "VALLA" },
125
- "MAILBOX": { de: "BRIEFKASTEN", fr: "BOÎTE AUX LETTRES", it: "CASSETTA POSTALE", es: "BUZÓN" },
126
- "BRICK": { de: "BACKSTEIN", fr: "BRIQUE", it: "MATTONE", es: "LADRILLO" },
127
- "LANTERN": { de: "LATERNE", fr: "LANTERNE", it: "LANTERNA", es: "FAROL" },
128
- "WHEEL": { de: "RAD", fr: "ROUE", it: "RUOTA", es: "RUEDA" },
129
- "BELL": { de: "GLOCKE", fr: "CLoche", it: "CAMPANA", es: "CAMPANA" },
130
- "UMBRELLA": { de: "REGENSCHIRM", fr: "PARAPLUIE", it: "OMBRELLO", es: "PARAGUAS" },
131
- "TRUCK": { de: "LASTWAGEN", fr: "CAMION", it: "CAMION", es: "CAMIÓN" },
132
- "MOTORCYCLE": { de: "MOTORRAD", fr: "MOTO", it: "MOTOCICLETTA", es: "MOTOCICLETA" },
133
- "BICYCLE": { de: "FAHRRAD", fr: "VÉLO", it: "BICICLETTA", es: "BICICLETA" },
134
- "STOVE": { de: "HERD", fr: "CUISINIÈRE", it: "FORNELLO", es: "ESTUFA" },
135
- "REFRIGERATOR": { de: "KÜHLSCHRANK", fr: "RÉFRIGÉRATEUR", it: "FRIGORIFERO", es: "REFRIGERADOR" },
136
- "MICROWAVE": { de: "MIKROWELLE", fr: "MICRO-ONDES", it: "MICROONDE", es: "MICROONDAS" },
137
- "WASHER": { de: "WASCHMASCHINE", fr: "LAVE-LINGE", it: "LAVATRICE", es: "LAVADORA" },
138
- "DRYER": { de: "TROCKNER", fr: "SÈCHE-LINGE", it: "ASCUGATRICE", es: "SECADORA" },
139
- "FURNACE": { de: "OFEN", fr: "FOURNAISE", it: "FORNACE", es: "HORNO" },
140
- "FAN": { de: "VENTILATOR", fr: "VENTILATEUR", it: "VENTILATORE", es: "VENTILADOR" },
141
- "PAINTBRUSH": { de: "PINSEL", fr: "PINCEAU", it: "PENNELLO", es: "Pincel" },
142
- "BUCKET": { de: "EIMER", fr: "SEAU", it: "SECCHIO", es: "CUBO" },
143
- "SPONGE": { de: "SCHWAMM", fr: "ÉPONGE", it: "SPUGNA", es: "ESPONJA" },
144
- "SOAP": { de: "SEIFE", fr: "SAVON", it: "SAPONE", es: "JABÓN" },
145
- "TOWEL": { de: "HANDTUCH", fr: "SERVIETTE", it: "ASCIUGAMANO", es: "TOALLA" },
146
- "CLOTH": { de: "STOFF", fr: "TISSU", it: "STOFFA", es: "TELA" },
147
- "SCISSORS": { de: "SCHERE", fr: "CISEAUX", it: "FORBICI", es: "TIJERAS" },
148
- // "TAPE": { de: "KLEBEBAND", fr: "RUBAN ADESÍF", it: "NASTRO ADESIVO", es: "CINTA ADESIVA" },
149
- "RIBBON": { de: "BAND", fr: "RUBAN", it: "NASTRO", es: "CINTA" },
150
- "THREAD": { de: "FADEN", fr: "FIL", it: "FILO", es: "HILO" },
151
- "NEEDLE": { de: "NADEL", fr: "AIGUILLE", it: "AGO", es: "AGUJA" },
152
- "BUTTON": { de: "KNOPF", fr: "BOUTON", it: "BOTTONE", es: "BOTÓN" },
153
- // "ZIPPER": { de: "REISSVERSCHLUSS", fr: "FERMETURE ÉCLAIR", it: "CERNIERA", es: "CREMALLERA" },
154
- "SLIPPER": { de: "HAUSSCHUH", fr: "PANTOUFLE", it: "PANTOFOLE", es: "PANTUFLA" },
155
- "COAT": { de: "MANTEL", fr: "MANTEAU", it: "CAPPOTTO", es: "ABRIGO" },
156
- "MITTEN": { de: "FAUSTHANDSCHUH", fr: "MOUFLE", it: "GUANTO", es: "MANOPLA" },
157
- "SCARF": { de: "SCHAL", fr: "ÉCHARPE", it: "SCIARPA", es: "BUFANDA" },
158
- "GLOVE": { de: "HANDSCHUH", fr: "GANT", it: "GUANTO", es: "GUANTE" },
159
- "PANTS": { de: "HOSE", fr: "PANTALON", it: "PANTALONI", es: "PANTALONES" },
160
- "SHIRT": { de: "HEMD", fr: "CHEMISE", it: "CAMICIA", es: "CAMISA" },
161
- "JACKET": { de: "JACKE", fr: "VESTE", it: "GIACCA", es: "CHAQUETA" },
162
- "DRESS": { de: "KLEID", fr: "ROBE", it: "VESTITO", es: "VESTIDO" },
163
- "SKIRT": { de: "ROCK", fr: "JUPE", it: "GONNA", es: "FALDA" },
164
- "SOCK": { de: "SOCKE", fr: "CHAUSSETTE", it: "CALZINO", es: "CALCETÍN" },
165
- "BOOT": { de: "STIEFEL", fr: "BOTTE", it: "STIVALE", es: "BOTA" },
166
- "SANDAL": { de: "SANDALE", fr: "SANDALE", it: "SANDALO", es: "SANDALIA" },
167
- "CAP": { de: "MÜTZE", fr: "CASQUETTE", it: "BERRETTO", es: "GORRA" },
168
- "MASK": { de: "MASKE", fr: "MASQUE", it: "MASCHERA", es: "MÁSCARA" },
169
- // "SUNGLASSES": { de: "SONNENBRILLE", fr: "LUNETTES DE SOLEIL", it: "OCCHIALI DA SOLE", es: "GAFAS DE SOL" },
170
- "WATCH": { de: "UHR", fr: "MONTRE", it: "OROLOGIO", es: "RELOJ" },
171
- "NECKLACE": { de: "HALSKETTE", fr: "COLLER", it: "COLLANA", es: "COLLAR" },
172
- "BRACELET": { de: "ARMBAND", fr: "BRACELET", it: "BRACCIALE", es: "PULSERA" },
173
- "RING": { de: "RING", fr: "BAGUE", it: "ANELLO", es: "ANILLO" },
174
- // "EARRING": { de: "OHRRING", fr: "BOUCLE D'OREILLE", it: "ORECCHINO", es: "PENDIENTE" },
175
- "BACKPACK": { de: "RUCKSACK", fr: "SAC À DOS", it: "ZAINO", es: "MOCHILA" },
176
- "SUITCASE": { de: "KOFFER", fr: "VALISE", it: "VALIGIA", es: "MALETA" },
177
- "TICKET": { de: "TICKET", fr: "BILLET", it: "BIGLIETTO", es: "BILLETE" },
178
- "PASSPORT": { de: "REISEPASS", fr: "PASSEPORT", it: "PASSAPORTO", es: "PASAPORTE" },
179
- "MAP": { de: "KARTE", fr: "CARTE", it: "MAPP", es: "MAPA" },
180
- "COMPASS": { de: "KOMPASS", fr: "BOUSSOLE", it: "BUSSOLA", es: "BRÚJULA" },
181
- "TORCH": { de: "FACKEL", fr: "TORCHE", it: "TORCIA", es: "ANTORCHA" },
182
- // "FLASHLIGHT": { de: "TASCHENLAMPE", fr: "LAMPE DE POCHE", it: "TORCIA ELETTRICA", es: "LINterna" },
183
- "CAMPFIRE": { de: "LAGERFEUER", fr: "FEU DE CAMP", it: "FALÒ", es: "FOGATA" },
184
- "TENT": { de: "ZELT", fr: "TENTE", it: "TENDA", es: "TIENDA DE CAMPAÑA" },
185
- // "SLEEPINGBAG": { de: "SCHLAFSACK", fr: "SAC DE COUCHAGE", it: "SACCO A PELO", es: "SACO DE DORMIR" },
186
- "PICNIC": { de: "PICKNICK", fr: "PIQUE-NIQUE", it: "PICNIC", es: "PICNIC" },
187
- "BENCH": { de: "BANK", fr: "BANC", it: "PANCHINA", es: "BANCO" },
188
- "GATE": { de: "TOR", fr: "PORTAIL", it: "CANCELLO", es: "PORTÓN" },
189
- "SIGN": { de: "SCHILD", fr: "PANNEAU", it: "SEGNALE", es: "SEÑAL" },
190
- // "CROSSWALK": { de: "ZEBRASTREIFEN", fr: "PASSAGE PIÉTONS", it: "ATTRAVERSAMENTO PEDONALE", es: "PASO DE PEATONES" },
191
- // "TRAFFICLIGHT": { de: "VERKEHRSAMPEL", fr: "FEU DE CIRCULATION", it: "SEMAFORO", es: "SEMÁFORO" },
192
- "SIDEWALK": { de: "BÜRGERSTEIG", fr: "TROTTOIR", it: "MARCIAPIEDE", es: "ACERA" },
193
- "POSTCARD": { de: "POSTKARTE", fr: "CARTE POSTALE", it: "CARTOLINA", es: "POSTAL" },
194
- "STAMP": { de: "BRIEFMARKE", fr: "TIMBRE", it: "FRANCOBOLLO", es: "SELLO" },
195
- "LETTER": { de: "BRIEF", fr: "LETTRE", it: "LETTERA", es: "CARTA" },
196
- "ENVELOPE": { de: "UMSCHLAG", fr: "ENVELOPPE", it: "BUSTA", es: "SOBRE" },
197
- "PARKING": { de: "PARKPLATZ", fr: "PARKING", it: "PARCHEGGIO", es: "ESTACIONAMIENTO" },
198
- "STREET": { de: "STRAßE", fr: "RUE", it: "STRADA", es: "CALLE" },
199
- "HIGHWAY": { de: "AUTOBAHN", fr: "AUTOROUTE", it: "AUTOSTRADA", es: "AUTOPISTA" },
200
- "TUNNEL": { de: "TUNNEL", fr: "TUNNEL", it: "GALLERIA", es: "TÚNEL" },
201
- "STATUE": { de: "STATUE", fr: "STATUE", it: "STATUA", es: "ESTATUA" },
202
- "FOUNTAIN": { de: "BRUNNEN", fr: "FONTAINE", it: "FONTANA", es: "FUENTE" },
203
- "TOWER": { de: "TURM", fr: "TOUR", it: "TORRE", es: "TORRE" },
204
- "CASTLE": { de: "SCHLOSS", fr: "CHÂTEAU", it: "CASTELLO", es: "CASTILLO" },
205
- "PYRAMID": { de: "PYRAMIDE", fr: "PYRAMIDE", it: "PIRAMIDE", es: "PIRÁMIDE" },
206
- "PLANET": { de: "PLANET", fr: "PLANÈTE", it: "PIANETA", es: "PLANETA" },
207
- "GALAXY": { de: "GALAXIE", fr: "GALAXIE", it: "GALASSIA", es: "GALAXIA" },
208
- "SATELLITE": { de: "SATELLIT", fr: "SATELLITE", it: "SATELLITE", es: "SATÉLITE" },
209
- "ASTRONAUT": { de: "ASTRONAUT", fr: "ASTRONAUTE", it: "ASTRONAUTA", es: "ASTRONAUTA" },
210
- "TELESCOPE": { de: "TELESCOP", fr: "TÉLESCOPE", it: "TELESCOPIO", es: "TELESCOPIO" },
211
- "MICROSCOPE": { de: "MIKROSKOP", fr: "MICROSCOPE", it: "MICROSCOPIO", es: "MICROSCOPIO" },
212
- "MAGNET": { de: "MAGNET", fr: "AIMANT", it: "MAGNETE", es: "IMÁN" },
213
- "BULB": { de: "GLÜHBIRNE", fr: "AMPOULE", it: "LAMPADINA", es: "BOMBILLA" },
214
- "SOCKET": { de: "STECKDOSE", fr: "PRISE", it: "PRESA", es: "ENCHUFE" },
215
- "PLUG": { de: "STECKER", fr: "FICHE", it: "SPINA", es: "CLAVIJA" },
216
- "WIRE": { de: "DRAHT", fr: "FIL", it: "FILO", es: "CABLE" },
217
- "SWITCH": { de: "SCHALTER", fr: "INTERRUPTEUR", it: "INTERRUTTORE", es: "INTERRUPTOR" },
218
- "CIRCUIT": { de: "SCHALTUNG", fr: "CIRCUIT", it: "CIRCUITO", es: "CIRCUITO" },
219
- "ROBOT": { de: "ROBOTER", fr: "ROBOT", it: "ROBOT", es: "ROBOT" },
220
- "COMPUTER": { de: "COMPUTER", fr: "ORDINATEUR", it: "COMPUTER", es: "ORDENADOR" },
221
- "MOUSE": { de: "MAUS", fr: "SOURIS", it: "MOUSE", es: "RATÓN" },
222
- "KEYBOARD": { de: "TASTATUR", fr: "CLAVIER", it: "TASTIERA", es: "TECLADO" },
223
- "SCREEN": { de: "BILDSCHIRM", fr: "ÉCRAN", it: "SCHERMO", es: "PANTALLA" },
224
- "PRINTER": { de: "DRUCKER", fr: "IMPRIMANTE", it: "STAMPANTE", es: "IMPRESORA" },
225
- "SPEAKER": { de: "LAUTSPRECHER", fr: "HAUT-PARLEUR", it: "ALTOPARLANTE", es: "ALTAVOZ" },
226
- "HEADPHONE": { de: "KOPFHÖRER", fr: "CASQUE", it: "CUFFIE", es: "AURICULARES" },
227
- "PHONE": { de: "TELEFON", fr: "TÉLÉPHONE", it: "TELEFONO", es: "TELÉFONO" },
228
- // "CAMERA": { de: "KAMERA", fr: "APPAREIL PHOTO", it: "FOTOCAMERA", es: "CÁMARA" },
229
  };
230
 
231
  // Helper function to translate a word to target language
@@ -245,15 +236,11 @@ function generateTranslatedWords(englishWords: string[], targetLang: string): st
245
 
246
  function generateEnglishRandomWords(count: number): string[] {
247
  const words: string[] = [];
248
-
249
  const englishWords = Object.keys(wordTranslations);
250
-
251
- // Create a copy of the word list to avoid duplicates
252
  const availableWords = [...englishWords];
253
 
254
  for (let i = 0; i < count; i++) {
255
  if (availableWords.length === 0) {
256
- // If we run out of unique words, reset the available words
257
  availableWords.push(...englishWords);
258
  }
259
  const randomIndex = Math.floor(Math.random() * availableWords.length);
@@ -282,10 +269,18 @@ serve(async (req) => {
282
  try {
283
  console.log('Starting daily challenge generation...');
284
 
 
 
 
 
 
 
 
 
 
285
  // Initialize Supabase client
286
- const supabaseUrl = Deno.env.get('SUPABASE_URL')!;
287
- const supabaseKey = Deno.env.get('SUPABASE_SERVICE_ROLE_KEY')!;
288
  const supabase = createClient(supabaseUrl, supabaseKey);
 
289
 
290
  // Deactivate current active challenges
291
  console.log('Deactivating current active challenges...');
@@ -301,7 +296,7 @@ serve(async (req) => {
301
 
302
  // Generate one set of English words
303
  const selectedEnglishWords = generateEnglishRandomWords(10);
304
- const languages = ['en', 'de', 'fr', 'it', 'es'];
305
  const challenges: Challenge[] = [];
306
 
307
  for (const language of languages) {
 
8
  };
9
 
10
  const wordTranslations: Record<string, Record<string, string>> = {
11
+ "CAT": { de: "KATZE", fr: "CHAT", it: "GATTO", es: "GATO", pt: "GATO" },
12
+ "DOG": { de: "HUND", fr: "CHIEN", it: "CANE", es: "PERRO", pt: "CÃO" },
13
+ "SUN": { de: "SONNE", fr: "SOLEIL", it: "SOLE", es: "SOL", pt: "SOL" },
14
+ "RAIN": { de: "REGEN", fr: "PLUIE", it: "PIOGGIA", es: "LLUVIA", pt: "CHUVA" },
15
+ "TREE": { de: "BAUM", fr: "ARBRE", it: "ALBERO", es: "ÁRBOL", pt: "ÁRVORE" },
16
+ "STAR": { de: "STERN", fr: "ÉTOILE", it: "STELLA", es: "ESTRELLA", pt: "ESTRELA" },
17
+ "MOON": { de: "MOND", fr: "LUNE", it: "LUNA", es: "LUNA", pt: "LUA" },
18
+ "FISH": { de: "FISCH", fr: "POISSON", it: "PESCE", es: "PEZ", pt: "PEIXE" },
19
+ "BIRD": { de: "VOGEL", fr: "OISEAU", it: "UCCELLO", es: "PÁJARO", pt: "PÁSSARO" },
20
+ "CLOUD": { de: "WOLKE", fr: "NUAGE", it: "NUVOLA", es: "NUBE", pt: "NUVEM" },
21
+ "SKY": { de: "HIMMEL", fr: "CIEL", it: "CIELO", es: "CIELO", pt: "CÉU" },
22
+ "WIND": { de: "WIND", fr: "VENT", it: "VENTO", es: "VIENTO", pt: "VENTO" },
23
+ "SNOW": { de: "SCHNEE", fr: "NEIGE", it: "NEVE", es: "NIEVE", pt: "NEVE" },
24
+ "FLOWER": { de: "BLUME", fr: "FLEUR", it: "FIORE", es: "FLOR", pt: "FLOR" },
25
+ "BUTTERFLY": { de: "SCHMETTERLING", fr: "PAPILLON", it: "FARFALLA", es: "MARIPOSA", pt: "BORBOLETA" },
26
+ "WATER": { de: "WASSER", fr: "EAU", it: "ACQUA", es: "AGUA", pt: "ÁGUA" },
27
+ "OCEAN": { de: "OZEAN", fr: "OCÉAN", it: "OCEANO", es: "OCÉANO", pt: "OCEANO" },
28
+ "RIVER": { de: "FLUSS", fr: "FLEUVE", it: "FIUME", es: "RÍO", pt: "RIO" },
29
+ "MOUNTAIN": { de: "BERG", fr: "MONTAGNE", it: "MONTAGNA", es: "MONTAÑA", pt: "MONTANHA" },
30
+ "FOREST": { de: "WALD", fr: "FORÊT", it: "FORESTA", es: "BOSQUE", pt: "FLORESTA" },
31
+ "HOUSE": { de: "HAUS", fr: "MAISON", it: "CASA", es: "CASA", pt: "CASA" },
32
+ "CANDLE": { de: "KERZE", fr: "BOUGIE", it: "CANDELA", es: "VELA", pt: "VELA" },
33
+ "GARDEN": { de: "GARTEN", fr: "JARDIN", it: "GIARDINO", es: "JARDÍN", pt: "JARDIM" },
34
+ "BRIDGE": { de: "BRÜCKE", fr: "PONT", it: "PONTE", es: "PUENTE", pt: "PONTE" },
35
+ "ISLAND": { de: "INSEL", fr: "ÎLE", it: "ISOLA", es: "ISLA", pt: "ILHA" },
36
+ "BREEZE": { de: "BRISE", fr: "BRISE", it: "BREZZA", es: "BRISA", pt: "BRISA" },
37
+ "LIGHT": { de: "LICHT", fr: "LUMIÈRE", it: "LUCE", es: "LUZ", pt: "LUZ" },
38
+ "THUNDER": { de: "DONNER", fr: "TONNERRE", it: "TUONO", es: "TRUENO", pt: "TROVÃO" },
39
+ "RAINBOW": { de: "REGENBOGEN", fr: "ARC-EN-CIEL", it: "ARCOBALENO", es: "ARCOÍRIS", pt: "ARCO-ÍRIS" },
40
+ "SMILE": { de: "LÄCHELN", fr: "SOURIRE", it: "SORRISO", es: "SONRISA", pt: "SORRISO" },
41
+ "FRIEND": { de: "FREUND", fr: "AMI", it: "AMICO", es: "AMIGO", pt: "AMIGO" },
42
+ "FAMILY": { de: "FAMILIE", fr: "FAMILLE", it: "FAMIGLIA", es: "FAMILIA", pt: "FAMÍLIA" },
43
+ "APPLE": { de: "APFEL", fr: "POMME", it: "MELA", es: "MANZANA", pt: "MAÇÃ" },
44
+ "BANANA": { de: "BANANE", fr: "BANANE", it: "BANANA", es: "BANANA", pt: "BANANA" },
45
+ "CAR": { de: "AUTO", fr: "VOITURE", it: "AUTO", es: "COCHE", pt: "CARRO" },
46
+ "BOAT": { de: "BOOT", fr: "BATEAU", it: "BARCA", es: "BARCO", pt: "BARCO" },
47
+ "BALL": { de: "BALL", fr: "BALLE", it: "PALLA", es: "PELOTA", pt: "BOLA" },
48
+ "CAKE": { de: "KUCHEN", fr: "GÂTEAU", it: "TORTA", es: "PASTEL", pt: "BOLO" },
49
+ "FROG": { de: "FROSCH", fr: "GRENOUILLE", it: "RANA", es: "RANA", pt: "SAPO" },
50
+ "HORSE": { de: "PFERD", fr: "CHEVAL", it: "CAVALLO", es: "CABALLO", pt: "CAVALO" },
51
+ "LION": { de: "LÖWE", fr: "LION", it: "LEONE", es: "LEÓN", pt: "LEÃO" },
52
+ "MONKEY": { de: "AFFE", fr: "SINGE", it: "SCIMMIA", es: "MONO", pt: "MACACO" },
53
+ "PANDA": { de: "PANDA", fr: "PANDA", it: "PANDA", es: "PANDA", pt: "PANDA" },
54
+ "PLANE": { de: "FLUGZEUG", fr: "AVION", it: "AEREO", es: "AVIÓN", pt: "AVIÃO" },
55
+ "TRAIN": { de: "ZUG", fr: "TRAIN", it: "TRENO", es: "TREN", pt: "TREM" },
56
+ "CANDY": { de: "SÜSSIGKEIT", fr: "BONBON", it: "CARAMELLA", es: "CARAMELO", pt: "DOCE" },
57
+ "KITE": { de: "DRACHEN", fr: "CERF-VOLANT", it: "AQUILONE", es: "COMETA", pt: "PIPA" },
58
+ "BALLOON": { de: "BALLON", fr: "BALLON", it: "PALLONCINO", es: "GLOBO", pt: "BALÃO" },
59
+ "PARK": { de: "PARK", fr: "PARC", it: "PARCO", es: "PARQUE", pt: "PARQUE" },
60
+ "BEACH": { de: "STRAND", fr: "PLAGE", it: "SPIAGGIA", es: "PLAYA", pt: "PRAIA" },
61
+ "TOY": { de: "SPIELZEUG", fr: "JOUET", it: "GIOCATTOLO", es: "JUGUETE", pt: "BRINQUEDO" },
62
+ "BOOK": { de: "BUCH", fr: "LIVRE", it: "LIBRO", es: "LIBRO", pt: "LIVRO" },
63
+ "BUBBLE": { de: "BLASE", fr: "BULLE", it: "BOLLA", es: "BURBUJA", pt: "BOLHA" },
64
+ "SHELL": { de: "MUSCHEL", fr: "COQUILLAGE", it: "CONCHIGLIA", es: "CONCHA", pt: "CONCHA" },
65
+ "PEN": { de: "STIFT", fr: "STYLO", it: "PENNA", es: "BOLÍGRAFO", pt: "CANETA" },
66
+ "ICE": { de: "EIS", fr: "GLACE", it: "GHIACCIO", es: "HIELO", pt: "GELO" },
67
+ "HAT": { de: "HUT", fr: "CHAPEAU", it: "CAPPELLO", es: "SOMBRERO", pt: "CHAPÉU" },
68
+ "SHOE": { de: "SCHUH", fr: "CHAUSSURE", it: "SCARPA", es: "ZAPATO", pt: "SAPATO" },
69
+ "CLOCK": { de: "UHR", fr: "HORLOGE", it: "OROLOGIO", es: "RELOJ", pt: "RELÓGIO" },
70
+ "BED": { de: "BETT", fr: "LIT", it: "LETTO", es: "CAMA", pt: "CAMA" },
71
+ "CUP": { de: "TASSE", fr: "TASSE", it: "Tazza", es: "TazA", pt: "XÍCARA" },
72
+ "KEY": { de: "SCHLÜSSEL", fr: "CLÉ", it: "CHIAVE", es: "LLAVE", pt: "CHAVE" },
73
+ "DOOR": { de: "TÜR", fr: "PORTE", it: "PORTA", es: "PUERTA", pt: "PORTA" },
74
+ "CHICKEN": { de: "HÜHNCHEN", fr: "POULET", it: "POLLO", es: "POLLO", pt: "FRANGO" },
75
+ "DUCK": { de: "ENTE", fr: "CANARD", it: "ANATRA", es: "PATO", pt: "PATO" },
76
+ "SHEEP": { de: "SCHAF", fr: "MOUTON", it: "PECORA", es: "OVEJA", pt: "OVELHA" },
77
+ "COW": { de: "KUH", fr: "VACHE", it: "MUCCA", es: "VACA", pt: "VACA" },
78
+ "PIG": { de: "SCHWEIN", fr: "COCHON", it: "MAIALE", es: "CERDO", pt: "PORCO" },
79
+ "GOAT": { de: "ZIEGE", fr: "CHÈVRE", it: "CAPRA", es: "CABRA", pt: "CABRA" },
80
+ "FOX": { de: "FUCHS", fr: "RENARD", it: "VOLPE", es: "ZORRO", pt: "RAPOSA" },
81
+ "BEAR": { de: "BÄR", fr: "OURS", it: "ORSO", es: "OSO", pt: "URSO" },
82
+ "DEER": { de: "REH", fr: "CERF", it: "CERVO", es: "CIERVO", pt: "VEADO" },
83
+ "OWL": { de: "EULE", fr: "HIBOU", it: "GUFO", es: "BÚHO", pt: "CORUJA" },
84
+ "EGG": { de: "EI", fr: "ŒUF", it: "UOVO", es: "HUEVO", pt: "OVO" },
85
+ "NEST": { de: "NEST", fr: "NID", it: "NIDO", es: "NIDO", pt: "NINHO" },
86
+ "ROCK": { de: "STEIN", fr: "ROCHE", it: "ROCCIA", es: "ROCA", pt: "PEDRA" },
87
+ "LEAF": { de: "BLATT", fr: "FEUILLE", it: "FOGLIA", es: "HOJA", pt: "FOLHA" },
88
+ "BRUSH": { de: "PINSEL", fr: "BROSSE", it: "PENNELLO", es: "Pincel", pt: "Pincel" },
89
+ "TOOTH": { de: "ZAHN", fr: "DENT", it: "DENTE", es: "DIENTE", pt: "DENTE" },
90
+ "HAND": { de: "HAND", fr: "MAIN", it: "MANO", es: "MANO", pt: "MÃO" },
91
+ "FEET": { de: "FÜSSE", fr: "PIEDS", it: "PIEDI", es: "PIES", pt: "PÉS" },
92
+ "EYE": { de: "AUGE", fr: "ŒIL", it: "OCCHIO", es: "OJO", pt: "OLHO" },
93
+ "NOSE": { de: "NASE", fr: "NEZ", it: "NASO", es: "NARIZ", pt: "NARIZ" },
94
+ "EAR": { de: "OHR", fr: "OREILLE", it: "ORECCHIO", es: "OREJA", pt: "ORELHA" },
95
+ "MOUTH": { de: "MUND", fr: "BOUCHE", it: "BOCCA", es: "BOCA", pt: "BOCA" },
96
+ "CHILD": { de: "KIND", fr: "ENFANT", it: "BAMBINO", es: "NIÑO", pt: "CRIANÇA" },
97
+ "RAINCOAT": { de: "REGENMANTEL", fr: "IMPERMÉABLE", it: "IMPERMEABILE", es: "IMPERMEABLE", pt: "IMPERMEÁVEL" },
98
+ "LADDER": { de: "LEITER", fr: "ÉCHELLE", it: "SCALA", es: "ESCALERA", pt: "ESCADA" },
99
+ "WINDOW": { de: "FENSTER", fr: "FENÊTRE", it: "FINESTRA", es: "VENTANA", pt: "JANELA" },
100
+ "DOCTOR": { de: "ARZT", fr: "MÉDECIN", it: "MEDICO", es: "MÉDICO", pt: "MÉDICO" },
101
+ "NURSE": { de: "KRANKENSCHWESTER", fr: "INFIRMIÈRE", it: "INFERMIERA", es: "ENFERMERA", pt: "ENFERMEIRA" },
102
+ "TEACHER": { de: "LEHRER", fr: "ENSEIGNANT", it: "INSEGNANTE", es: "MAESTRO", pt: "PROFESSOR" },
103
+ "STUDENT": { de: "STUDENT", fr: "ÉTUDIANT", it: "STUDENTE", es: "ESTUDIANTE", pt: "ESTUDANTE" },
104
+ "PENCIL": { de: "BLEISTIFT", fr: "CRAYON", it: "MATITA", es: "LÁPIZ", pt: "LÁPIS" },
105
+ "TABLE": { de: "TISCH", fr: "TABLE", it: "Tavolo", es: "MESA", pt: "MESA" },
106
+ "CHAIR": { de: "STUHL", fr: "CHAISE", it: "SEDIA", es: "SILLA", pt: "CADEIRA" },
107
+ "LAMP": { de: "LAMPE", fr: "LAMPE", it: "LAMPADA", es: "LÁMPARA", pt: "LÂMPADA" },
108
+ "MIRROR": { de: "SPIEGEL", fr: "MIROIR", it: "SPECCHIO", es: "ESPEJO", pt: "ESPELHO" },
109
+ "BOWL": { de: "SCHÜSSEL", fr: "BOL", it: "CIOTOLA", es: "CUENCO", pt: "TIGELA" },
110
+ "PLATE": { de: "TELLER", fr: "ASSIETTE", it: "PIATTO", es: "PLATO", pt: "PRATO" },
111
+ "SPOON": { de: "LÖFFEL", fr: "CUILLÈRE", it: "CUCCHIAIO", es: "CUCHARA", pt: "COLHER" },
112
+ "FORK": { de: "GABEL", fr: "FOURCHETTE", it: "FORCHETTA", es: "TENEDOR", pt: "GARFO" },
113
+ "KNIFE": { de: "MESSER", fr: "COUTEAU", it: "COLTELLO", es: "CUCHILLO", pt: "FACA" },
114
+ "GLASS": { de: "GLAS", fr: "VERRE", it: "BICCHIERE", es: "VASO", pt: "COPO" },
115
+ "STRAW": { de: "STROHHALM", fr: "PAILLE", it: "CANNUCCIA", es: "PAJITA", pt: "CANUDO" },
116
+ "RULER": { de: "LINEAL", fr: "RÈGLE", it: "RIGHELLO", es: "REGLA", pt: "RÉGUA" },
117
+ "PAPER": { de: "PAPIER", fr: "PAPIER", it: "CARTA", es: "PAPEL", pt: "PAPEL" },
118
+ "BASKET": { de: "KORB", fr: "PANIER", it: "CESTINO", es: "CESTA", pt: "CESTA" },
119
+ "CARPET": { de: "TEPPICH", fr: "TAPIS", it: "TAPPETO", es: "ALFOMBRA", pt: "TAPETE" },
120
+ "SOFA": { de: "SOFA", fr: "CANAPÉ", it: "DIVANO", es: "SOFÁ", pt: "SOFÁ" },
121
+ "TELEVISION": { de: "FERNSEHER", fr: "TÉLÉVISION", it: "TELEVISIONE", es: "TELEVISIÓN", pt: "TELEVISÃO" },
122
+ "RADIO": { de: "RADIO", fr: "RADIO", it: "RADIO", es: "RADIO", pt: "RÁDIO" },
123
+ "BATTERY": { de: "BATTERIE", fr: "PILE", it: "BATTERIA", es: "BATERÍA", pt: "BATERIA" },
124
+ "FENCE": { de: "ZAUN", fr: "CLÔTURE", it: "RECINTO", es: "VALLA", pt: "CERCA" },
125
+ "MAILBOX": { de: "BRIEFKASTEN", fr: "BOÎTE AUX LETTRES", it: "CASSETTA POSTALE", es: "BUZÓN", pt: "CAIXA DE CORREIO" },
126
+ "BRICK": { de: "BACKSTEIN", fr: "BRIQUE", it: "MATTONE", es: "LADRILLO", pt: "Tijolo" },
127
+ "LANTERN": { de: "LATERNE", fr: "LANTERNE", it: "LANTERNA", es: "FAROL", pt: "LANTERNA" },
128
+ "WHEEL": { de: "RAD", fr: "ROUE", it: "RUOTA", es: "RUEDA", pt: "RODA" },
129
+ "BELL": { de: "GLOCKE", fr: "CLoche", it: "CAMPANA", es: "CAMPANA", pt: "SINO" },
130
+ "UMBRELLA": { de: "REGENSCHIRM", fr: "PARAPLUIE", it: "OMBRELLO", es: "PARAGUAS", pt: "GUARDA-CHUVA" },
131
+ "TRUCK": { de: "LASTWAGEN", fr: "CAMION", it: "CAMION", es: "CAMIÓN", pt: "CAMINHÃO" },
132
+ "MOTORCYCLE": { de: "MOTORRAD", fr: "MOTO", it: "MOTOCICLETTA", es: "MOTOCICLETA", pt: "MOTOCICLETA" },
133
+ "BICYCLE": { de: "FAHRRAD", fr: "VÉLO", it: "BICICLETTA", es: "BICICLETA", pt: "BICICLETA" },
134
+ "STOVE": { de: "HERD", fr: "CUISINIÈRE", it: "FORNELLO", es: "ESTUFA", pt: "FOGÃO" },
135
+ "REFRIGERATOR": { de: "KÜHLSCHRANK", fr: "RÉFRIGÉRATEUR", it: "FRIGORIFERO", es: "REFRIGERADOR", pt: "GELADEIRA" },
136
+ "MICROWAVE": { de: "MIKROWELLE", fr: "MICRO-ONDES", it: "MICROONDE", es: "MICROONDAS", pt: "MICRO-ONDAS" },
137
+ "WASHER": { de: "WASCHMASCHINE", fr: "LAVE-LINGE", it: "LAVATRICE", es: "LAVADORA", pt: "MÁQUINA DE LAVAR" },
138
+ "DRYER": { de: "TROCKNER", fr: "SÈCHE-LINGE", it: "ASCUGATRICE", es: "SECADORA", pt: "SECADORA" },
139
+ "FURNACE": { de: "OFEN", fr: "FOURNAISE", it: "FORNACE", es: "HORNO", pt: "FORNALHA" },
140
+ "FAN": { de: "VENTILATOR", fr: "VENTILATEUR", it: "VENTILATORE", es: "VENTILADOR", pt: "VENTILADOR" },
141
+ "PAINTBRUSH": { de: "PINSEL", fr: "PINCEAU", it: "PENNELLO", es: "Pincel", pt: "Pincel" },
142
+ "BUCKET": { de: "EIMER", fr: "SEAU", it: "SECCHIO", es: "CUBO", pt: "BALDE" },
143
+ "SPONGE": { de: "SCHWAMM", fr: "ÉPONGE", it: "SPUGNA", es: "ESPONJA", pt: "ESPONJA" },
144
+ "SOAP": { de: "SEIFE", fr: "SAVON", it: "SAPONE", es: "JABÓN", pt: "SABÃO" },
145
+ "TOWEL": { de: "HANDTUCH", fr: "SERVIETTE", it: "ASCIUGAMANO", es: "TOALLA", pt: "TOALHA" },
146
+ "CLOTH": { de: "STOFF", fr: "TISSU", it: "STOFFA", es: "TELA", pt: "TECIDO" },
147
+ "SCISSORS": { de: "SCHERE", fr: "CISEAUX", it: "FORBICI", es: "TIJERAS", pt: "TESOURA" },
148
+ "RIBBON": { de: "BAND", fr: "RUBAN", it: "NASTRO", es: "CINTA", pt: "FITA" },
149
+ "THREAD": { de: "FADEN", fr: "FIL", it: "FILO", es: "HILO", pt: "LINHA" },
150
+ "NEEDLE": { de: "NADEL", fr: "AIGUILLE", it: "AGO", es: "AGUJA", pt: "AGULHA" },
151
+ "BUTTON": { de: "KNOPF", fr: "BOUTON", it: "BOTTONE", es: "BOTÓN", pt: "BOTÃO" },
152
+ "SLIPPER": { de: "HAUSSCHUH", fr: "PANTOUFLE", it: "PANTOFOLE", es: "PANTUFLA", pt: "PANTOFO" },
153
+ "COAT": { de: "MANTEL", fr: "MANTEAU", it: "CAPPOTTO", es: "ABRIGO", pt: "CASACO" },
154
+ "MITTEN": { de: "FAUSTHANDSCHUH", fr: "MOUFLE", it: "GUANTO", es: "MANOPLA", pt: "LUVA" },
155
+ "SCARF": { de: "SCHAL", fr: "ÉCHARPE", it: "SCIARPA", es: "BUFANDA", pt: "CACHECOL" },
156
+ "GLOVE": { de: "HANDSCHUH", fr: "GANT", it: "GUANTO", es: "GUANTE", pt: "LUVA" },
157
+ "PANTS": { de: "HOSE", fr: "PANTALON", it: "PANTALONI", es: "PANTALONES", pt: "CALÇAS" },
158
+ "SHIRT": { de: "HEMD", fr: "CHEMISE", it: "CAMICIA", es: "CAMISA", pt: "CAMISA" },
159
+ "JACKET": { de: "JACKE", fr: "VESTE", it: "GIACCA", es: "CHAQUETA", pt: "JAQUETA" },
160
+ "DRESS": { de: "KLEID", fr: "ROBE", it: "VESTITO", es: "VESTIDO", pt: "VESTIDO" },
161
+ "SKIRT": { de: "ROCK", fr: "JUPE", it: "GONNA", es: "FALDA", pt: "SAIA" },
162
+ "SOCK": { de: "SOCKE", fr: "CHAUSSETTE", it: "CALZINO", es: "CALCETÍN", pt: "MEIA" },
163
+ "BOOT": { de: "STIEFEL", fr: "BOTTE", it: "STIVALE", es: "BOTA", pt: "BOTA" },
164
+ "SANDAL": { de: "SANDALE", fr: "SANDALE", it: "SANDALO", es: "SANDALIA", pt: "SANDÁLIA" },
165
+ "CAP": { de: "MÜTZE", fr: "CASQUETTE", it: "BERRETTO", es: "GORRA", pt: "BONÉ" },
166
+ "MASK": { de: "MASKE", fr: "MASQUE", it: "MASCHERA", es: "MÁSCARA", pt: "MÁSCARA" },
167
+ "WATCH": { de: "UHR", fr: "MONTRE", it: "OROLOGIO", es: "RELOJ", pt: "RELÓGIO" },
168
+ "NECKLACE": { de: "HALSKETTE", fr: "COLLER", it: "COLLANA", es: "COLLAR", pt: "COLAR" },
169
+ "BRACELET": { de: "ARMBAND", fr: "BRACELET", it: "BRACCIALE", es: "PULSERA", pt: "PULSEIRA" },
170
+ "RING": { de: "RING", fr: "BAGUE", it: "ANELLO", es: "ANILLO", pt: "ANEL" },
171
+ "BACKPACK": { de: "RUCKSACK", fr: "SAC À DOS", it: "ZAINO", es: "MOCHILA", pt: "MOCHILA" },
172
+ "SUITCASE": { de: "KOFFER", fr: "VALISE", it: "VALIGIA", es: "MALETA", pt: "MALA" },
173
+ "TICKET": { de: "TICKET", fr: "BILLET", it: "BIGLIETTO", es: "BILLETE", pt: "BILHETE" },
174
+ "PASSPORT": { de: "REISEPASS", fr: "PASSEPORT", it: "PASSAPORTO", es: "PASAPORTE", pt: "PASSAPORTE" },
175
+ "MAP": { de: "KARTE", fr: "CARTE", it: "MAPP", es: "MAPA", pt: "MAPA" },
176
+ "COMPASS": { de: "KOMPASS", fr: "BOUSSOLE", it: "BUSSOLA", es: "BRÚJULA", pt: "BÚSSOLA" },
177
+ "TORCH": { de: "FACKEL", fr: "TORCHE", it: "TORCIA", es: "ANTORCHA", pt: "TOCHA" },
178
+ "CAMPFIRE": { de: "LAGERFEUER", fr: "FEU DE CAMP", it: "FALÒ", es: "FOGATA", pt: "FOGUEIRA" },
179
+ "TENT": { de: "ZELT", fr: "TENTE", it: "TENDA", es: "TIENDA DE CAMPAÑA", pt: "BARRACA" },
180
+ "PICNIC": { de: "PICKNICK", fr: "PIQUE-NIQUE", it: "PICNIC", es: "PICNIC", pt: "PIQUENIQUE" },
181
+ "BENCH": { de: "BANK", fr: "BANC", it: "PANCHINA", es: "BANCO", pt: "BANCO" },
182
+ "GATE": { de: "TOR", fr: "PORTAIL", it: "CANCELLO", es: "PORTÓN", pt: "PORTÃO" },
183
+ "SIGN": { de: "SCHILD", fr: "PANNEAU", it: "SEGNALE", es: "SEÑAL", pt: "PLACA" },
184
+ "SIDEWALK": { de: "BÜRGERSTEIG", fr: "TROTTOIR", it: "MARCIAPIEDE", es: "ACERA", pt: "CALÇADA" },
185
+ "POSTCARD": { de: "POSTKARTE", fr: "CARTE POSTALE", it: "CARTOLINA", es: "POSTAL", pt: "CARTÃO-POSTAL" },
186
+ "STAMP": { de: "BRIEFMARKE", fr: "TIMBRE", it: "FRANCOBOLLO", es: "SELLO", pt: "SELO" },
187
+ "LETTER": { de: "BRIEF", fr: "LETTRE", it: "LETTERA", es: "CARTA", pt: "CARTA" },
188
+ "ENVELOPE": { de: "UMSCHLAG", fr: "ENVELOPPE", it: "BUSTA", es: "SOBRE", pt: "ENVELOPE" },
189
+ "PARKING": { de: "PARKPLATZ", fr: "PARKING", it: "PARCHEGGIO", es: "ESTACIONAMIENTO", pt: "ESTACIONAMENTO" },
190
+ "STREET": { de: "STRAßE", fr: "RUE", it: "STRADA", es: "CALLE", pt: "RUA" },
191
+ "HIGHWAY": { de: "AUTOBAHN", fr: "AUTOROUTE", it: "AUTOSTRADA", es: "AUTOPISTA", pt: "AUTOESTRADA" },
192
+ "TUNNEL": { de: "TUNNEL", fr: "TUNNEL", it: "GALLERIA", es: "TÚNEL", pt: "TÚNEL" },
193
+ "STATUE": { de: "STATUE", fr: "STATUE", it: "STATUA", es: "ESTATUA", pt: "ESTÁTUA" },
194
+ "FOUNTAIN": { de: "BRUNNEN", fr: "FONTAINE", it: "FONTANA", es: "FUENTE", pt: "FONTE" },
195
+ "TOWER": { de: "TURM", fr: "TOUR", it: "TORRE", es: "TORRE", pt: "TORRE" },
196
+ "CASTLE": { de: "SCHLOSS", fr: "CHÂTEAU", it: "CASTELLO", es: "CASTILLO", pt: "CASTELO" },
197
+ "PYRAMID": { de: "PYRAMIDE", fr: "PYRAMIDE", it: "PIRAMIDE", es: "PIRÁMIDE", pt: "PIRÂMIDE" },
198
+ "PLANET": { de: "PLANET", fr: "PLANÈTE", it: "PIANETA", es: "PLANETA", pt: "PLANETA" },
199
+ "GALAXY": { de: "GALAXIE", fr: "GALAXIE", it: "GALASSIA", es: "GALAXIA", pt: "GALÁXIA" },
200
+ "SATELLITE": { de: "SATELLIT", fr: "SATELLITE", it: "SATELLITE", es: "SATÉLITE", pt: "SATÉLITE" },
201
+ "ASTRONAUT": { de: "ASTRONAUT", fr: "ASTRONAUTE", it: "ASTRONAUTA", es: "ASTRONAUTA", pt: "ASTRONAUTA" },
202
+ "TELESCOPE": { de: "TELESCOP", fr: "TÉLESCOPE", it: "TELESCOPIO", es: "TELESCOPIO", pt: "TELESCÓPIO" },
203
+ "MICROSCOPE": { de: "MIKROSKOP", fr: "MICROSCOPE", it: "MICROSCOPIO", es: "MICROSCOPIO", pt: "MICROSCÓPIO" },
204
+ "MAGNET": { de: "MAGNET", fr: "AIMANT", it: "MAGNETE", es: "IMÁN", pt: "ÍMAN" },
205
+ "BULB": { de: "GLÜHBIRNE", fr: "AMPOULE", it: "LAMPADINA", es: "BOMBILLA", pt: "LÂMPADA" },
206
+ "SOCKET": { de: "STECKDOSE", fr: "PRISE", it: "PRESA", es: "ENCHUFE", pt: "TOMADA" },
207
+ "PLUG": { de: "STECKER", fr: "FICHE", it: "SPINA", es: "CLAVIJA", pt: "PLUGUE" },
208
+ "WIRE": { de: "DRAHT", fr: "FIL", it: "FILO", es: "CABLE", pt: "FIO" },
209
+ "SWITCH": { de: "SCHALTER", fr: "INTERRUPTEUR", it: "INTERRUTTORE", es: "INTERRUPTOR", pt: "INTERRUPTOR" },
210
+ "CIRCUIT": { de: "SCHALTUNG", fr: "CIRCUIT", it: "CIRCUITO", es: "CIRCUITO", pt: "CIRCUITO" },
211
+ "ROBOT": { de: "ROBOTER", fr: "ROBOT", it: "ROBOT", es: "ROBOT", pt: "ROBÔ" },
212
+ "COMPUTER": { de: "COMPUTER", fr: "ORDINATEUR", it: "COMPUTER", es: "ORDENADOR", pt: "COMPUTADOR" },
213
+ "MOUSE": { de: "MAUS", fr: "SOURIS", it: "MOUSE", es: "RATÓN", pt: "MOUSE" },
214
+ "KEYBOARD": { de: "TASTATUR", fr: "CLAVIER", it: "TASTIERA", es: "TECLADO", pt: "TECLADO" },
215
+ "SCREEN": { de: "BILDSCHIRM", fr: "ÉCRAN", it: "SCHERMO", es: "PANTALLA", pt: "TELA" },
216
+ "PRINTER": { de: "DRUCKER", fr: "IMPRIMANTE", it: "STAMPANTE", es: "IMPRESORA", pt: "IMPRESSORA" },
217
+ "SPEAKER": { de: "LAUTSPRECHER", fr: "HAUT-PARLEUR", it: "ALTOPARLANTE", es: "ALTAVOZ", pt: "ALTO-FALANTE" },
218
+ "HEADPHONE": { de: "KOPFHÖRER", fr: "CASQUE", it: "CUFFIE", es: "AURICULARES", pt: "FONES DE OUVIDO" },
219
+ "PHONE": { de: "TELEFON", fr: "TÉLÉPHONE", it: "TELEFONO", es: "TELÉFONO", pt: "TELEFONE" }
 
 
 
 
 
 
 
 
 
220
  };
221
 
222
  // Helper function to translate a word to target language
 
236
 
237
  function generateEnglishRandomWords(count: number): string[] {
238
  const words: string[] = [];
 
239
  const englishWords = Object.keys(wordTranslations);
 
 
240
  const availableWords = [...englishWords];
241
 
242
  for (let i = 0; i < count; i++) {
243
  if (availableWords.length === 0) {
 
244
  availableWords.push(...englishWords);
245
  }
246
  const randomIndex = Math.floor(Math.random() * availableWords.length);
 
269
  try {
270
  console.log('Starting daily challenge generation...');
271
 
272
+ // Get environment variables
273
+ const supabaseUrl = Deno.env.get('SUPABASE_URL');
274
+ const supabaseKey = Deno.env.get('SUPABASE_SERVICE_ROLE_KEY');
275
+
276
+ // Validate environment variables
277
+ if (!supabaseUrl || !supabaseKey) {
278
+ throw new Error('Missing required environment variables: SUPABASE_URL or SUPABASE_SERVICE_ROLE_KEY');
279
+ }
280
+
281
  // Initialize Supabase client
 
 
282
  const supabase = createClient(supabaseUrl, supabaseKey);
283
+ console.log('Supabase client initialized');
284
 
285
  // Deactivate current active challenges
286
  console.log('Deactivating current active challenges...');
 
296
 
297
  // Generate one set of English words
298
  const selectedEnglishWords = generateEnglishRandomWords(10);
299
+ const languages = ['en', 'de', 'fr', 'it', 'es', 'pt'];
300
  const challenges: Challenge[] = [];
301
 
302
  for (const language of languages) {
supabase/functions/generate-themed-word/index.ts CHANGED
@@ -27,6 +27,10 @@ const languagePrompts = {
27
  es: {
28
  systemPrompt: "Estás ayudando a generar palabras para un juego de adivinanzas. Genera una sola palabra en español relacionada con el tema",
29
  requirements: "La palabra debe ser:\n- Una sola palabra (sin espacios ni guiones)\n- Lo suficientemente común para que la gente la conozca\n- Lo suficientemente específica para ser interesante\n- Relacionada con el tema\n- Entre 4 y 12 letras\n- Un sustantivo\n- NO ser ninguna de estas palabras ya utilizadas:"
 
 
 
 
30
  }
31
  };
32
 
@@ -104,7 +108,7 @@ async function tryOpenRouter(theme: string, usedWords: string[], language: strin
104
  }
105
 
106
  const data = await response.json();
107
-
108
  if (!data?.choices?.[0]?.message?.content) {
109
  throw new Error('Invalid response from OpenRouter API');
110
  }
@@ -131,7 +135,7 @@ serve(async (req) => {
131
  } catch (mistralError) {
132
  console.error('Mistral error:', mistralError);
133
  console.log('Falling back to OpenRouter...');
134
-
135
  try {
136
  word = await tryOpenRouter(theme, usedWords, language);
137
  console.log('Successfully generated word with OpenRouter:', word);
@@ -143,11 +147,11 @@ serve(async (req) => {
143
 
144
  if (!word) {
145
  return new Response(
146
- JSON.stringify({
147
  error: 'Failed to generate word with both Mistral and OpenRouter',
148
  details: error?.message || 'Unknown error'
149
  }),
150
- {
151
  status: 500,
152
  headers: { ...corsHeaders, 'Content-Type': 'application/json' }
153
  }
@@ -161,11 +165,11 @@ serve(async (req) => {
161
  } catch (error) {
162
  console.error('Error generating themed word:', error);
163
  return new Response(
164
- JSON.stringify({
165
  error: 'Error generating themed word',
166
- details: error.message
167
  }),
168
- {
169
  status: 500,
170
  headers: { ...corsHeaders, 'Content-Type': 'application/json' }
171
  }
 
27
  es: {
28
  systemPrompt: "Estás ayudando a generar palabras para un juego de adivinanzas. Genera una sola palabra en español relacionada con el tema",
29
  requirements: "La palabra debe ser:\n- Una sola palabra (sin espacios ni guiones)\n- Lo suficientemente común para que la gente la conozca\n- Lo suficientemente específica para ser interesante\n- Relacionada con el tema\n- Entre 4 y 12 letras\n- Un sustantivo\n- NO ser ninguna de estas palabras ya utilizadas:"
30
+ },
31
+ pt: {
32
+ systemPrompt: "Estás ajudando a gerar palavras para um jogo de adivinhação. Gere uma única palavra em português relacionada ao tema",
33
+ requirements: "A palavra deve ser:\n- Uma única palavra (sem espaços ou hífens)\n- Comum o suficiente para que as pessoas a conheçam\n- Específica o suficiente para ser interessante\n- Relacionada ao tema\n- Entre 4 e 12 letras\n- Um substantivo\n- NÃO ser nenhuma destas palavras já utilizadas:"
34
  }
35
  };
36
 
 
108
  }
109
 
110
  const data = await response.json();
111
+
112
  if (!data?.choices?.[0]?.message?.content) {
113
  throw new Error('Invalid response from OpenRouter API');
114
  }
 
135
  } catch (mistralError) {
136
  console.error('Mistral error:', mistralError);
137
  console.log('Falling back to OpenRouter...');
138
+
139
  try {
140
  word = await tryOpenRouter(theme, usedWords, language);
141
  console.log('Successfully generated word with OpenRouter:', word);
 
147
 
148
  if (!word) {
149
  return new Response(
150
+ JSON.stringify({
151
  error: 'Failed to generate word with both Mistral and OpenRouter',
152
  details: error?.message || 'Unknown error'
153
  }),
154
+ {
155
  status: 500,
156
  headers: { ...corsHeaders, 'Content-Type': 'application/json' }
157
  }
 
165
  } catch (error) {
166
  console.error('Error generating themed word:', error);
167
  return new Response(
168
+ JSON.stringify({
169
  error: 'Error generating themed word',
170
+ details: error.message
171
  }),
172
+ {
173
  status: 500,
174
  headers: { ...corsHeaders, 'Content-Type': 'application/json' }
175
  }
supabase/functions/generate-word/index.ts CHANGED
@@ -36,6 +36,12 @@ const languagePrompts = {
36
  task: "Tu tarea es encontrar una frase para describir esta palabra sin usarla directamente.",
37
  instruction: "Responde con una frase completa y gramaticalmente correcta que comience con",
38
  noQuotes: "No añadas comillas ni backticks. Simplemente responde con la frase."
 
 
 
 
 
 
39
  }
40
  };
41
 
 
36
  task: "Tu tarea es encontrar una frase para describir esta palabra sin usarla directamente.",
37
  instruction: "Responde con una frase completa y gramaticalmente correcta que comience con",
38
  noQuotes: "No añadas comillas ni backticks. Simplemente responde con la frase."
39
+ },
40
+ pt: {
41
+ systemPrompt: "Você está ajudando em um jogo de palavras. A palavra secreta é",
42
+ task: "Sua tarefa é encontrar uma frase para descrever esta palavra sem usá-la diretamente.",
43
+ instruction: "Responda com uma frase completa e gramaticalmente correta que comece com",
44
+ noQuotes: "Não adicione aspas nem backticks. Simplesmente responda com a frase."
45
  }
46
  };
47
 
supabase/functions/guess-word/index.ts CHANGED
@@ -31,6 +31,11 @@ const languagePrompts = {
31
  systemPrompt: "Estás ayudando en un juego de adivinanzas. Dada una descripción, adivina qué palabra única se está describiendo. La palabra descrita no estaba permitida en la descripción, así que no esperes verla.",
32
  instruction: "Basándote en esta descripción",
33
  responseInstruction: "Responde únicamente con la palabra que crees que se está describiendo, en letras mayúsculas. No añadas ninguna explicación ni puntuación."
 
 
 
 
 
34
  }
35
  };
36
 
 
31
  systemPrompt: "Estás ayudando en un juego de adivinanzas. Dada una descripción, adivina qué palabra única se está describiendo. La palabra descrita no estaba permitida en la descripción, así que no esperes verla.",
32
  instruction: "Basándote en esta descripción",
33
  responseInstruction: "Responde únicamente con la palabra que crees que se está describiendo, en letras mayúsculas. No añadas ninguna explicación ni puntuación."
34
+ },
35
+ pt: {
36
+ systemPromp: "Estás ajudando em um jogo de adivinhação. Dada uma descrição, adivinha qual palavra única está sendo descrita. A palavra descrita não foi permitida na descrição, então não espere vê-la.",
37
+ instruction: "Com base nesta descrição",
38
+ responseInstruction: "Responda apenas com a palavra que você acredita estar sendo descrita, em letras maiúsculas. Não adicione nenhuma explicação nem pontuação."
39
  }
40
  };
41