- 백엔드: FastAPI + SQLAlchemy(async) + PostgreSQL, 별도 워커(APScheduler) - 프론트: React 19 + Vite + TS + Tailwind v4 (기존 UI 이식, API 연동) - docker-compose: db · api · worker · frontend 일괄 실행 - 경기 일정: openfootball 매일 09:00 크롤링 → DB upsert (신규 경기 자동 삽입+예측 생성) - AI 예측: GPT·Claude·Gemini 실 API 매일 생성 → DB 저장 → 조회 (목데이터 제거) - 투표창: 오픈 킥오프 D-2 / 마감 킥오프 1시간 전, lockAt 백엔드 전달→프론트 카운트다운 - 채점/리더보드: docs/SCORING.md 기준 누적 포인트 - crowd: 0 시작, 실제 제출로만 증분 - 구 Next.js/Firebase 파일 제거, README/AGENTS 갱신 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
51 lines
2.0 KiB
Plaintext
51 lines
2.0 KiB
Plaintext
# ─────────────────────────────────────────────────────────────
|
|
# TriplePick 백엔드 환경변수 — 복사: cp .env.example .env
|
|
# ─────────────────────────────────────────────────────────────
|
|
|
|
# DB (docker-compose 내부 네트워크 기본값). 로컬 단독이면 localhost 로.
|
|
DATABASE_URL=postgresql+asyncpg://triplepick:triplepick@db:5432/triplepick
|
|
|
|
# 일반
|
|
TIMEZONE=Asia/Seoul
|
|
CORS_ORIGINS=*
|
|
PUBLIC_ORIGIN=http://localhost:8080
|
|
|
|
# 투표 윈도우 (도메인 규칙)
|
|
VOTE_OPEN_HOURS_BEFORE=48 # 오픈 = 킥오프 D-2
|
|
VOTE_LOCK_MINUTES_BEFORE=60 # 마감 = 킥오프 1시간 전
|
|
DEMO_FORCE_OPEN=true # 운영 배포 시 false
|
|
|
|
# 스케줄링 서버 (워커)
|
|
# 경기 일정 동적 수집: 매일 KST 09:00 외부 소스에서 일정·투표시간 갱신
|
|
SCHEDULE_SYNC_HOUR=9
|
|
SCHEDULE_SYNC_MINUTE=0
|
|
SCHEDULE_SOURCE=openfootball # openfootball(키 불필요) | football-data(토큰) | fallback
|
|
SCHEDULE_URL=https://raw.githubusercontent.com/openfootball/worldcup.json/master/2026/worldcup.json
|
|
SCHEDULE_GROUP=Group A
|
|
FOOTBALL_DATA_TOKEN= # SCHEDULE_SOURCE=football-data 일 때
|
|
FOOTBALL_DATA_COMPETITION=WC
|
|
|
|
AI_GENERATE_HOUR=0 # 매일 KST 00:05 AI 예측 생성
|
|
AI_GENERATE_MINUTE=5
|
|
RESULT_EMAIL_DELAY_MINUTES=180 # 경기 종료 3시간 후 결과 메일
|
|
STATUS_TICK_SECONDS=60
|
|
|
|
# 관리자 (강한 토큰으로 교체)
|
|
ADMIN_API_TOKEN=change-me-admin-token
|
|
|
|
# ── 외부 연동: AI 3모델 (실연동, 키 없으면 해당 모델 생성 생략) ──
|
|
OPENAI_API_KEY=
|
|
OPENAI_MODEL=gpt-4o
|
|
ANTHROPIC_API_KEY=
|
|
ANTHROPIC_MODEL=claude-opus-4-8
|
|
GOOGLE_API_KEY=
|
|
GOOGLE_MODEL=gemini-2.5-flash
|
|
|
|
# ── 외부 연동: 이메일 (SMTP, 실연동) ──
|
|
SMTP_HOST=
|
|
SMTP_PORT=587
|
|
SMTP_USER=
|
|
SMTP_PASSWORD=
|
|
SMTP_FROM=TriplePick <no-reply@triplepick.app>
|
|
SMTP_STARTTLS=true
|