Objetivo deste post

Publicamos o código-fonte usado na web de palavras cruzadas. O código só é carregado quando você abre um arquivo.

Ferramentas usadas

  • Next.js 15, React 19, TypeScript: lobby, sala de jogo, APIs
  • node:sqlite: armazenamento das grades e dos registros de entradas
  • gemma4 no Ollama: projeto da grade e escrita das pistas. Como é chamado por uma API compatível com a OpenAI, pode ser trocado por outro modelo.
  • RSS do Google Notícias e API da Wikipédia em coreano: manchetes de atualidades e palavras aleatórias
  • Ranking de frequência do coreano do OpenSubtitles: níveis das palavras

Estrutura de pastas

  • lib/puzzle.ts: configuração de dificuldade, transformação da grade em lista de pistas, verificação dos critérios
  • lib/gridFill.ts: validação e correção da grade, grades desenhadas de antemão, preenchimento de palavras, posicionador que encaixa palavras
  • lib/dynamicBank.ts: projeto da grade pela IA, escrita das pistas pela IA, palavras de notícias e da wiki
  • lib/words.ts, freqRanks.ts: banco de palavras e ranking de frequência
  • lib/db.ts: banco de registros de partidas, salvamento parcial, limpeza de grades vazias
  • app/page.tsx, app/play/page.tsx: lobby e sala de jogo
  • app/api: APIs de grade nova e de salvar, listar e retomar registros
  • components/CrosswordBoard.tsx: desenho da grade
  • scripts/text-agent.ts, ai-pipeline-test.ts: ferramentas que testam em texto o gerador e o processo da IA

Para rodar, copie .env.local.example para .env.local e coloque o endereço do modelo. Sem modelo, as grades são criadas só com o banco de palavras e as palavras da wiki. O banco de registros de partidas, os scripts de anúncios e de implantação e o monitor do servidor não foram incluídos.

Código-fonte completo

32 arquivos · 6.788 linhas — abra uma pasta e clique em um arquivo para carregar o código.

Raiz do projeto4 arquivos
.env.local.exampletext · 9 linhas · 319B

Carregando o código…

next.config.tstypescript · 16 linhas · 353B

Carregando o código…

package.jsonjson · 24 linhas · 597B

Carregando o código…

tsconfig.jsonjson · 21 linhas · 592B

Carregando o código…

app/12 arquivos
app/api/game/[code]/move/route.tstypescript · 50 linhas · 1KB

Carregando o código…

app/api/game/[code]/route.tstypescript · 51 linhas · 2KB

Carregando o código…

app/api/game/abandon/route.tstypescript · 15 linhas · 522B

Carregando o código…

app/api/game/list/route.tstypescript · 17 linhas · 539B

Carregando o código…

app/api/game/route.tstypescript · 45 linhas · 2KB

Carregando o código…

app/api/puzzle/route.tstypescript · 74 linhas · 2KB

Carregando o código…

app/globals.csscss · 57 linhas · 1KB

Carregando o código…

app/layout.tsxtsx · 34 linhas · 1KB

Carregando o código…

app/page.module.csscss · 225 linhas · 3KB

Carregando o código…

app/page.tsxtsx · 172 linhas · 6KB

Carregando o código…

app/play/page.tsxtsx · 861 linhas · 29KB

Carregando o código…

app/play/play.module.csscss · 425 linhas · 6KB

Carregando o código…

components/2 arquivos
components/CrosswordBoard.module.csscss · 83 linhas · 1KB

Carregando o código…

components/CrosswordBoard.tsxtsx · 98 linhas · 3KB

Carregando o código…

lib/10 arquivos
lib/db.tstypescript · 433 linhas · 13KB

Carregando o código…

lib/dynamicBank.tstypescript · 360 linhas · 14KB

Carregando o código…

lib/freqRanks.tstypescript · 404 linhas · 8KB

Carregando o código…

lib/gameTypes.tstypescript · 63 linhas · 1KB

Carregando o código…

lib/gridFill.tstypescript · 970 linhas · 32KB

Carregando o código…

lib/guest.tstypescript · 60 linhas · 2KB

Carregando o código…

lib/puzzle.tstypescript · 579 linhas · 17KB

Carregando o código…

lib/recentWords.tstypescript · 33 linhas · 891B

Carregando o código…

lib/services.tstypescript · 88 linhas · 2KB

Carregando o código…

lib/words.tstypescript · 1.229 linhas · 88KB

Carregando o código…

scripts/3 arquivos
scripts/ai-pipeline-test.tstypescript · 41 linhas · 1KB

Carregando o código…

scripts/dev-with-ts.mjsjavascript · 91 linhas · 2KB

Carregando o código…

scripts/text-agent.tstypescript · 147 linhas · 4KB

Carregando o código…

types/1 arquivo
types/node-sqlite.d.tstypescript · 13 linhas · 378B

Carregando o código…