/* ============================================================ 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 = { 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']]] ];