File size: 16,454 Bytes
a8898de 560169d a8898de a8647ab a8898de a8647ab a8898de 560169d a8898de a8647ab a8898de 560169d a8898de 560169d a8647ab a8898de a8647ab 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 | /* ============================================================
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: 'submit' },
{ id: 'faq', label: 'faq' }
];
export const EVENT = {
name: 'Build Small',
tagline: 'Build something small, local, and yours.',
deadline: 'June 15, 2026',
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'], ['Submit', '/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']]]
];
|