FitCheck / static /index.html
cn0303's picture
Pre-deadline audit: honest sealed-test numbers in parse hint + model card, lookup timeout, roofline cache fix
f3cb4af verified
Raw
History Blame Contribute Delete
11.8 kB
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>FitCheck - what AI can your computer run?</title>
<meta name="description" content="Tell FitCheck about your computer in plain words. Get an honest answer about what AI you can actually run on it, from chatbots to object detection, and how to start." />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Press+Start+2P&family=VT323&family=Inter:wght@400;500;600&display=swap" rel="stylesheet">
<link rel="stylesheet" href="/static/style.css" />
</head>
<body>
<header class="topbar">
<div class="logo">
<span class="logo-mark"><span class="ic" data-ic="check"></span></span>
<span>Fit<span class="tick">Check</span></span>
</div>
<div class="spacer"></div>
<nav>
<a href="#how">How it works</a>
<a href="#glossary-anchor">Jargon, explained</a>
</nav>
<div class="statuschip"><span class="dot"></span><span class="lbl">engine</span> <b id="cat-version-chip">local</b></div>
</header>
<main class="container">
<section class="hero">
<h1>What AI can <span class="accent">your computer</span> actually run?</h1>
<p>Tell FitCheck about your setup in plain words. It tells you honestly what you
can run today, from chatbots to object detection, what it will feel like, and exactly how to start.</p>
</section>
<div class="layout">
<!-- ============================== INPUTS ============================== -->
<aside class="panel form-panel">
<div class="panel-head"><span class="lbl">input</span><span class="lbl">01</span></div>
<div class="panel-body">
<!-- Mode: check what I own, or advise what to buy -->
<div class="field" style="margin-bottom:var(--s-5)">
<div class="segmented" id="mode-seg">
<button class="seg-btn active" data-val="have"><span class="ic" data-ic="monitor"></span>Check my computer</button>
<button class="seg-btn" data-val="buy"><span class="ic" data-ic="search"></span>Help me pick one</button>
</div>
</div>
<!-- Step 1: machine -->
<div class="step" id="machine-step">
<div class="step-head"><span class="step-num">1</span><h2>Your computer</h2></div>
<div class="field">
<span class="label">Describe it in your own words <span class="optional">(fastest)</span></span>
<textarea id="paste" placeholder="'Dell XPS, RTX 3050, 16GB' - or paste your dxdiag / Task Manager output..."></textarea>
<button class="parse-btn" id="parse-btn">Fill the form from this</button>
<div class="hint" id="parse-hint">A small model fine-tuned for this reads your text and fills the pickers below. On a sealed test it gets fields right about 88% of the time, but it still guesses sometimes (about 18% invented-field rate) - so double-check the pickers, and anything you didn't say should stay blank.</div>
</div>
<div class="field">
<span class="label">What kind of computer?</span>
<div class="segmented" id="computer-seg">
<button class="seg-btn active" data-val="Windows laptop"><span class="ic brand" data-ic="brand-windows"></span>Windows laptop</button>
<button class="seg-btn" data-val="Windows desktop"><span class="ic brand" data-ic="brand-windows"></span>Windows desktop</button>
<button class="seg-btn" data-val="Mac"><span class="ic brand" data-ic="brand-apple"></span>Mac</button>
<button class="seg-btn" data-val="Linux PC"><span class="ic brand" data-ic="brand-linux"></span>Linux PC</button>
<button class="seg-btn" data-val="Mini PC / Raspberry Pi" style="grid-column:1/-1"><span class="ic brand" data-ic="brand-raspberrypi"></span>Mini PC / Raspberry Pi</button>
</div>
</div>
<div class="field">
<span class="label" id="ram-label">Memory (RAM)</span>
<select id="ram">
<option>2 GB</option><option>4 GB</option><option>8 GB</option>
<option selected>16 GB</option><option>24 GB</option><option>32 GB</option>
<option>48 GB</option><option>64 GB</option><option>96 GB</option><option>128 GB</option>
</select>
<div class="hint">Not sure? See "How do I find my specs?" below.</div>
</div>
<div class="field" id="provider-field">
<span class="label">Graphics (GPU)</span>
<div class="segmented cols-3" id="provider-seg">
<button class="seg-btn active" data-val="none">None / built-in</button>
<button class="seg-btn" data-val="nvidia"><span class="ic brand" data-ic="brand-nvidia"></span>NVIDIA</button>
<button class="seg-btn" data-val="amd"><span class="ic brand" data-ic="brand-amd"></span>AMD</button>
<button class="seg-btn" data-val="apple"><span class="ic brand" data-ic="brand-apple"></span>Apple</button>
<button class="seg-btn" data-val="intel"><span class="ic brand" data-ic="brand-intel"></span>Intel</button>
<button class="seg-btn" data-val="unsure">Not sure</button>
</div>
<select id="gpu" style="margin-top:var(--s-3); display:none"></select>
</div>
<details class="disc" id="advanced-disc">
<summary>Advanced: enter exact numbers <span class="chev ic" data-ic="chevron"></span></summary>
<div class="disc-body">
<div class="field">
<span class="label">Graphics memory (VRAM), if you know it</span>
<input type="number" id="vram" placeholder="e.g. 8" min="0" max="200" step="1" />
<div class="hint" id="vram-hint">Overrides the GPU picker above. Leave blank to use the picker.</div>
</div>
</div>
</details>
</div>
<!-- Step 2: goal -->
<div class="step">
<div class="step-head"><span class="step-num">2</span><h2>What do you want to do? <span class="optional">(pick one or several)</span></h2></div>
<div class="task-toggle" id="task-toggle" role="tablist"
data-tip="Running a model and fine-tuning it need very different memory. Switch this and the recommendations below recompute for training.">
<button class="tt-opt active" data-task="run" role="tab"><span class="ic" data-ic="run"></span>Run a model</button>
<button class="tt-opt" data-task="finetune" role="tab"><span class="ic" data-ic="finetune"></span>Train / fine-tune</button>
<span class="tt-slider" aria-hidden="true"></span>
</div>
<div id="usecase-picker"><!-- rendered by app.js --></div>
<div class="field" id="repo-field" style="margin-top:var(--s-3); margin-bottom:0; display:none">
<span class="label">Paste the model to check</span>
<input type="text" id="repo-check" placeholder="Hugging Face model id or link, e.g. lerobot/smolvla_base" />
<div class="hint">FitCheck gives a full breakdown for <b>many</b> models, memory, and for text models speed and a comparison, <b>even ones not in our catalogue</b>, via a live Hugging Face lookup (needs Safetensors metadata). The lookup needs network; the deterministic advice is local.</div>
</div>
</div>
<!-- Step 3: preference -->
<div class="step" id="priority-step">
<div class="step-head"><span class="step-num">3</span><h2>What matters most? <span class="optional">(optional)</span></h2></div>
<div class="field" style="margin-bottom:0">
<div class="segmented" id="priority-seg">
<button class="seg-btn active" data-val="balanced" data-tip="Our default: the best mix of quality and speed your machine can comfortably handle."><span class="ic" data-ic="balanced"></span>Balanced</button>
<button class="seg-btn" data-val="quality" data-tip="Pick the most capable model that runs, even if it's slower or tight on memory."><span class="ic" data-ic="quality"></span>Best quality</button>
<button class="seg-btn" data-val="speed" data-tip="Prefer the snappiest model (smaller, or mixture-of-experts) for instant replies."><span class="ic" data-ic="speed"></span>Fastest</button>
<button class="seg-btn" data-val="open" data-tip="Prefers open-licensed, ungated, commercial-friendly models (no sign-in or non-commercial licence). Any downloaded model then runs locally."><span class="ic" data-ic="offline"></span>Fully open</button>
</div>
</div>
</div>
<button class="cta" id="check-btn">Check my setup <span class="ic" data-ic="arrow"></span></button>
<details class="disc" id="find-specs">
<summary><span class="ic sum-ic" data-ic="search"></span>How do I find my specs? <span class="chev ic" data-ic="chevron"></span></summary>
<div class="disc-body" id="find-specs-body"><!-- filled by app.js per computer type --></div>
</details>
<span id="glossary-anchor"></span>
<details class="disc" id="glossary">
<summary><span class="ic sum-ic" data-ic="book"></span>What do these words mean? <span class="chev ic" data-ic="chevron"></span></summary>
<div class="disc-body">
<dl>
<div><dt>Model</dt><dd>The AI's "brain". Bigger means smarter, but heavier.</dd></div>
<div><dt>Parameters (e.g. 7B)</dt><dd>How big the brain is. 7B is 7 billion. More means smarter and hungrier for memory.</dd></div>
<div><dt>Quantisation (4-bit, 8-bit)</dt><dd>Shrinking a model so it fits. 4-bit is the popular sweet spot: much smaller, barely-noticeable quality loss.</dd></div>
<div><dt>VRAM</dt><dd>The fast memory on a graphics card. The biggest factor in what runs quickly.</dd></div>
<div><dt>RAM</dt><dd>Your computer's normal memory. Models can use it too, but it is slower.</dd></div>
<div><dt>GGUF</dt><dd>A single-file model format made for running locally.</dd></div>
</dl>
</div>
</details>
</div>
</aside>
<!-- ============================== RESULTS ============================== -->
<section class="panel results-panel" id="results">
<div class="empty-state">
<div class="big"><span class="ic" data-ic="monitor"></span></div>
<h2>Your honest answer appears here</h2>
<p>Fill in your computer and what you want to do, then press <b>Check my setup</b>. Results update as you change things.</p>
</div>
</section>
</div>
<footer class="foot" id="how">
<p>FitCheck gives <b>conservative</b> estimates from a transparent rules engine.
GGUF sizes are <b>real Hugging Face file sizes</b> (shown rounded); other sizes and all chat-memory
figures are deliberately pessimistic estimates. It would rather under-promise than over-promise. Real speed depends on your exact chip, drivers and settings.</p>
<p style="margin-top:var(--s-2)">Catalogue of real models last verified <b id="cat-version">local</b>. Built for the Hugging Face Build Small hackathon.</p>
</footer>
</main>
<script src="/static/icons.js"></script>
<script src="/static/app.js"></script>
</body>
</html>