Compare commits
2 Commits
9de27dafd8
...
596ed9c094
| Author | SHA1 | Date |
|---|---|---|
|
|
596ed9c094 | |
|
|
6a094debbc |
|
|
@ -210,7 +210,7 @@ export default function Before() {
|
||||||
{/* Prize */}
|
{/* Prize */}
|
||||||
<section style={{ marginTop: 20 }}>
|
<section style={{ marginTop: 20 }}>
|
||||||
<div style={{ ...card, padding: 16 }}>
|
<div style={{ ...card, padding: 16 }}>
|
||||||
<div style={{ display: "flex", alignItems: "center", gap: 8 }}><span style={{ fontSize: 18 }}>🏆</span><h2 style={{ fontSize: 14, fontWeight: 800 }}>월드컵 끝까지 맞히면 100만 원</h2></div>
|
<div style={{ display: "flex", alignItems: "center", gap: 8 }}><span style={{ fontSize: 18 }}>🏆</span><h2 style={{ fontSize: 14, fontWeight: 800 }}>글로벌 축구 축전 끝까지 맞히면 100만 원</h2></div>
|
||||||
<p style={{ marginTop: 6, fontSize: 12, color: C.muted, lineHeight: 1.6 }}>AI 이기고 끝까지 살아남으면 100만 원. 매 경기 픽하고, 최종 우승팀과 결승 스코어까지 맞히면 도전 자격.</p>
|
<p style={{ marginTop: 6, fontSize: 12, color: C.muted, lineHeight: 1.6 }}>AI 이기고 끝까지 살아남으면 100만 원. 매 경기 픽하고, 최종 우승팀과 결승 스코어까지 맞히면 도전 자격.</p>
|
||||||
<button style={{ marginTop: 12, width: "100%", borderRadius: 8, padding: "10px 0", fontSize: 13, fontWeight: 700, background: `${C.green}1a`, color: C.green, border: `1px solid ${C.green}66` }}>100만원 도전하기</button>
|
<button style={{ marginTop: 12, width: "100%", borderRadius: 8, padding: "10px 0", fontSize: 13, fontWeight: 700, background: `${C.green}1a`, color: C.green, border: `1px solid ${C.green}66` }}>100만원 도전하기</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@ import type { Metadata, Viewport } from "next";
|
||||||
import "./globals.css";
|
import "./globals.css";
|
||||||
|
|
||||||
export const metadata: Metadata = {
|
export const metadata: Metadata = {
|
||||||
title: "TriplePick 2026 | AI 2026 월드컵 승부예측 — GPT vs Claude vs Gemini",
|
title: "TriplePick 2026 | AI 2026 글로벌 축구 축전 승부예측 — GPT vs Claude vs Gemini",
|
||||||
description:
|
description:
|
||||||
"GPT·Claude·Gemini가 매 경기를 서로 다르게 예측합니다. 당신의 픽을 찍고 AI와 겨뤄보세요. 끝까지 잘 맞히면 100만 원 챌린지.",
|
"GPT·Claude·Gemini가 매 경기를 서로 다르게 예측합니다. 당신의 픽을 찍고 AI와 겨뤄보세요. 끝까지 잘 맞히면 100만 원 챌린지.",
|
||||||
applicationName: "TriplePick",
|
applicationName: "TriplePick",
|
||||||
|
|
|
||||||
10
lib/i18n.ts
10
lib/i18n.ts
|
|
@ -96,7 +96,7 @@ type Dict = {
|
||||||
|
|
||||||
export const DICT: Record<Lang, Dict> = {
|
export const DICT: Record<Lang, Dict> = {
|
||||||
ko: {
|
ko: {
|
||||||
heroPill: "AI와 함께하는 2026 월드컵 승부예측 챌린지",
|
heroPill: "AI와 함께하는 2026 글로벌 축구 축전 승부예측 챌린지",
|
||||||
back: "← 전체 일정",
|
back: "← 전체 일정",
|
||||||
share: "투표 공유하기",
|
share: "투표 공유하기",
|
||||||
shareCopied: "링크 복사됨 ✓",
|
shareCopied: "링크 복사됨 ✓",
|
||||||
|
|
@ -142,8 +142,8 @@ export const DICT: Record<Lang, Dict> = {
|
||||||
final: "Final",
|
final: "Final",
|
||||||
group: (g) => `Group ${g}`,
|
group: (g) => `Group ${g}`,
|
||||||
footerNotOfficial:
|
footerNotOfficial:
|
||||||
"Independent AI prediction game — not affiliated with, endorsed by, or sponsored by FIFA or the official World Cup.",
|
"Independent AI prediction game — not affiliated with, endorsed by, or sponsored by FIFA or any official football tournament.",
|
||||||
footerDisc1: "FIFA 및 공식 월드컵과 무관한 독립 AI 예측 게임입니다 (제휴·후원·운영 아님).",
|
footerDisc1: "FIFA 및 공식 축구 대회와 무관한 독립 AI 예측 게임입니다 (제휴·후원·운영 아님).",
|
||||||
footerDisc2: "스포츠 분석·엔터테인먼트 목적의 예측 게임이며 베팅·도박을 권유하지 않습니다. AI 예측은 실제 결과를 보장하지 않습니다.",
|
footerDisc2: "스포츠 분석·엔터테인먼트 목적의 예측 게임이며 베팅·도박을 권유하지 않습니다. AI 예측은 실제 결과를 보장하지 않습니다.",
|
||||||
footerDisc3: "100만 원 이벤트는 무료 참여형 챌린지입니다. 지급·동점 처리 조건은 별도 약관에 따릅니다. 이메일은 결과·이벤트 알림 목적으로만 사용됩니다.",
|
footerDisc3: "100만 원 이벤트는 무료 참여형 챌린지입니다. 지급·동점 처리 조건은 별도 약관에 따릅니다. 이메일은 결과·이벤트 알림 목적으로만 사용됩니다.",
|
||||||
hook: (a, b) => `${a} vs ${b}, AI의 선택은 갈렸다`,
|
hook: (a, b) => `${a} vs ${b}, AI의 선택은 갈렸다`,
|
||||||
|
|
@ -154,7 +154,7 @@ export const DICT: Record<Lang, Dict> = {
|
||||||
ado2Cta: "사용해보기",
|
ado2Cta: "사용해보기",
|
||||||
},
|
},
|
||||||
en: {
|
en: {
|
||||||
heroPill: "AI-powered World Cup 2026 match predictions",
|
heroPill: "AI-powered Global Football Festival 2026 match predictions",
|
||||||
back: "← All matches",
|
back: "← All matches",
|
||||||
share: "Share vote",
|
share: "Share vote",
|
||||||
shareCopied: "Link copied ✓",
|
shareCopied: "Link copied ✓",
|
||||||
|
|
@ -200,7 +200,7 @@ export const DICT: Record<Lang, Dict> = {
|
||||||
final: "Final",
|
final: "Final",
|
||||||
group: (g) => `Group ${g}`,
|
group: (g) => `Group ${g}`,
|
||||||
footerNotOfficial:
|
footerNotOfficial:
|
||||||
"Independent AI prediction game — not affiliated with, endorsed by, or sponsored by FIFA or the official World Cup.",
|
"Independent AI prediction game — not affiliated with, endorsed by, or sponsored by FIFA or any official football tournament.",
|
||||||
footerDisc1: "A fan-run prediction game using public match schedules; all picks are independent.",
|
footerDisc1: "A fan-run prediction game using public match schedules; all picks are independent.",
|
||||||
footerDisc2: "A sports-analysis & entertainment prediction game. No betting or gambling. AI predictions do not guarantee real outcomes.",
|
footerDisc2: "A sports-analysis & entertainment prediction game. No betting or gambling. AI predictions do not guarantee real outcomes.",
|
||||||
footerDisc3: "The ₩1,000,000 event is a free-to-enter challenge. Payout & tie-break terms follow separate rules. Email is used only for result & event alerts.",
|
footerDisc3: "The ₩1,000,000 event is a free-to-enter challenge. Payout & tie-break terms follow separate rules. Email is used only for result & event alerts.",
|
||||||
|
|
|
||||||
|
|
@ -8,16 +8,17 @@ import type { AIPrediction, CrowdStats, Match, ModelName, Outcome } from "./type
|
||||||
import { FEATURED, GROUP_A } from "./schedule";
|
import { FEATURED, GROUP_A } from "./schedule";
|
||||||
import { type Lang, teamShort } from "./i18n";
|
import { type Lang, teamShort } from "./i18n";
|
||||||
|
|
||||||
// 체코전 — 실제 3모델 API 출력 (2026-06-10 생성: gpt-5.5 / claude-opus-4-8 / gemini-3.5-flash)
|
// 체코전 — 실제 3모델 API 출력 (2026-06-10 캐노니컬 스냅샷: gpt-5.5 / claude-opus-4-8 / gemini-2.5-flash)
|
||||||
|
// 결과: GPT 무 1-1(conf45) / Claude 무 1-1(conf55) / Gemini 한국 2-1(conf60) — 둘은 무승부, Gemini만 한국 승리
|
||||||
const FEATURED_REASONS: Record<Lang, Record<ModelName, string>> = {
|
const FEATURED_REASONS: Record<Lang, Record<ModelName, string>> = {
|
||||||
ko: {
|
ko: {
|
||||||
GPT: "한국 역습과 체코 제공권이 팽팽",
|
GPT: "전력과 압박 강도 모두 팽팽",
|
||||||
Claude: "손흥민·이강인 측면 창의성이 체코 블록을 연다",
|
Claude: "양 팀 전력 비슷, 박빙 무승부",
|
||||||
Gemini: "이강인·손흥민 공격력, 체코 수비에 근소 우세",
|
Gemini: "이강인·손흥민 공격력, 체코 수비에 근소 우세",
|
||||||
},
|
},
|
||||||
en: {
|
en: {
|
||||||
GPT: "Korea's counters vs Czech aerial — dead even",
|
GPT: "Power and pressing — dead even",
|
||||||
Claude: "Son & Lee's wing play cracks the Czech block",
|
Claude: "Evenly matched, a tight draw likely",
|
||||||
Gemini: "Korea's attack edges a stubborn Czech defense",
|
Gemini: "Korea's attack edges a stubborn Czech defense",
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
@ -32,31 +33,31 @@ export const DEMO_FORCE_OPEN = true;
|
||||||
const FEATURED_PREDICTIONS: AIPrediction[] = [
|
const FEATURED_PREDICTIONS: AIPrediction[] = [
|
||||||
{
|
{
|
||||||
matchId: MATCH.matchId,
|
matchId: MATCH.matchId,
|
||||||
model: "GPT", // gpt-5.5: 무승부 1-1
|
model: "GPT", // gpt-5.5: 무승부 1-1 (conf 45)
|
||||||
outcome: "DRAW",
|
outcome: "DRAW",
|
||||||
scoreA: 1,
|
scoreA: 1,
|
||||||
scoreB: 1,
|
scoreB: 1,
|
||||||
confidencePct: 54,
|
confidencePct: 45,
|
||||||
reasonShort: FEATURED_REASONS.ko.GPT,
|
reasonShort: FEATURED_REASONS.ko.GPT,
|
||||||
generatedAt: "2026-06-10",
|
generatedAt: "2026-06-10",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
matchId: MATCH.matchId,
|
matchId: MATCH.matchId,
|
||||||
model: "Claude", // claude-opus-4-8: 한국 승 2-1
|
model: "Claude", // claude-opus-4-8: 무승부 1-1 (conf 55)
|
||||||
outcome: "TEAM_A_WIN",
|
outcome: "DRAW",
|
||||||
scoreA: 2,
|
scoreA: 1,
|
||||||
scoreB: 1,
|
scoreB: 1,
|
||||||
confidencePct: 57,
|
confidencePct: 55,
|
||||||
reasonShort: FEATURED_REASONS.ko.Claude,
|
reasonShort: FEATURED_REASONS.ko.Claude,
|
||||||
generatedAt: "2026-06-10",
|
generatedAt: "2026-06-10",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
matchId: MATCH.matchId,
|
matchId: MATCH.matchId,
|
||||||
model: "Gemini", // gemini-3.5-flash: 한국 승 2-1
|
model: "Gemini", // gemini-2.5-flash: 한국 승 2-1 (conf 60)
|
||||||
outcome: "TEAM_A_WIN",
|
outcome: "TEAM_A_WIN",
|
||||||
scoreA: 2,
|
scoreA: 2,
|
||||||
scoreB: 1,
|
scoreB: 1,
|
||||||
confidencePct: 55,
|
confidencePct: 60,
|
||||||
reasonShort: FEATURED_REASONS.ko.Gemini,
|
reasonShort: FEATURED_REASONS.ko.Gemini,
|
||||||
generatedAt: "2026-06-10",
|
generatedAt: "2026-06-10",
|
||||||
},
|
},
|
||||||
|
|
@ -78,7 +79,7 @@ const MODELS: ModelName[] = ["GPT", "Claude", "Gemini"];
|
||||||
export const MODEL_VERSIONS: Record<ModelName, string> = {
|
export const MODEL_VERSIONS: Record<ModelName, string> = {
|
||||||
GPT: "gpt-5.5",
|
GPT: "gpt-5.5",
|
||||||
Claude: "claude-opus-4-8",
|
Claude: "claude-opus-4-8",
|
||||||
Gemini: "gemini-3.5-flash",
|
Gemini: "gemini-2.5-flash",
|
||||||
};
|
};
|
||||||
|
|
||||||
// AI 셋이 갈리도록 만든 결과 조합 (홈/원정 균형)
|
// AI 셋이 갈리도록 만든 결과 조합 (홈/원정 균형)
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// 2026 FIFA World Cup Group A 정식 일정 (출처: Wikipedia/FIFA, KST 변환 검증 2026-06-08)
|
// 2026 글로벌 축구 축전 Group A 정식 일정 (출처: Wikipedia, KST 변환 검증 2026-06-08)
|
||||||
// 모든 kickoffKst는 한국시간(+09:00). lockAt = 킥오프 -10분.
|
// 모든 kickoffKst는 한국시간(+09:00). lockAt = 킥오프 -10분.
|
||||||
import type { Match, Team } from "./types";
|
import type { Match, Team } from "./types";
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue