Commit Graph

30 Commits (main)

Author SHA1 Message Date
Haewon Kam 996d5faaf4 Refine ranking placement, visibility, and consistency
- Move cumulative ranking above the gold ₩1M card (ranking → challenge flow)
- Drop redundant "전체 보기" link (inline folding shows full Top 10);
  /leaderboard route kept for direct access
- Make fold toggle purple + match its size to the tab buttons; enlarge
  title/tab/row text for readability
- Match email input & submit button radius to the ranking box (rounded-xl)
- Leaderboard full page: top button = "투표로 돌아가기" (history back, home fallback)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-18 16:47:57 +09:00
Haewon Kam 965bd374c3 Add cumulative ranking (TOP 10, voters/AI tabs, folding)
- New lib/leaderboard.ts: fetchLeaderboard(tab) contract + maskEmailId
  (PII) + deterministic demo; backend swaps body for getLeaderboard
- New components/Leaderboard.tsx: 2 tabs (참가자/AI 모델), folded by
  default with 랭킹 보기/접기, top-3 purple highlight, id + points
- Place folding ranking right after the gold ₩1M card on match page
- /leaderboard full page renders the same component expanded

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-18 16:32:26 +09:00
Haewon Kam b69b1dbe97 Add "my past predictions" (email-based, no login) + cleanup
- New lib/myPredictions.ts: typed contract (fetch/save/remember/recall)
  with localStorage demo impl; backend dev swaps the two bodies for
  Firebase callables (getMyPredictions / submitPrediction)
- Arena: recall email on revisit, show my picks sorted newest-first,
  prefill + highlight the current match, upsert per match
- Fold list to 1 row by default with 더보기/접기 toggle (handles 10s of votes)
- Result badges: hit = purple (--share), miss = gray; date until scored
- Remove unused orange --claude token (orange-ban rule; logo image stays)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-18 14:32:17 +09:00
Haewon Kam cbe0e8e01d Right-size submit CTA + match input to card shape
- Submit button height/text now match the bottom "다른 경기 투표하기"
  CTA (py-3, text-15) — was oversized (py-5, text-19)
- Keep rounded-2xl so roundness stays consistent with the green card
- Email input matched to same rounded-2xl shape and height

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-18 09:56:27 +09:00
Haewon Kam cbab4a102a Make email input border purple (1px) so it reads before input
Dark --line-d border was nearly invisible on the dark card; switch to
a thin purple (--share) border + soft purple ring.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-18 09:46:06 +09:00
Haewon Kam c8431e65f3 Unify vote-submit into single always-visible CTA card
- Collapse pick→form two-step into one card: email gate header +
  input + benefit checkbox + single purple submit button
- Purple (--share) for user submit action vs mint for AI/system
- Keep disabled CTA visible (opacity .72 + glow) to drive clicks
- Unify copy with header: "투표 제출하고 AI와 겨루기"

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-18 09:42:57 +09:00
Haewon Kam 7d4d50af40 Enlarge header buttons 1.5x + add bottom "다른 경기 투표하기" CTA (ADO2 purple)
- Hero "전체 일정"·ShareButton "투표 공유하기" 1.5배 (12→18px, 패딩 확대)
- 상세 페이지 하단(Crowd 아래·푸터 위)에 "다른 경기 투표하기 →" CTA 추가
  - ADO2 광고 버튼 동일 사양: 퍼플 #A65EFF · 라운드 풀 · 글로우 · 화살표
  - 텍스트 15px, 전체 일정(대시보드) 이동
- i18n moreMatches (KO/EN)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-15 10:13:13 +09:00
Haewon Kam 6c3a47b6ba Demo: mark opener as finished with 2-1 Mexico win on schedule board
- schedule.ts: opener(MEX vs RSA) status finished + result 2-1 (TEAM_A_WIN)
- i18n: phase.finished label 종료→투표종료 / Ended→Voting closed
- ScheduleBoard: show score around VS + winner label next to round when result exists

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-11 11:20:14 +09:00
Haewon Kam 0c91c902a8 Docs: ban all emoji in design/video/landing (DESIGN.md §7)
Decorative/pictogram emoji (👆🏆🟠 etc.) forbidden — use color,
typography, or real SVG/PNG icons. Typographic glyphs (→ ★ ✓ ·) allowed.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-10 17:04:46 +09:00
Haewon Kam 7a375ee32f Switch 너→당신 (formal address) + handle @triplepick_ai→@triplepickai
- 너 reads as condescending (하대) in Korean, esp. for older viewers we
  optimized readability for; unify on 당신 to match product UI voice.
- Remove underscore from social handle across footer/before page.
- User accent on /before: amber 🟠 → brand point purple 🟣.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-10 16:59:10 +09:00
Haewon Kam 596ed9c094 Rebrand 월드컵/World Cup → 글로벌 축구 축전/Global Football Festival
Trademark avoidance: replace all branding/marketing uses across title,
hero pill (ko/en), before page, schedule comment. Disclaimers keep the
protective FIFA reference but drop the event mark (→ "공식 축구 대회" /
"any official football tournament").

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-10 15:28:24 +09:00
Haewon Kam 6a094debbc Lock 2026-06-10 canonical Korea–Czechia prediction snapshot
GPT 무 1-1 (45%) / Claude 무 1-1 (55%) / Gemini 한국 2-1 (60%).
Claude flipped draw→win earlier; re-ran APIs and froze today's
immutable snapshot. Also corrects Gemini label 3.5-flash→2.5-flash
(actual model used). Landing now matches video plan + PR source.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-10 13:27:42 +09:00
Haewon Kam 9de27dafd8 Show prediction basis (datetime + model versions) next to "AI 예측 대결"
- "AI의 예측 대결" 우측에 예측 기준(생성 시각) + 실제 모델 버전 표기
  - 라벨 "예측 기준 / As of" + 2026.06.10 00:00 KST (매일 0시 갱신 기준)
  - gpt-5.5 · claude-opus-4-8 · gemini-3.5-flash (MODEL_VERSIONS)
- 가운데 정렬, 가시성↑(11px), 본문 폰트 통일

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-10 10:06:38 +09:00
Haewon Kam f29dbd0454 Unify all flags to rectangular SVG (fix waving emoji inconsistency)
- 원인: MEX·RSA는 이모지 국기(OS별 휘날림/광택), KOR·CZE만 실제 이미지 → 불일치
- 해결: 4개국 전부 flagcdn 직사각형 SVG(public/icons/flags) + object-cover로 통일, 이모지 제거
- 미등록 국가는 이모지 fallback 유지

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-10 09:35:14 +09:00
Haewon Kam 9b35a759a9 Inject real 3-model predictions for remaining 5 Group A matches (local only)
- CURATED 맵: MEX-RSA, CZE-RSA, MEX-KOR, CZE-MEX, RSA-KOR 5경기 실제 예측
  - GPT(gpt-5.5)·Gemini(gemini-3.5-flash) 실제 API + Claude(opus-4-8) 직접
  - MEX-KOR은 GPT=멕시코 / Claude·Gemini=무승부로 갈림
- getPredictions가 CURATED 우선 사용, 없으면 결정론 생성
- ⚠️ 로컬+Vercel만 반영 (Gitea push 안 함)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-10 09:26:44 +09:00
Haewon Kam 2fe60ab0cd Track .env.example (template, no secrets) with AI model config
- .gitignore: .env* 무시 유지 + !.env.example 예외(템플릿 추적)
- .env.example: 3 AI 모델 키 슬롯 + 최신 모델 ID + Gemini 함정 노트

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-10 09:22:28 +09:00
Haewon Kam 0a15906afb Document AI prediction generation (3 models) + .env.example AI keys
- docs/AI-PREDICTIONS.md: 최신 모델 ID(gpt-5.5/claude-opus-4-8/gemini-3.5-flash), 호출법, Gemini generationConfig 함정, 체코전 실제 출력
- .env.example: 3 AI 모델 키 슬롯 + 모델 ID + Gemini 주의 노트 (시크릿 없음)
- (목업 데이터 mockData.ts는 35414a8에서 실제 예측 반영 완료)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-10 09:21:35 +09:00
Haewon Kam 35414a8d47 Inject real 3-model predictions into Korea–Czechia (featured)
- 체코전 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>
2026-06-10 09:17:02 +09:00
Haewon Kam 99383b78b3 ADO2 ad: match logo width to tagline width (auto, language-agnostic)
- 로고 가로 폭이 태그라인 폭을 따라가도록(width:0 + min-width:100%) → KO/EN 모두 우측 끝 정렬
- 로고는 태그라인 폭에 맞춰 비례 스케일

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-09 17:11:55 +09:00
Haewon Kam 7e5442125f ADO2 ad: tagline 콘텐츠→AI, add "사용해보기 →" CTA (left/right layout)
- 태그라인 "콘텐츠 마케팅 자동화 플랫폼" → "AI 마케팅 자동화 플랫폼" (KO/EN)
- 버튼 우측에 CTA "사용해보기 →" / "Try it →" 추가
- 레이아웃: 좌측(로고+태그라인) ↔ 우측(CTA), justify-between

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-09 17:06:05 +09:00
Haewon Kam fedcf31bad Add ADO2 ad block at dashboard bottom (purple pill, white logo)
- 운영사 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>
2026-06-09 16:37:10 +09:00
Haewon Kam a8de6c858d i18n (KO/EN), square flags, score→outcome auto, copy & legal fixes
- 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>
2026-06-09 15:55:06 +09:00
Haewon Kam c66812d954 Add schedule guide microcopy next to "전체 일정" heading
- 대시보드 "전체 일정" 제목 옆에 "투표하고 싶은 경기를 선택해주세요" 인라인 배치
- 세로 높이 유지(서브라인 X), 제목 옆에 붙여 가시성↑

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-09 14:33:28 +09:00
Haewon Kam 38ac0af5a9 Add "투표 공유하기" share button to detail header (ADO2 purple)
- 상세 페이지 헤더: "전체 일정" 옆 오른쪽에 "투표 공유하기" 버튼 추가
- ShareButton(클라이언트): navigator.share invoke → 클립보드 폴백
- 공유 시맨틱 토큰 --share #A65EFF (ADO2 브랜드 포인트 퍼플) 등록
- DESIGN.md 토큰 표 갱신

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-09 14:25:53 +09:00
Haewon Kam a0fc9d6194 Multi-match restructure + 06.09 meeting reflection + scoring design
구조:
- 단일 경기 → 멀티 경기: 대시보드(/) + 경기 상세(/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>
2026-06-09 14:05:14 +09:00
Haewon Kam 0a96babc98 Add DESIGN.md (look-and-feel SSOT) + rewrite HANDOFF as next-session entry point
- docs/DESIGN.md: exact color tokens, Impact typography, component catalog, assets, Do/Dont, pending 06.09 design changes
- HANDOFF.md: accurate current state (single-match v2), correct file map, 4 SSOT read-order, confirmed decisions, prioritized next-session tasks (multi-match A / detail B / firebase C)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-09 11:28:11 +09:00
Haewon Kam e43cc08429 Voting window decided: open D-2 (kickoff-48h), close at kickoff
- types/schedule: add opensAt (kickoff-48h), lockAt = kickoff (정각)
- Arena: 3-state gating (곧 오픈 / 활성 / 예측 마감), DEMO_FORCE_OPEN flag
- seed.mjs, BACKEND.md, 기능정의서: lock semantics = kickoff, opensAt added
- error codes: MATCH_NOT_OPEN (422) before opensAt, MATCH_LOCKED (423) at kickoff

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-09 11:18:26 +09:00
Haewon Kam 1b9dbd2276 Add Backend Readiness Pack (firestore rules/indexes, env, seed, firebase init, BACKEND.md)
- firestore.rules, firestore.indexes.json, firebase.json, .firebaserc.example
- .env.example, lib/firebase.ts (client init), scripts/seed.mjs
- docs/BACKEND.md: R1 scope, API contracts, scoring, Resend, deploy, test checklist
- Decisions: new Firebase project (self), prize rules deferred to R2, email via Resend

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-09 09:02:41 +09:00
Haewon Kam 5ba653cfdf Add /before route: restore original v1 design for Before/After record
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-08 21:41:55 +09:00
Haewon Kam fa68169ca0 Initial commit from Create Next App 2026-06-08 16:10:00 +09:00