Skip to content

Commit 5b429d2

Browse files
feat: add research papers section with detailed descriptions and links in AboutMaia component
1 parent 1de35d5 commit 5b429d2

5 files changed

Lines changed: 141 additions & 31 deletions

File tree

public/assets/papers/maia1.jpg

999 KB
Loading

public/assets/papers/maia2.jpg

664 KB
Loading

src/components/Home/AboutMaia.tsx

Lines changed: 140 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -77,12 +77,130 @@ const teamMembers = [
7777
},
7878
]
7979

80+
const researchPapers = {
81+
maia1: {
82+
title:
83+
'Aligning Superhuman AI with Human Behavior: Chess as a Model System',
84+
link: 'https://www.cs.toronto.edu/~ashton/pubs/maia-kdd2020.pdf',
85+
description:
86+
'This paper introduces Maia, a chess engine trained to imitate real human moves at different rating levels. Instead of always picking the best move, Maia predicts what a human player of a given skill would actually play. This makes it ideal for training, game analysis, and even coaching, as it helps players learn from realistic decisions rather than computer perfection. It was the first AI to prioritize human-likeness over engine strength, making it a powerful tool for improvement.',
87+
},
88+
maia2: {
89+
title: 'Maia‑2: A Unified Model for Human‑AI Alignment in Chess',
90+
link: 'https://www.cs.toronto.edu/~ashton/pubs/maia2-neurips2024.pdf',
91+
description:
92+
"Maia‑2 is the evolution of Maia into a single model that can simulate any skill level in chess. Instead of using separate models for different ratings, it understands and adapts to your level in real time. Whether you're a beginner or a master, Maia‑2 predicts the moves players like you would actually make. It's built to feel human, teach naturally, and support personalized analysis without needing to toggle between bots.",
93+
},
94+
others: [
95+
{
96+
title: 'Learning Personalized Models of Human Behavior in Chess',
97+
link: 'https://www.cs.toronto.edu/~ashton/pubs/maia-personalized2021.pdf',
98+
description:
99+
'Creates a version of Maia that learns your individual playing style and mirrors the way you think on the board.',
100+
},
101+
{
102+
title:
103+
'Detecting Individual Decision‑Making Style: Exploring Behavioral Stylometry in Chess',
104+
link: 'https://www.cs.toronto.edu/~ashton/pubs/maia-personalized2021.pdf',
105+
description:
106+
'Shows that your chess style is as unique as a fingerprint, allowing the model to recognize you just by your move choices.',
107+
},
108+
{
109+
title: 'Learning Models of Individual Behavior in Chess',
110+
link: 'https://www.cs.toronto.edu/~ashton/pubs/maia-personalized2021.pdf',
111+
description:
112+
'Extends personalized Maia to thousands of players, showing it can consistently capture how real people play across the rating ladder.',
113+
},
114+
{
115+
title:
116+
'Designing Skill‑Compatible AI: Methodologies and Frameworks in Chess',
117+
link: 'https://www.cs.toronto.edu/~ashton/pubs/maia-partner-iclr24.pdf',
118+
description:
119+
'Explains how to build training bots that play at your level and support fair, instructive, and enjoyable games.',
120+
},
121+
],
122+
}
123+
124+
const PaperCard = ({
125+
paper,
126+
featured = false,
127+
className = '',
128+
}: {
129+
paper: typeof researchPapers.maia1
130+
featured?: boolean
131+
className?: string
132+
}) => (
133+
<motion.div
134+
className={`group relative flex h-full flex-col rounded-lg bg-background-1 transition-all duration-200 ${featured ? '' : 'hover:scale-[1.02]'} ${className} ${featured ? 'overflow-hidden' : 'p-6'}`}
135+
initial={{ opacity: 0, y: 20 }}
136+
whileInView={{ opacity: 1, y: 0 }}
137+
viewport={{ once: true }}
138+
transition={{ duration: 0.4 }}
139+
>
140+
<div
141+
className={`absolute ${featured ? 'right-4 top-4 z-10' : 'right-4 top-4'}`}
142+
>
143+
<span className="material-symbols-outlined text-sm text-primary/60">
144+
arrow_outward
145+
</span>
146+
</div>
147+
{featured && (
148+
<div className="aspect-[4/3] w-full overflow-hidden">
149+
<img
150+
src={`/assets/papers/${paper.title.includes('Maia‑2') ? 'maia2' : 'maia1'}.jpg`}
151+
alt={`${paper.title} paper preview`}
152+
className="h-full w-full object-cover object-top"
153+
/>
154+
</div>
155+
)}
156+
<div className={`flex flex-1 flex-col items-start justify-between`}>
157+
<div className={`flex flex-col ${featured ? 'p-6' : ''}`}>
158+
<h4
159+
className={`pr-6 font-bold leading-tight ${featured ? 'text-center text-base' : 'text-left text-lg'}`}
160+
>
161+
{paper.title}
162+
</h4>
163+
<p
164+
className={`mt-3 text-sm text-primary/80 ${featured ? 'text-center leading-relaxed' : 'text-left'}`}
165+
>
166+
{paper.description}
167+
</p>
168+
</div>
169+
{featured && (
170+
<a
171+
href={paper.link}
172+
target="_blank"
173+
rel="noreferrer"
174+
className="mt-auto inline-flex w-full items-center justify-center bg-human-4/80 px-5 py-3 font-medium text-primary transition duration-200 hover:bg-human-4"
175+
>
176+
Read {paper.title.includes('Maia‑2') ? 'Maia 2' : 'Maia 1'} Paper
177+
</a>
178+
)}
179+
</div>
180+
181+
{!featured && (
182+
<a
183+
href={paper.link}
184+
target="_blank"
185+
rel="noreferrer"
186+
className="absolute inset-0 rounded-lg"
187+
aria-label={`Read paper: ${paper.title}`}
188+
/>
189+
)}
190+
</motion.div>
191+
)
192+
80193
export const AboutMaia = () => {
81194
const [projectRef, projectInView] = useInView({
82195
triggerOnce: false,
83196
threshold: 0.2,
84197
})
85198

199+
const [researchRef, researchInView] = useInView({
200+
triggerOnce: false,
201+
threshold: 0.2,
202+
})
203+
86204
const [teamRef, teamInView] = useInView({
87205
triggerOnce: false,
88206
threshold: 0.2,
@@ -94,10 +212,10 @@ export const AboutMaia = () => {
94212
})
95213

96214
return (
97-
<div className="font-helvetica [&_a]:text-human-3">
215+
<div>
98216
<section
99217
id="main_info"
100-
className="relative flex flex-col items-center justify-center bg-background-1 py-20 text-center"
218+
className="relative flex flex-col items-center justify-center bg-background-2 py-20 text-center"
101219
ref={projectRef}
102220
>
103221
<div className="flex max-w-3xl flex-col items-center justify-center px-4 md:px-0">
@@ -130,31 +248,31 @@ export const AboutMaia = () => {
130248
Maia 2 in our paper that appeared at NeurIPS 2024.
131249
</p>
132250
</div>
133-
<br />
134-
<div className="flex items-center justify-center gap-2">
135-
<a
136-
target="_blank"
137-
rel="noreferrer"
138-
href="https://arxiv.org/pdf/2006.01855"
139-
className="rounded bg-human-3 px-6 py-2 !text-primary transition duration-200 hover:bg-human-4"
140-
>
141-
Read Maia-1 Paper
142-
</a>
143-
<a
144-
target="_blank"
145-
rel="noreferrer"
146-
href="https://www.cs.toronto.edu/~ashton/pubs/maia2-neurips2024.pdf"
147-
className="rounded bg-human-3 px-6 py-2 !text-primary transition duration-200 hover:bg-human-4"
148-
>
149-
Read Maia-2 Paper
150-
</a>
251+
</div>
252+
<div className="mx-auto max-w-7xl px-4 pt-16">
253+
<div className="grid gap-6 md:grid-cols-3">
254+
<PaperCard
255+
paper={researchPapers.maia1}
256+
featured={true}
257+
className=""
258+
/>
259+
<PaperCard
260+
paper={researchPapers.maia2}
261+
featured={true}
262+
className=""
263+
/>
264+
<div className="flex flex-col gap-4">
265+
{researchPapers.others.map((paper, index) => (
266+
<PaperCard key={index} paper={paper} className="flex-1" />
267+
))}
268+
</div>
151269
</div>
152270
</div>
153271
</section>
154272

155273
<section
156274
id="team_info"
157-
className="relative overflow-hidden bg-background-2 py-16"
275+
className="relative overflow-hidden bg-background-1 py-16"
158276
ref={teamRef}
159277
>
160278
<div className="relative z-10 mx-auto my-0 max-w-[1200px]">
@@ -170,7 +288,7 @@ export const AboutMaia = () => {
170288
</section>
171289

172290
<section
173-
className="relative flex flex-col items-center justify-center gap-2 overflow-hidden bg-background-1 py-20"
291+
className="relative flex flex-col items-center justify-center gap-2 overflow-hidden bg-background-2 py-20"
174292
ref={acknowledgementsRef}
175293
>
176294
<h3 className="text-center text-xl font-bold uppercase">

src/components/Home/Sections/AdditionalFeaturesSection.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ const FeatureCard = ({
8282
<p className="mb-5 flex-grow text-primary/80">{description}</p>
8383
</div>
8484
{action.type === 'link' ? (
85-
<motion.div>
85+
<motion.div className="mt-auto">
8686
<Link
8787
href={action.href}
8888
className="mt-auto inline-flex w-full items-center justify-center bg-human-4/80 px-5 py-3 font-medium transition duration-200 hover:bg-human-4"

src/styles/tailwind.css

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -110,14 +110,6 @@ svg {
110110
fill: rgb(var(--color-text-primary));
111111
}
112112

113-
.font-helvetica {
114-
font-family:
115-
Helvetica Neue,
116-
Helvetica,
117-
Arial,
118-
sans-serif;
119-
}
120-
121113
.no-scrollbar::-webkit-scrollbar {
122114
display: none;
123115
}

0 commit comments

Comments
 (0)