Commit Graph

57 Commits (4a7719895e389dd15b8799289667599066ad38ed)

Author SHA1 Message Date
jwkim 4a7719895e 하단 문구 수정 2026-07-22 11:51:57 +09:00
jwkim bbad63ee92 ai 예측 대결 문구 변경 2026-07-22 11:26:00 +09:00
jwkim 4e1ebc8989 feat: KBO/MLB 운영 안정화 — 순위 탭·라이브 개선·취소/더블헤더 지원·야구 점수제
AI 예측
- 생성 시점을 킥오프 22시간 전으로 변경(선발투수 예고 이후), 잡 매시간 실행
- 경기 시작 후 생성 금지(사후 예측 방지), 경기 단위 커밋으로 중단 시 진행분 보존

일정·라이브 UI
- 야구 일정에 순위 탭 추가 (KBO 단일 순위표 · MLB 6개 디비전, /api/standings 신설)
- 경기중 카드에 현재 이닝·실시간 스코어 표시 (30s 폴링, 서버 15s 캐시)
- MLB 선발 누락 수정: statsapi 날짜 파라미터 미국 날짜 기준 보정(-1일)
- 라이브 대기타석 스크롤바 다크 테마 처리

운영 견고성
- 우천취소: 경기 삭제 → cancelled 상태 보존 (투표·예측 기록 유지, 정산/투표/AI 제외)
- 더블헤더: 시작시각순 seq로 1·2차전 분리 등록 (match_id _2, 정산·라이브·프리뷰 매핑)
- 축구 데이터 수집을 wc 리그로 한정 (야구 팀을 축구 API에 검색하던 쿼터 낭비 수정)

점수제
- 야구 판정 완화: 근접=득실차 ±1, 부분=한 팀 득점 ±1 (등급·배점은 리그 공통 유지)
- 채점 판정을 _grade_of() 단일 함수로 통합, 종료된 야구 경기 재채점
- 배점 안내 모달 야구 문구 분리, docs/SCORING.md 갱신

기타
- 야구 전용 댓글 닉네임 풀 (종목별 세션 캐시 분리)
- 리더보드 리그별 조회 연동 (?league=)
2026-07-22 11:01:10 +09:00
jwkim bfaf621949 시작화면 토너먼트 탭으로 변경 2026-07-09 09:05:19 +09:00
jwkim 0392a63d5e feat(seo): JSON-LD sameAs·parentOrganization 보강\ 2026-06-30 09:42:42 +09:00
jwkim 590335b005 feat(seo): 검색등록 메타·robots·sitemap·llms·rss 배포 2026-06-29 10:56:50 +09:00
jwkim 6815540ae6 토너먼트 대진 추가 2026-06-29 09:11:58 +09:00
jwkim 59db1c4e9a 마스코트 한국vs남아공 only -> 전 경기에 반영 2026-06-26 17:15:26 +09:00
jwkim 906896afad Merge branch 'develop' of https://gitea.o2o.kr/castad/o2o-triple-pick into develop
# Please enter a commit message to explain why this merge is necessary,
# especially if it merges an updated upstream into a topic branch.
#
# Lines starting with '#' will be ignored, and an empty message aborts
# the commit.
2026-06-24 15:23:53 +09:00
jwkim a81c7f5644 투표 제출하기 UI 수정 2026-06-24 15:18:18 +09:00
김성경 56261e7667 Merge branch 'develop' of https://gitea.o2o.kr/castad/o2o-triple-pick into develop 2026-06-24 14:15:19 +09:00
김성경 a2507439d7 seo 페이지 수정 2026-06-24 14:15:10 +09:00
jwkim beaf65ef09 남아공전 투표 페이지에 마스코트 추가 2026-06-24 14:02:45 +09:00
김성경 3b5f9458c4 구글 소유권 확인용 html 추가 2026-06-24 13:51:42 +09:00
김성경 fd8493ae2d 사이트맵, 로봇txt, seo 페이지 추가 2026-06-24 13:19:34 +09:00
김성경 d6b7737955 Merge branch 'develop' of https://gitea.o2o.kr/castad/o2o-triple-pick into develop 2026-06-24 11:26:05 +09:00
김성경 ff7d84016a 네이버 사이트 확인 html 추가 2026-06-24 11:25:36 +09:00
jwkim 6fe52db8d1 기본 노래 볼륨 80% -> 40%로 하향 2026-06-24 08:13:28 +09:00
jwkim 7325c96f2c revert: 카드 썸네일(투표 픽 스코어) 기능 제거 — 16bd01f 상태로 복귀
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-23 14:50:17 +09:00
jwkim 39766bae55 한국 남아공 경기 공유 썸네일에 투표 픽 스코어 카드 생성 2026-06-23 14:19:31 +09:00
jwkim 16bd01fc95 남아공전 공유하기 한국이 왼쪽으로 오게끔 수정 2026-06-22 17:32:24 +09:00
jwkim 10b533af28 남아공전 응원가 3개 추가 2026-06-22 16:10:22 +09:00
jwkim 90d00a817b 한국 경기 한국 좌측 고정, 국가명 한글 통일 2026-06-22 10:21:13 +09:00
jwkim 8580bbb713 Crowd Pick 비율 합이 항상 100% 되도록 반올림 보정 2026-06-19 11:05:13 +09:00
jwkim 0a64a220ca Crowd Pick 합 100% 초과 버그 수정 및 투표 오픈을 킥오프 7일 전으로 변경 2026-06-19 10:36:58 +09:00
jwkim 76eafceee8 날짜별 칩 첫 진입 시 오늘 날짜 가운데 정렬 2026-06-19 09:10:54 +09:00
jwkim f03d3e373c AI 모델 순위 부분 강조 수정 2026-06-18 17:18:14 +09:00
jwkim a8e20d5ac8 누적 랭킹 보기 탭 추가 2026-06-18 17:01:41 +09:00
jwkim 39c2003080 내 지난 예측을 투표 후에만 표시 2026-06-18 15:57:40 +09:00
jwkim b4fc96f299 내 지난 얘측 보기 기능 추가, 한국 멕시코 경기 응원가 1곡 추가 2026-06-18 15:41:39 +09:00
김성경 0e5a63a28b fix: 음악자동재생 + 버그수정 2026-06-18 13:08:51 +09:00
jwkim 2988a59749 투표 제출 CTA 단일 카드 통합 + Red Wave 2026 트랙 추가 2026-06-18 10:27:13 +09:00
김성경 7a68d27693 썸네일 변경 2026-06-17 17:27:44 +09:00
김성경 220eb946c1 Merge branch 'develop' of https://gitea.o2o.kr/castad/o2o-triple-pick into develop 2026-06-17 16:51:59 +09:00
김성경 7c42bd5277 feat: 사운드바 추가 2026-06-17 16:51:50 +09:00
jwkim bac505fa99 댓글 닉네임 새로고침 버튼 추가 2026-06-17 15:38:20 +09:00
jwkim b62bedc665 feat: 댓글 익명화 + 전 경기 적용
- 이메일/투표 게이트 제거 → 완전 익명
- 세션 단위 발급(sessionStorage 캐싱) — 탭 닫으면/시크릿이면 새 닉
2026-06-17 14:47:26 +09:00
jwkim 8a67094510 한국 멕시코 경기 댓글 기능 추가 2026-06-17 11:22:29 +09:00
jwkim 8140cd9e02 모바일 카톡 인앱 브라우저에서 공유링크 안 열리는 문제 해결 2026-06-16 08:48:12 +09:00
jwkim 48885ec80e remove: 경기 전용 비주얼 배너(한국-멕시코) 제거 2026-06-15 17:29:13 +09:00
jwkim 65e7c7571c 한국-멕시코전 전용 공유 카드 + 앱 배너 이미지 2026-06-15 17:22:38 +09:00
jwkim 356706e1b4 Update OG/Twitter share card title 2026-06-15 11:59:34 +09:00
jwkim a031d60f3a Update OG/Twitter share card title 2026-06-15 11:51:23 +09:00
jwkim 6765e12054 Email autocomplete 2026-06-15 11:37:39 +09:00
jwkim 4a0188a443 Vote lock 5min + email autocomplete + detail-page UI tweaks 2026-06-15 11:28:41 +09:00
hbyang 3bcc47c0e8 Schedule chips: horizontal scroll with edge arrows (PC navigable)
Replace hidden-scrollbar row (inaccessible on desktop without touch) with
a ChipScroller: single-row scroll + left/right arrow buttons that auto-hide
at each end and a bg fade. Resets to start on tab switch.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-12 17:00:24 +09:00
hbyang 955ffae4cf Open voting for all groups by D-2 time + 30h-ahead AI gen; misc fixes
- domain: is_votable → all groups (voting gated by D-2 open ~ kickoff-60m time window, not group)
- worker: AI generation selects matches by opens_at <= now+lookahead (all groups), pre-fills before D-2 open so picks aren't empty; only_missing keeps total calls = 3/match
- config: ai_generate_lookahead_hours=30 (covers daily-only gen cadence)
- Arena: default pick 0:0 (무승부)
- frontend Dockerfile: install from package.json only (macOS-generated lock leaves rollup darwin-x64 stub w/o version → npm "Invalid Version" on linux)

NOTE for deploy: set DEMO_FORCE_OPEN=false and real PUBLIC_ORIGIN in server .env.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-12 16:43:28 +09:00
hbyang deb1332440 Load all 12 groups' schedule (72 matches) + Naver-style schedule UI
Backend
- teams_data.py: 48-team data (ko/short/en), TLA→FIFA code remap
- config: schedule_all_groups, featured_group("A") — only featured group is votable/AI-predicted
- schedule_fetch: fetch all GROUP_STAGE matches from football-data, KST serialize
- schedule_sync: ingest all groups, unordered-pair match to avoid Group A dup, derive votable from group
- worker: AI generation limited to featured group; settle still covers all
- domain/predictions: is_votable() + MatchOut.votable; reject non-votable submits with 403 MATCH_NOT_VOTABLE

Frontend
- types: Match.votable
- ScheduleBoard: Naver-style date/group tabs + chips; votable(A) cards link to detail with AI split + 참여수, others display-only

Verified: 72 matches (12×6), Group A not duplicated, votable A=6/others=66; A submit 200, B submit 403

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-12 14:56:24 +09:00
hbyang 86290a7c69 feat(ui): AI 결과 배지 3단계 — 정확/적중/빗나감
스코어까지 맞으면 '정확 ✓'(강조), 승패만 맞으면 '적중 ✓', 그 외 '빗나감'.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-12 10:25:56 +09:00
hbyang 140e15fb9f feat(stats): 일별 방문자 집계 추가
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>
2026-06-11 17:31:23 +09:00