이 글의 목적

십자말풀이 웹에 쓴 소스 코드를 공개합니다. 파일을 펼칠 때만 코드를 불러옵니다.

사용한 도구

  • Next.js 15, React 19, TypeScript: 대기실, 게임방, API
  • node:sqlite: 판과 입력 기보 저장
  • Ollama의 gemma4: 판 설계와 문제 작성. OpenAI 호환 API로 부르므로 다른 모델로 바꿀 수 있습니다.
  • 구글 뉴스 RSS, 한국어 위키백과 API: 시사 헤드라인과 무작위 단어
  • OpenSubtitles 한국어 빈도 순위: 단어 등급

폴더 구성

  • lib/puzzle.ts: 난이도 설정, 판을 문제 목록으로 바꾸기, 기준 검사
  • lib/gridFill.ts: 판 검증·보정, 미리 그린 판, 단어 채우기, 단어 연결형 배치기
  • lib/dynamicBank.ts: AI 판 설계, AI 문제 작성, 뉴스·위키 단어
  • lib/words.ts, freqRanks.ts: 단어 은행과 빈도 순위
  • lib/db.ts: 기보 DB, 중간 저장, 빈 판 정리
  • app/page.tsx, app/play/page.tsx: 대기실과 게임방
  • app/api: 새 판, 기보 저장·목록·이어 풀기 API
  • components/CrosswordBoard.tsx: 판 그리기
  • scripts/text-agent.ts, ai-pipeline-test.ts: 생성기와 AI 과정을 글자로 시험하는 도구

실행할 때는 .env.local.example을 .env.local로 복사해 모델 주소를 넣습니다. 모델이 없으면 단어 은행과 위키 단어만으로 판을 만듭니다. 기보 DB, 광고·배포 스크립트, 서버 감시기는 싣지 않았습니다.

전체 소스

32개 파일 · 6,788줄 — 폴더를 펼친 뒤 파일을 누르면 코드를 불러옵니다.

프로젝트 루트4개 파일
.env.local.exampletext · 9줄 · 319B

코드를 불러오는 중입니다…

next.config.tstypescript · 16줄 · 353B

코드를 불러오는 중입니다…

package.jsonjson · 24줄 · 597B

코드를 불러오는 중입니다…

tsconfig.jsonjson · 21줄 · 592B

코드를 불러오는 중입니다…

app/12개 파일
app/api/game/[code]/move/route.tstypescript · 50줄 · 1KB

코드를 불러오는 중입니다…

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

코드를 불러오는 중입니다…

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

코드를 불러오는 중입니다…

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

코드를 불러오는 중입니다…

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

코드를 불러오는 중입니다…

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

코드를 불러오는 중입니다…

app/globals.csscss · 57줄 · 1KB

코드를 불러오는 중입니다…

app/layout.tsxtsx · 34줄 · 1KB

코드를 불러오는 중입니다…

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

코드를 불러오는 중입니다…

app/page.tsxtsx · 172줄 · 6KB

코드를 불러오는 중입니다…

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

코드를 불러오는 중입니다…

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

코드를 불러오는 중입니다…

components/2개 파일
components/CrosswordBoard.module.csscss · 83줄 · 1KB

코드를 불러오는 중입니다…

components/CrosswordBoard.tsxtsx · 98줄 · 3KB

코드를 불러오는 중입니다…

lib/10개 파일
lib/db.tstypescript · 433줄 · 13KB

코드를 불러오는 중입니다…

lib/dynamicBank.tstypescript · 360줄 · 14KB

코드를 불러오는 중입니다…

lib/freqRanks.tstypescript · 404줄 · 8KB

코드를 불러오는 중입니다…

lib/gameTypes.tstypescript · 63줄 · 1KB

코드를 불러오는 중입니다…

lib/gridFill.tstypescript · 970줄 · 32KB

코드를 불러오는 중입니다…

lib/guest.tstypescript · 60줄 · 2KB

코드를 불러오는 중입니다…

lib/puzzle.tstypescript · 579줄 · 17KB

코드를 불러오는 중입니다…

lib/recentWords.tstypescript · 33줄 · 891B

코드를 불러오는 중입니다…

lib/services.tstypescript · 88줄 · 2KB

코드를 불러오는 중입니다…

lib/words.tstypescript · 1,229줄 · 88KB

코드를 불러오는 중입니다…

scripts/3개 파일
scripts/ai-pipeline-test.tstypescript · 41줄 · 1KB

코드를 불러오는 중입니다…

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

코드를 불러오는 중입니다…

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

코드를 불러오는 중입니다…

types/1개 파일
types/node-sqlite.d.tstypescript · 13줄 · 378B

코드를 불러오는 중입니다…