Skip to content

Commit 15c9f25

Browse files
gaojie058claude
andauthored
Add competition section, sponsors, and hero call-to-action (#11)
- New Competition section linking the IAB × Glee competition, plus a Competition Organization Team block on the Organizers page. - Sponsors section now lists Abaka AI and Contra Labs instead of TBA. - Hero gains two flame-marked buttons (CFP, Competition) and the countdown moves up from the Important Dates table. - Nav swaps the "Workshop @ NeurIPS 2026" text for the NeurIPS logo, trims News/Scope, adds Sponsors, and flags hot links with a flame. - Advisory board and program committee render as a two-column list instead of an inline run of names; Mark Dredze added to the board. - CFP notes that travel grants and paper awards will be available. Claude-Session: https://claude.ai/code/session_01HRgSZXwx41gSBV4H8Uxd47 Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
1 parent 8fc2708 commit 15c9f25

8 files changed

Lines changed: 440 additions & 33 deletions

File tree

‎img/abaka-logo.svg‎

Lines changed: 22 additions & 0 deletions
Loading

‎img/contra-labs.png‎

6.74 KB
Loading

‎img/neurips-logo.svg‎

Lines changed: 90 additions & 0 deletions
Loading

‎src/App.jsx‎

Lines changed: 66 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,17 @@
11
import { Fragment, useEffect, useState } from 'react';
2+
import abakaLogo from '../img/abaka-logo.svg';
3+
import contraLabsLogo from '../img/contra-labs.png';
24
import heroImage from '../img/hero.png';
5+
import FlameIcon from './components/FlameIcon';
36
import Navigation from './components/Navigation';
47
import PersonCard from './components/PersonCard';
58
import TopicIcon from './components/TopicIcon';
69
import { getPeopleByRole, PERSON_ROLE } from './data/peopleRepository';
710
import {
811
advisors,
912
cfpCategories,
13+
competitionTeam,
14+
competitionUrl,
1015
ethicsNote,
1116
importantDates,
1217
neuripsReviewTrack,
@@ -38,8 +43,20 @@ function Hero() {
3843
<span className="venue-divider" aria-hidden="true">·</span>
3944
<span className="venue-location venue-location--full">International Convention Centre, Sydney, Australia</span>
4045
<span className="venue-location venue-location--short">ICC Sydney, Australia</span>
46+
<span className="venue-divider" aria-hidden="true">·</span>
4147
<span className="venue-date">December 11–12, 2026</span>
4248
</div>
49+
<div className="hero-actions">
50+
<a className="hero-btn hero-btn--primary" href="#cfp">
51+
<FlameIcon />
52+
Call for Papers
53+
</a>
54+
<a className="hero-btn" href="#competition">
55+
<FlameIcon />
56+
Join IAB × Glee Competition
57+
</a>
58+
</div>
59+
<Countdown variant="hero" />
4360
</div>
4461
</header>
4562
);
@@ -217,7 +234,6 @@ function CallForPapers() {
217234
</div>
218235

219236
<h3 className="cfp-heading">Important Dates</h3>
220-
<Countdown />
221237
<table className="dates-table">
222238
<tbody>
223239
{importantDates.map(({ label, value, key }) => (
@@ -234,6 +250,8 @@ function CallForPapers() {
234250
{ethicsNote.body}{' '}
235251
<a href={ethicsNote.url} target="_blank" rel="noopener noreferrer">{ethicsNote.linkText}</a> for details.
236252
</p>
253+
254+
<p className="lead cfp-note">Travel grants/paper awards will be available.</p>
237255
</div>
238256
</section>
239257
);
@@ -253,8 +271,9 @@ function timeLeft(deadline) {
253271
};
254272
}
255273

256-
function Countdown() {
274+
function Countdown({ variant }) {
257275
const [left, setLeft] = useState(() => timeLeft(submissionDeadline));
276+
const className = `countdown${variant === 'hero' ? ' countdown--hero' : ''}`;
258277

259278
useEffect(() => {
260279
const timer = setInterval(() => setLeft(timeLeft(submissionDeadline)), 1000);
@@ -263,15 +282,15 @@ function Countdown() {
263282

264283
if (!left) {
265284
return (
266-
<div className="countdown">
285+
<div className={className}>
267286
<div className="cd-label">Submissions are closed<strong>The deadline has passed.</strong></div>
268287
</div>
269288
);
270289
}
271290

272291
return (
273-
<div className="countdown">
274-
<div className="cd-label">Submission deadline in<strong>{submissionDeadlineLabel}</strong></div>
292+
<div className={className}>
293+
<div className="cd-label">Paper submission deadline<strong>{submissionDeadlineLabel}</strong></div>
275294
<div className="cd-units">
276295
{[['Days', left.days], ['Hours', left.hours], ['Minutes', left.minutes], ['Seconds', left.seconds]].map(([unit, value]) => (
277296
<div className="cd-unit" key={unit}>
@@ -284,13 +303,31 @@ function Countdown() {
284303
);
285304
}
286305

287-
function InlinePeople({ people, linked = false }) {
288-
return people.map(([name, affiliation, url], index) => (
289-
<span key={name}>
290-
{linked && url ? <a href={url} target="_blank" rel="noopener noreferrer">{name}</a> : name} ({affiliation})
291-
{index < people.length - 1 && <span aria-hidden="true"> · </span>}
292-
</span>
293-
));
306+
function Competition() {
307+
return (
308+
<section id="competition">
309+
<div className="container">
310+
<h2>Competition</h2>
311+
<p className="lead">We are preparing a community competition on interpreting agent behavior. Reports written by competition participants can be selected for presentation at the workshop. We will shortly update here on how to attend and how to present it in our workshop. Currently at a glance:</p>
312+
<p className="lead"><a href={competitionUrl} target="_blank" rel="noopener noreferrer">{competitionUrl}</a></p>
313+
</div>
314+
</section>
315+
);
316+
}
317+
318+
function PeopleList({ people, linked = false }) {
319+
return (
320+
<ul className="people-list">
321+
{people.map(([name, affiliation, url]) => (
322+
<li key={name}>
323+
<span className="pl-name">
324+
{linked && url ? <a href={url} target="_blank" rel="noopener noreferrer">{name}</a> : name}
325+
</span>
326+
<span className="pl-affil">{affiliation}</span>
327+
</li>
328+
))}
329+
</ul>
330+
);
294331
}
295332

296333
function Organizers() {
@@ -304,12 +341,17 @@ function Organizers() {
304341
<div className="adv">
305342
<h3>Advisory Board</h3>
306343
<p className="adv-note">We thank the faculty and senior researchers who advise and support this workshop.</p>
307-
<p><InlinePeople people={advisors} linked /></p>
344+
<PeopleList people={advisors} linked />
345+
</div>
346+
<div className="adv">
347+
<h3>Competition Organization Team</h3>
348+
<p className="adv-note">We thank our team members who help us run the competition.</p>
349+
{competitionTeam.length ? <PeopleList people={competitionTeam} linked /> : <p>To be announced</p>}
308350
</div>
309351
<div className="adv">
310352
<h3>Program Committee</h3>
311353
<p className="adv-note">We thank our program committee members from the NLP, HCI, and ML systems communities.</p>
312-
<p><InlinePeople people={programCommittee} linked /></p>
354+
<PeopleList people={programCommittee} linked />
313355
</div>
314356
</div>
315357
</section>
@@ -321,7 +363,15 @@ function Sponsors() {
321363
<section id="sponsors">
322364
<div className="container">
323365
<h2>Sponsors</h2>
324-
<p className="muted-note">To be announced</p>
366+
<p className="lead">We thank our sponsors for supporting the workshop.</p>
367+
<div className="sponsor-grid">
368+
<a className="sponsor-card" href="https://www.abaka.ai/" target="_blank" rel="noopener noreferrer">
369+
<img src={abakaLogo} alt="Abaka AI" />
370+
</a>
371+
<a className="sponsor-card" href="https://contralabs.com/creative-human-data" target="_blank" rel="noopener noreferrer">
372+
<img className="sponsor-logo--wordmark" src={contraLabsLogo} alt="Contra Labs" />
373+
</a>
374+
</div>
325375
</div>
326376
</section>
327377
);
@@ -348,6 +398,7 @@ export default function App() {
348398
<News />
349399
<Scope />
350400
<CallForPapers />
401+
<Competition />
351402
<Speakers />
352403
<Schedule />
353404
<Organizers />

‎src/components/FlameIcon.jsx‎

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
export default function FlameIcon() {
2+
return (
3+
<svg className="flame" viewBox="0 0 24 24" aria-hidden="true" focusable="false">
4+
<path
5+
className="flame-outer"
6+
d="M13 1.6c.5 3.3-.9 4.7-2.6 6.6-1.9 2.1-3.4 4-3.4 6.4A6 6 0 0 0 13 20.6a6 6 0 0 0 6-6.3c0-2.8-1.5-4.7-3-6.4-.5 1.1-1.2 1.8-2.1 2 .8-2.9-.2-6-.9-8.3z"
7+
/>
8+
<path
9+
className="flame-inner"
10+
d="M12.6 11.4c.4 1.7-.4 2.4-1.2 3.3-.7.8-1.1 1.5-1.1 2.3a2.7 2.7 0 0 0 2.8 2.7 2.7 2.7 0 0 0 2.7-2.8c0-1.6-1.3-2.8-3.2-5.5z"
11+
/>
12+
</svg>
13+
);
14+
}

‎src/components/Navigation.jsx‎

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
import { useState } from 'react';
22
import logo from '../../img/iab-icon.svg';
3+
import neuripsLogo from '../../img/neurips-logo.svg';
4+
import FlameIcon from './FlameIcon';
35
import { navLinks } from '../data/siteData';
46

57
export default function Navigation() {
@@ -11,7 +13,7 @@ export default function Navigation() {
1113
<a className="nav-logo" href="#top" onClick={() => setIsOpen(false)}>
1214
<img className="logo-mark" src={logo} alt="" />
1315
IAB
14-
<span>Workshop @ NeurIPS 2026</span>
16+
<img className="neurips-mark" src={neuripsLogo} alt="Workshop at NeurIPS 2026" title="Workshop @ NeurIPS 2026" />
1517
</a>
1618
<button
1719
className={`nav-toggle${isOpen ? ' open' : ''}`}
@@ -26,8 +28,11 @@ export default function Navigation() {
2628
<span />
2729
</button>
2830
<div id="main-navigation-links" className={`nav-links${isOpen ? ' open' : ''}`}>
29-
{navLinks.map(([label, id]) => (
30-
<a key={id} href={`#${id}`} onClick={() => setIsOpen(false)}>{label}</a>
31+
{navLinks.map(([label, id, hot]) => (
32+
<a key={id} href={`#${id}`} className={hot ? 'hot' : undefined} onClick={() => setIsOpen(false)}>
33+
{hot && <FlameIcon />}
34+
{label}
35+
</a>
3136
))}
3237
</div>
3338
</div>

‎src/data/siteData.js‎

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
1+
// A third element marks the link as hot; the nav renders a flame before the label.
12
export const navLinks = [
23
['About', 'about'],
3-
['News', 'news'],
4-
['Scope', 'topics'],
5-
['Call for Papers', 'cfp'],
4+
['Call for Papers', 'cfp', true],
5+
['Competition', 'competition', true],
66
['Speakers', 'speakers'],
77
['Schedule', 'schedule'],
88
['Organizers', 'organizers'],
9+
['Sponsors', 'sponsors'],
910
];
1011

1112
export const speakerSection = Object.freeze({
@@ -135,6 +136,8 @@ export const submissionFormats = [
135136

136137
export const openReviewUrl = 'https://openreview.net/group?id=NeurIPS.cc/2026/Workshop/IAB';
137138

139+
export const competitionUrl = 'https://glee-competition.com/';
140+
138141
export const neuripsReviewTrack = {
139142
title: 'Submission with NeurIPS reviews',
140143
intro: 'If your paper was reviewed at NeurIPS 2026, you can submit it here together with the reviews and your response. This is a second route into the workshop.',
@@ -166,6 +169,7 @@ export const ethicsNote = {
166169

167170
export const advisors = [
168171
['Ziang Xiao', 'Johns Hopkins University', 'https://www.cs.jhu.edu/faculty/ziang-xiao/'],
172+
['Mark Dredze', 'Johns Hopkins University', 'https://www.cs.jhu.edu/~mdredze/'],
169173
['Toby Jia-Jun Li', 'Notre Dame', 'https://toby.li/'],
170174
['Weiyan Shi', 'Northeastern', 'https://wyshi.github.io/'],
171175
['Fan Bai', 'Bloomberg AI', 'https://bflashcp3f.github.io/'],
@@ -174,6 +178,13 @@ export const advisors = [
174178
['Samuel Nathanson', 'xAI', 'https://www.linkedin.com/in/nathanson/'],
175179
];
176180

181+
export const competitionTeam = [
182+
['Eilam Shapira', 'Technion', 'https://eilamshapira.com/'],
183+
['Omer Madmon', 'Technion', 'https://sites.google.com/view/omer-madmon'],
184+
['Moshe Tennenholtz', 'Technion', 'https://moshet.net.technion.ac.il/'],
185+
['Roi Reichart', 'Technion', 'https://roireichart.com/'],
186+
];
187+
177188
export const programCommittee = [
178189
['Boyang Li', 'Kean University', 'https://www.liboyang.org/'],
179190
['Lin Zhang', 'JHU', 'https://zlin0.github.io/'],

0 commit comments

Comments
 (0)