diff --git a/src/constants/candidates.ts b/src/constants/candidates.ts index cc301f3..fe464d9 100644 --- a/src/constants/candidates.ts +++ b/src/constants/candidates.ts @@ -73,6 +73,50 @@ export const CANDIDATES_EXTRA_IDEAS: CandidateIdea[] = [ // Drop live tournament moments here as PGN or FEN during the event. export const CANDIDATES_FEATURED_POSITIONS: CandidatePosition[] = [ + { + id: 'rd3-convert-fabi-win', + title: "Rd3 Challenge 1: Convert Fabi's Win", + subtitle: + "Black resigned here, but could you convert White's win if you had to?", + summary: + "Caruana's position is winning, but Black is still to move. Play White and convert it.", + tag: 'Featured', + accent: 'red', + fen: '3q1rk1/p3ppb1/6pp/4r3/6P1/1Q5b/PP1PPP1P/R1BNK1R1 b Q - 1 19', + playerColor: 'white', + maiaVersion: 'maia_kdd_1900', + targetMoveNumber: 8, + }, + { + id: 'rd3-take-down-pragg', + title: 'Rd3 Challenge 2: Take Down Pragg', + subtitle: 'Can you crash through like Sindarov did against Pragg?', + summary: + 'Sindarov broke through against Praggnanandhaa. Black to move and press the attack.', + tag: 'Featured', + accent: 'amber', + fen: 'r1br2k1/pp2q1pp/8/2b2p2/2P1p3/2Q1P1N1/2BNR1PP/R1K5 b - - 7 24', + playerColor: 'black', + maiaVersion: 'maia_kdd_1900', + targetMoveNumber: 8, + }, + { + id: 'rd3-bibisara-attack', + title: "Rd3 Challenge 3: Bibisara's Attack", + subtitle: + 'Bibisara navigated the complications to take the full point. Try to win with Black!', + summary: + 'A sharp attacking position for Black. Navigate the complications and win.', + tag: 'Featured', + accent: 'blue', + fen: '2rqkb2/1p2pp2/p6p/n2PB3/2P3r1/Pp2R3/2bN1PP1/R1Q2BK1 b - - 4 22', + playerColor: 'black', + maiaVersion: 'maia_kdd_1900', + targetMoveNumber: 8, + }, +] + +export const CANDIDATES_ROUND_TWO_POSITIONS: CandidatePosition[] = [ { id: 'rd2-defend-like-hikaru', title: 'Rd2 Challenge 1: Defend like Hikaru', diff --git a/src/pages/candidates.tsx b/src/pages/candidates.tsx index ee82a71..13d65ed 100644 --- a/src/pages/candidates.tsx +++ b/src/pages/candidates.tsx @@ -6,6 +6,7 @@ import { useEffect, useMemo, useState } from 'react' import { CANDIDATES_FEATURED_POSITIONS, + CANDIDATES_ROUND_TWO_POSITIONS, CANDIDATES_WARMUP_POSITIONS, CandidatePosition, } from 'src/constants/candidates' @@ -115,7 +116,8 @@ const PositionBoard: React.FC<{ const PositionPill: React.FC<{ position: CandidatePosition completed?: boolean -}> = ({ position, completed = false }) => { + compactTitle?: boolean +}> = ({ position, completed = false, compactTitle = false }) => { const playHref = buildPositionPlayLink({ ...position, challengeId: position.id, @@ -131,8 +133,18 @@ const PositionPill: React.FC<{ }`} >
-
-

+
+

{position.title}

@@ -244,7 +256,7 @@ export default function CandidatesPage() { FIDE Candidates Tournament 2026

- Round 2 + Round 3

{CANDIDATES_FEATURED_POSITIONS.length > 0 ? ( <> - + {CANDIDATES_FEATURED_POSITIONS.map((position) => ( + + ))} + + ) : null} + {CANDIDATES_ROUND_TWO_POSITIONS.length > 0 ? ( + <> + + {CANDIDATES_ROUND_TWO_POSITIONS.map((position) => (