File size: 17,155 Bytes
a8898de fdf3925 a8898de 560169d e96f49a a8898de fdf3925 a8898de fdf3925 a8898de fdf3925 a8898de a8647ab fdf3925 a8647ab a8898de fdf3925 a8898de 560169d a8898de fdf3925 a8898de fdf3925 a8898de fdf3925 a8898de fdf3925 a8898de fdf3925 a8898de fdf3925 a8898de fdf3925 a8898de fdf3925 a8898de fdf3925 a8898de fdf3925 a8898de fdf3925 a8898de | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 | /* ============================================================
content.ts — content model for the Build Small landing page
Real figures & copy sourced from details.md / partner-resources.md.
============================================================ */
export type Accent = 'forest' | 'amber' | 'clay';
export const NAV = [
{ id: 'idea', label: 'the idea' },
{ id: 'tracks', label: 'tracks' },
{ id: 'rules', label: 'rules' },
{ id: 'prizes', label: 'prizes' },
{ id: 'recommender', label: 'find your kit' },
{ id: 'partners', label: 'partners' },
{ id: 'submit', label: 'validate' },
{ id: 'faq', label: 'faq' }
];
export const EVENT = {
name: 'Build Small',
tagline: 'Build something small, local, and yours.',
deadline: 'June 15, 2026',
// machine-readable deadline (UTC) — drives the live hero countdown
deadlineISO: '2026-06-15T23:59:00Z',
deadlineNote: 'final submission',
org: 'huggingface.co/BuildSmall',
paramCap: '32B',
pool: '$48k',
waysToWin: 29,
links: {
website: 'buildsmall.dev',
huggingface: 'huggingface.co/BuildSmall',
twitter: 'x.com/buildsmall',
github: 'github.com/buildsmall'
}
};
export const TRACKS = [
{
id: 'backyard',
name: 'Backyard AI',
kicker: 'the practical track',
glyph: 'shed',
blurb:
'Practical, problem-solving apps built to improve daily life — for you or someone close to you. Useful things that run on hardware you own.',
examples: [
'A custom storybook generator for a child',
'A personal study tutor',
'A receipt or bill parser',
'An on-device document assistant'
],
accent: 'amber' as Accent
},
{
id: 'wood',
name: 'Thousand Token Wood',
kicker: 'the whimsical track',
glyph: 'trees',
blurb:
'Whimsical, delightful, AI-native apps that push the boundaries of fun. Wander somewhere stranger and show off what small models can dream up.',
examples: [
'Interactive AI games',
'Out-of-the-box entertainment tools',
'A desktop pet that lives on your machine',
'A text-adventure dungeon master'
],
accent: 'forest' as Accent
}
];
export const RULES = [
{
t: 'Stay under 32B',
d: 'Every model must be under 32B parameters. Combine several small models if you like — but each one’s total parameter count must stay below the cap.'
},
{
t: 'Ship a Gradio app',
d: 'Deploy your project as a Gradio App inside the official Build Small org on Hugging Face. Docker is fine, as long as the interface is a Gradio Space.'
},
{
t: 'Record a demo',
d: 'Submit a demo video showing your app working — so judges can evaluate it even if GPU or API limits stop a live run.'
},
{
t: 'Post it',
d: 'Create one social-media post showcasing your app, and link to it from your Space README.'
},
{
t: 'Mind the GPU limit',
d: 'Submit as many apps as you like. If you rely on the provided Zero GPU resources, you’re limited to 10 Zero GPU apps per user.'
},
{
t: 'Tag your README',
d: 'Add tags for the tracks and badges you want to be considered for to the yaml block at the top of your README, plus a short write-up of the idea and tech.'
}
];
export const PRIZE_FILTERS = [
{ id: 'all', label: 'All prizes' },
{ id: 'general', label: 'General' },
{ id: 'sponsor', label: 'Sponsor prizes' },
{ id: 'bonus', label: 'Bonus badges' }
];
// General track prizes (apply to BOTH tracks). No additional criteria.
export const TRACK_PRIZES = [
{ place: '1st', award: '$4,000', note: 'per track' },
{ place: '2nd', award: '$2,500', note: 'per track' },
{ place: '3rd', award: '$1,500', note: 'per track' },
{ place: '4th', award: '$1,000', note: 'per track' },
{ place: 'Community Choice', award: '$2,000', note: 'per track · most upvotes' }
];
export type SponsorPrize = {
id: string;
sponsor: string;
title: string;
places: { place: string; award: string }[];
criteria: string;
accent: Accent;
notes: string[];
};
export const SPONSOR_PRIZES: SponsorPrize[] = [
{
id: 'openbmb',
sponsor: 'OpenBMB',
title: 'Best MiniCPM Build',
places: [
{ place: '1st', award: '$2,500' },
{ place: '2nd', award: '$1,500' },
{ place: '3rd', award: '$1,000' }
],
criteria: 'Build with MiniCPM models.',
accent: 'forest',
notes: [
'The pool is split per track: $5,000 to Backyard AI and $5,000 to Thousand Token Wood.',
'Placements above are awarded within each track.',
'Vision (MiniCPM-V) and omni (MiniCPM-o) variants qualify, not just the text models.'
]
},
{
id: 'openai',
sponsor: 'OpenAI',
title: 'Best Use of Codex',
places: [
{ place: '1st', award: '$5,000' },
{ place: '2nd', award: '$3,000' },
{ place: '3rd', award: '$1,000' }
],
criteria: 'Requires Codex-attributed commits in your connected GitHub repo or Space.',
accent: 'amber',
notes: [
'$10,000 total, awarded across all submissions.',
'Using Codex holistically — fine-tuning models, building complex agents — ranks higher than light use.'
]
},
{
id: 'nvidia',
sponsor: 'NVIDIA',
title: 'Nemotron Hardware Prize',
places: [
{ place: 'Best space', award: 'RTX 5080' },
{ place: 'Community engagement', award: 'RTX 5080' }
],
criteria: 'Build with Nemotron models.',
accent: 'forest',
notes: [
'Two RTX 5080 GPUs, awarded across all submissions.',
'“Best space” is judged by the NVIDIA team; “community engagement” is judged on likes & interactions.'
]
},
{
id: 'modal',
sponsor: 'Modal',
title: 'Best Use of Modal',
places: [
{ place: '1st', award: '10,000 credits' },
{ place: '2nd', award: '7,000 credits' },
{ place: '3rd', award: '3,000 credits' }
],
criteria:
'Use Modal for the development or runtime of your app, and note it in your Space README.',
accent: 'amber',
notes: [
'$20,000 in Modal credits total, judged on best use of the platform.',
'Inference, fine-tuning, batch jobs and sandboxes all count.'
]
}
];
export type BonusBadgeT = {
id: string;
name: string;
glyph: string;
blurb: string;
award: string;
note: string;
};
export const BONUS_BADGES: BonusBadgeT[] = [
{
id: 'offbrand',
name: 'Off Brand',
glyph: 'swap',
blurb: 'The best custom UI that pushes past the default Gradio look.',
award: '$1,500',
note: 'gr.Server is your friend — go well beyond the stock components and make it yours.'
},
{
id: 'tiny',
name: 'Tiny Titan',
glyph: 'mountain',
blurb: 'The best app built on a genuinely tiny model.',
award: '$1,500',
note: 'Models must be ≤ 4B parameters. Biggest impact from the smallest weights wins.'
},
{
id: 'demo',
name: 'Best Demo',
glyph: 'play',
blurb: 'The full package: great app, great demo video, great social post.',
award: '$1,000',
note: 'Storytelling counts as much as the build — sell it across all three.'
},
{
id: 'agent',
name: 'Best Agent',
glyph: 'compass',
blurb: 'The best agentic app.',
award: '$1,000',
note: 'Multi-step tool use and planning — all under the 32B cap, of course.'
},
{
id: 'quest',
name: 'Bonus Quest Champion',
glyph: 'flag',
blurb: 'The most bonus criteria met across the board.',
award: '$2,000',
note: 'Ties go to the most ambitious, highest-quality submission despite the extra constraints.'
},
{
id: 'wildcard',
name: 'Judges’ Wildcard',
glyph: 'star',
blurb: 'For the entry that’s amazing but fits no category.',
award: '$1,000',
note: 'No entry needed — every submission is in the running. We know you’re out there.'
}
];
export type Achievement = {
id: string;
name: string;
glyph: string;
label: string;
blurb: string;
};
// Bonus badges with no prize — objective, self-declarable achievements a
// participant tags their own Space for (verified by us at judging time).
export const ACHIEVEMENTS: Achievement[] = [
{
id: 'offgrid',
name: 'Off the Grid',
glyph: 'unplug',
label: 'Local-first',
blurb: 'No cloud APIs. The whole thing runs on the model in front of you.'
},
{
id: 'welltuned',
name: 'Well-Tuned',
glyph: 'target',
label: 'Fine-tuned',
blurb: 'Your app uses a fine-tuned model you’ve published on Hugging Face.'
},
{
id: 'offbrand',
name: 'Off-Brand',
glyph: 'palette',
label: 'Custom UI',
blurb: 'A custom frontend that pushes past the default Gradio look (hint: see gr.Server).'
},
{
id: 'llama',
name: 'Llama Champion',
glyph: 'cpu',
label: 'llama.cpp',
blurb: 'Your model runs through the llama.cpp runtime.'
},
{
id: 'sharing',
name: 'Sharing is Caring',
glyph: 'share',
label: 'Open trace',
blurb: 'You shared your agent trace on the Hub for everyone to learn from.'
},
{
id: 'fieldnotes',
name: 'Field Notes',
glyph: 'notebook',
label: 'Write-up',
blurb: 'You wrote a blog post or report about what you built and what you learned.'
}
];
export type PartnerSummary = {
id: string;
name: string;
accent: string;
one: string;
sponsors: boolean;
size: 'rich' | 'infra' | 'light';
tag: string;
};
export const PARTNERS: PartnerSummary[] = [
{
id: 'openbmb',
name: 'OpenBMB',
accent: '#3d6a55',
one: 'MiniCPM family — tiny, capable text · vision · audio · omni models (1B–8B).',
sponsors: true,
size: 'rich',
tag: '1B–8B models'
},
{
id: 'blackforest',
name: 'Black Forest Labs',
accent: '#5a4b73',
one: 'FLUX.2 Klein — text-to-image & precise image editing at 4B / 9B.',
sponsors: false,
size: 'light',
tag: 'image gen'
},
{
id: 'openai',
name: 'OpenAI · Codex',
accent: '#1f7a6b',
one: 'Codex coding agent (GPT-5.5) with GitHub, Figma & Hugging Face plugins.',
sponsors: true,
size: 'infra',
tag: 'coding agent'
},
{
id: 'nvidia',
name: 'NVIDIA',
accent: '#4d7a2e',
one: 'Nemotron 3 family — Nano · Omni · ASR · Parse · Embed.',
sponsors: true,
size: 'rich',
tag: 'model suite'
},
{
id: 'modal',
name: 'Modal',
accent: '#2f6f8f',
one: 'Serverless compute for inference, training, batch & sandboxes.',
sponsors: true,
size: 'infra',
tag: 'compute'
},
{
id: 'jetbrains',
name: 'JetBrains',
accent: '#b0453d',
one: 'Mellum 2 — 12B MoE coding models, Thinking & Instruct.',
sponsors: false,
size: 'light',
tag: '12B MoE'
},
{
id: 'cohere',
name: 'Cohere Labs',
accent: '#9c5a2b',
one: 'Cohere Transcribe (ASR) and Tiny Aya multilingual models.',
sponsors: false,
size: 'rich',
tag: 'ASR · multilingual'
}
];
// Brand logos, keyed by partner id (shared across PARTNERS, SPONSOR_PRIZES and partner pages).
export const PARTNER_LOGOS: Record<string, string> = {
openbmb: '/partners/openbmb.png',
blackforest: '/partners/blackforest.png',
openai: '/partners/openai.png',
nvidia: '/partners/nvidia.png',
modal: '/partners/modal.png',
jetbrains: '/partners/jetbrains.png',
cohere: '/partners/cohere.svg'
};
export type BuildNeed = {
id: string;
label: string;
glyph: string;
desc: string;
matches: { partner: string; model: string; why: string }[];
};
// Recommender — "what are you building?" -> matched partners
export const BUILD_NEEDS: BuildNeed[] = [
{
id: 'image',
label: 'Image / OCR app',
glyph: 'image',
desc: 'Read documents, understand photos, or generate & edit images.',
matches: [
{
partner: 'openbmb',
model: 'MiniCPM-V 4.6',
why: 'Vision-language at ~1.3B — strong OCR & document understanding.'
},
{
partner: 'blackforest',
model: 'FLUX.2 Klein',
why: 'Generate and edit images locally at 4B / 9B.'
},
{
partner: 'nvidia',
model: 'Nemotron Parse',
why: 'Sub-1B structured extraction from complex documents.'
}
]
},
{
id: 'voice',
label: 'Voice / audio app',
glyph: 'wave',
desc: 'Transcribe speech, build a voice assistant, or process audio.',
matches: [
{
partner: 'cohere',
model: 'Cohere Transcribe',
why: '2B ASR covering 14 languages — runs on the edge.'
},
{ partner: 'nvidia', model: 'Nemotron 3 ASR', why: 'Fast, compact speech recognition.' },
{
partner: 'openbmb',
model: 'MiniCPM-o 4.5',
why: 'Full-duplex omni model — speech in, speech out.'
}
]
},
{
id: 'text',
label: 'Tiny text assistant',
glyph: 'chat',
desc: 'A focused chatbot, summarizer, or helper that fits in your pocket.',
matches: [
{
partner: 'openbmb',
model: 'MiniCPM5-1B',
why: 'A featherweight text model that runs local-first.'
},
{
partner: 'nvidia',
model: 'Nemotron 3 Nano 4B',
why: 'Edge-ready reasoning in a tiny footprint.'
},
{
partner: 'cohere',
model: 'Tiny Aya',
why: 'Multilingual out of the box across many language families.'
}
]
},
{
id: 'coding',
label: 'Coding agent',
glyph: 'code',
desc: 'An agent that writes, reviews, or refactors code.',
matches: [
{
partner: 'jetbrains',
model: 'Mellum 2',
why: '12B MoE tuned for code — Thinking & Instruct.'
},
{
partner: 'nvidia',
model: 'Nemotron Cascade',
why: 'Specialist tuned for math and code tasks.'
}
]
},
{
id: 'compute',
label: 'Need compute / training',
glyph: 'server',
desc: 'Fine-tune, run batch jobs, or serve your model at scale.',
matches: [
{
partner: 'modal',
model: 'Modal Sandboxes',
why: 'Serverless GPUs for inference, training & untrusted code.'
}
]
}
];
export const SUBMIT_STEPS = [
{
t: 'Meet the criteria',
d: 'Double-check your build satisfies the entry rules and any prize criteria you’re targeting.'
},
{
t: 'Join the org',
d: 'Join the Build Small hackathon organisation on Hugging Face — your home base for the jam.'
},
{ t: 'Upload your Space', d: 'Upload your submission as a Gradio Space inside the org.' },
{
t: 'Record a demo',
d: 'Film a demo selling your Space — no humility. Put it on YouTube, upload it to the Space, or host it publicly.'
},
{ t: 'Post on social', d: 'Share one post about your build on social media.' },
{
t: 'Update your README',
d: 'Add links to the post and demo video, tags for tracks + badges in the yaml block at the top, and a short write-up of the idea and tech.'
}
];
export const FAQS = [
{
q: 'What does “under 32B” actually mean?',
a: 'Every model your project depends on must have under 32B total parameters (not just active parameters). You can freely combine several models — say a 14B text model, a 7B speech model, and a 12B image model — as long as each one individually stays under the cap.'
},
{
q: 'Do I have to use a sponsor’s model?',
a: 'No. For the general tracks you can use any model you like, including ones from non-sponsoring orgs, as long as it stays under the 32B cap. Sponsor prizes each require their own model or platform and have their own criteria, listed on every prize.'
},
{
q: 'Do I need to exclusively use a sponsor’s models to win their prize?',
a: 'No — you can use other providers’ models too. But the sponsor’s models must form a core part of the experience, since each sponsor is looking for the most interesting use of their own models.'
},
{
q: 'Am I eligible for the OpenAI Codex prize if I didn’t get free Codex credits?',
a: 'Yes. The credits given to the first 1,000 registrants aren’t tied to the prize. As long as you use Codex during development and have Codex-attributed commits in the Space’s history or a linked GitHub repo, you’re eligible.'
},
{
q: 'Is there a GPU limit?',
a: 'If you rely on the provided Zero GPU resources, you’re limited to 10 Zero GPU apps per user. Otherwise, run on consumer hardware or use Modal credits.'
},
{
q: 'Can I use a hosted API instead of running locally?',
a: 'Yes. Several partners (like OpenBMB) provide free hosted API access, and Hugging Face inference providers offer plenty more options. That said, not every model is available via a cloud API, and some prizes require running locally to be eligible.'
},
{
q: 'Can one project win multiple prizes?',
a: 'Yes — awards stack. One Space could place in a general track (say Backyard AI), win sponsor prizes (like OpenBMB’s Best MiniCPM Build, the OpenAI Codex prize, and Best Use of Modal), and still pick up bonus badges such as Tiny Titan if every model is ≤ 4B — all at once.'
},
{
q: 'Can I submit multiple apps?',
a: 'Yes — submit as many apps as you like, and each one will be considered.'
},
{
q: 'How do I submit?',
a: 'Ship a Gradio Space in the org, record a demo video, post on social, and update your README with links and tags. See the trail map above for the full sequence.'
}
];
export const FOOTER_LINKS: [string, [string, string][]][] = [
[
'Explore',
[
['The idea', '/#idea'],
['Tracks', '/#tracks'],
['Prizes', '/#prizes'],
['Partners', '/#partners']
]
],
[
'Take part',
[
['Rules', '/#rules'],
['Find your kit', '/#recommender'],
['Validate README', '/submit'],
['FAQ', '/#faq']
]
],
[
'Elsewhere',
[
['HF Org', 'https://huggingface.co/BuildSmall'],
['Gradio', 'https://gradio.app'],
['Hugging Face', 'https://huggingface.co'],
['X / Twitter', 'https://x.com/buildsmall']
]
]
];
|