- RESULT_SOURCE(비우면 SCHEDULE_SOURCE) 추가 — 일정=openfootball, 결과=football-data 가능
- fetch_results 가 result_source 사용
- 자동 정산 매칭을 홈/원정 순서 무관하게 보강(소스 순서 달라도 스코어 정합)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
page_visits 테이블((visit_date, device_id) 유니크) — 하루 1기기 1회 집계.
POST /api/visit(접속 기록), GET /api/admin/visits(일별 순수 방문자, Bearer).
프론트는 App 마운트 시 1회 recordVisit() 호출.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
'100만 원에 도전하기' 버튼 클릭 시 모달 표시 — 배점표(정확5/근접3/승패2/부분1/빗나감0),
누적 1위 상금, 이메일 기준 참여·집계 안내. KO/EN 지원.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
generate_ai_predictions(only_missing=True 기본): 이미 있는 (경기×모델)
예측은 보존하고 누락분만 생성 — 매일/기동/새 경기 시 기존 데이터 불변,
API 비용↓, 실패했던 모델만 자동 보충. 수동 재생성 스크립트는 강제 전체(only_missing=False).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- 킥오프+result_settle_hours 경과 경기를 외부 스코어로 자동 채점(settle_matches)
- schedule_fetch.fetch_results: openfootball/football-data 확정 스코어 수집
- 결과 메일을 승패 적중자에게만 발송하는 옵션(result_email_correct_only)
- 스케줄러에 settle 잡 추가 + 기동 시 1회 밀린 경기 정산
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
워커의 generate_ai_predictions() 를 즉시 1회 실행하는 수동 트리거.
미종료 경기 전부에 대해 GPT/Claude/Gemini 재생성(덮어쓰기).
실행: docker compose run --rm worker python -m app.regenerate_ai
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
AI 프롬프트가 Team A를 home으로 단정해 "홈 경기 이점" 같은 오류 근거가
생성됨. 조별리그는 중립 경기장(개최국 멕시코/미국/캐나다만 홈)임을 명시.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- BI SVG → OG용 PNG 생성 (og-image 1200x630 + 정사각, 다크 브랜드 배경)
- index.html 에 Open Graph / Twitter 메타 추가 (카카오톡 등 미리보기)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- 백엔드: 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>
- 체코전 AI 예측을 플레이스홀더 mock → 실제 API 출력으로 교체 (2026-06-10)
- GPT (gpt-5.5): 무승부 1-1 (54%)
- Claude (claude-opus-4-8): 한국 승 2-1 (57%)
- Gemini (gemini-3.5-flash): 한국 승 2-1 (55%)
- 근거 KO/EN(FEATURED_REASONS) 동기화
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- 운영사 ADO2 광고: 메인 랜딩 하단(Footer 위)에 배치
- 솔리드 퍼플(#A65EFF) 라운드 풀 버튼 + 화이트 "ADO2.AI" 로고(도트) + ado2.o2osolution.ai 링크
- 설명 문구 언어별 단일화: KO 콘텐츠 마케팅 자동화 플랫폼 / EN Content Marketing Automation Platform
- 상하 여백 균일(leading-none), 화이트 로고 자산 public/icons/ado2-white.png
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- E. 영문 페이지: lib/i18n.ts(KO/EN 사전) + ?lang 스위치(LangSwitch, AI Prediction Arena 우측, 화이트 활성) + 전 컴포넌트 i18n. World Cup 2026(영문 연도 후행), 영문 AI 근거/날짜/카운트다운 단위
- A. "글로벌 축구"→"2026 월드컵"(Hero 알약·meta), 영문은 World Cup 2026
- B. Crowd Pick 설명 문구 삭제
- C. 국기 찌그러짐 수정(이모지 cqh 비례, CZE 비율보존) + 라운드 제거→사각형
- D. 점수 선택 시 승/무/패 자동 선택(useEffect)
- F. 인트로 카피 "가장 정확하게 예측한 … 100만원 상금"
- MatchupHUD 상단 진행 바(roundLabel→Final) 삭제
- 푸터: "Not official" 모호 → FIFA·공식 월드컵 비제휴 명시(KO/EN)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- 상세 페이지 헤더: "전체 일정" 옆 오른쪽에 "투표 공유하기" 버튼 추가
- ShareButton(클라이언트): navigator.share invoke → 클립보드 폴백
- 공유 시맨틱 토큰 --share #A65EFF (ADO2 브랜드 포인트 퍼플) 등록
- DESIGN.md 토큰 표 갱신
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
구조:
- 단일 경기 → 멀티 경기: 대시보드(/) + 경기 상세(/match/[matchId], 6경기 SSG) + 리더보드 stub(/leaderboard)
- 컴포넌트 파라미터화: MatchupHUD/Arena가 match·predictions·crowd props 수신 (싱글톤 의존 제거)
- 신규 컴포넌트: ScheduleBoard, Countdown, TeamFlag
- mockData: 경기별 결정론적 AI예측/Crowd 생성기(getPredictions/getCrowd) + matchUrl
06.09 회의 반영:
- 확률 라벨 "OO 승리 확률 %"+승리팀 국기(D3), confidence 바 제거 + 메인 리즌 강조
- 닉네임 제거→이메일만(D5), 투표 종료 카운트다운(D7), 결과 보기 전환, 경기별 공유(D8)
- "월드컵" 표현 제거→글로벌 축구(D9), 서브타이틀 중복 삭제, Crowd "AI 승리 확률과 다름" 라벨
- 포인트 컬러 #4AFFA0 통일, 일정 #94FBE0, 푸터 가시성 개선
채점·심사 설계(docs/SCORING.md):
- 공정성 모델 확정: 주최측 배제 + 순수 누적 포인트(점수는 정확도에서만)
- 배점/랭킹/배제/결과정의 + scorePrediction·rank 참조 구현
- 골드 카드 심사 기준 카피 정합
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>