packetcourt / frontend /index.html
DIV-45's picture
fix: recover table-style nutrition evidence
a54549e verified
Raw
History Blame Contribute Delete
7.87 kB
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="theme-color" content="#f4efe4">
<title>PacketCourt</title>
<style>/*__PACKETCOURT_CSS__*/</style>
</head>
<body>
<header class="topbar">
<a class="brand" href="#"><span class="brand-mark">PC</span><span>PacketCourt</span></a>
<div class="top-status"><span class="pulse"></span> <span id="model-mode">Evidence engine online</span></div>
<a class="engine-link" href="engine/" target="_blank">Gradio engine <span></span></a>
</header>
<main>
<section class="hero">
<div class="hero-copy">
<p class="kicker">INDIAN PACKET CLAIM AUDITOR</p>
<h1>The packet<br><em>takes the stand.</em></h1>
<p class="hero-text">Photograph the front and back. PacketCourt tests marketing claims against the evidence printed on the same package.</p>
<div class="hero-actions">
<button class="button primary" data-scroll="workspace">Audit a packet <span></span></button>
<button class="button quiet" id="hero-sample">Try prepared evidence</button>
</div>
</div>
<div class="hero-visual" aria-hidden="true">
<div class="packet packet-back">
<span>INGREDIENTS</span><i></i><i></i><i></i><i></i>
<b>NUTRITION<br>FACTS</b>
</div>
<div class="packet packet-front">
<span>THE<br>GOOD<br>SNACK</span>
<strong>HIGH<br>PROTEIN</strong>
<small>100% NATURAL</small>
</div>
<div class="stamp">EVIDENCE<br>REQUIRED</div>
</div>
</section>
<section class="trust-strip">
<div><b>01</b><span>No unexplained health score</span></div>
<div><b>02</b><span>Every verdict cites label evidence</span></div>
<div><b>03</b><span>Uncertainty is shown, never hidden</span></div>
</section>
<section class="workspace" id="workspace">
<div class="section-heading">
<div><p class="kicker">OPEN A CASE</p><h2>Submit the packet's testimony.</h2></div>
<p>Use photos for local OCR, paste text directly, or load a prepared case.</p>
</div>
<div class="mode-switch" role="tablist">
<button class="active" data-mode="photos">01 · Photos</button>
<button data-mode="text">02 · Label text</button>
<button data-mode="samples">03 · Prepared cases</button>
</div>
<div class="mode-panel active" id="mode-photos">
<div class="upload-grid">
<label class="upload-card">
<input type="file" id="front-file" accept="image/*" capture="environment" multiple>
<div class="upload-preview" id="front-preview"><span class="upload-icon">F</span></div>
<div><b>Front and side claims</b><span>Claims, badges and promises · up to 6 photos</span></div>
<strong id="front-count">Add photos</strong>
</label>
<label class="upload-card">
<input type="file" id="back-file" accept="image/*" capture="environment" multiple>
<div class="upload-preview" id="back-preview"><span class="upload-icon">B</span></div>
<div><b>Back and side evidence</b><span>Ingredients, nutrition, dates and directions · up to 6 photos</span></div>
<strong id="back-count">Add photos</strong>
</label>
</div>
<button class="button dark wide" id="read-photos">Read all packet photos <span></span></button>
<button class="button quiet wide" id="clear-photos">Clear selected photos</button>
<p class="status-line" id="ocr-status">Add close photos of every panel. Reopen the camera picker to add another angle.</p>
</div>
<div class="mode-panel" id="mode-text">
<div class="text-grid">
<label><span>Front claims</span><textarea id="front-text" placeholder="HIGH PROTEIN · MULTIGRAIN · 100% NATURAL"></textarea></label>
<label><span>Back-label evidence</span><textarea id="back-text" placeholder="Ingredients, nutrition panel, FSSAI license and date text..."></textarea></label>
</div>
<button class="button primary wide" id="audit-text">Put this packet on trial <span></span></button>
</div>
<div class="mode-panel" id="mode-samples">
<div class="sample-grid" id="sample-grid"></div>
</div>
</section>
<section class="results hidden" id="results">
<div class="case-header">
<div><p class="kicker">CASE FINDINGS</p><h2>What the front says.<br>What the back proves.</h2></div>
<div class="case-score"><span id="claim-count">0</span><small>CLAIMS<br>EXAMINED</small></div>
</div>
<section class="agent-section">
<div class="agent-heading">
<div><p class="kicker">INVESTIGATION AGENT</p><h3>How this packet was examined.</h3></div>
<span id="router-model"></span>
</div>
<div class="agent-steps" id="agent-steps"></div>
<div class="agent-stop">
<p><b>STOP REASON</b><span id="stop-reason"></span></p>
<p><b>MISSING EVIDENCE</b><span id="missing-evidence"></span></p>
</div>
<div class="nemotron-review" id="nemotron-review"></div>
</section>
<section class="gap-section">
<div class="gap-heading"><p class="kicker">PERSUASION GAP</p><h3>Material context the front leaves quiet.</h3></div>
<div class="gap-grid" id="gap-grid"></div>
</section>
<div class="claim-grid" id="claim-grid"></div>
<div class="evidence-summary">
<article><p class="kicker">NUTRITION EVIDENCE</p><div id="nutrition-grid"></div><p class="nutrition-explanation" id="nutrition-explanation"></p></article>
<article class="date-card"><p class="kicker">DATE EVIDENCE</p><h3 id="expiry-status"></h3><p id="opening-status"></p><p>Expiry interpretation is evidence, not a food-safety guarantee.</p></article>
</div>
<details><summary>View machine-readable evidence case</summary><pre id="raw-json"></pre></details>
<section class="feedback-agent">
<div>
<p class="kicker">COMMUNITY REVIEW AGENT</p>
<h3>Help the next audit get sharper.</h3>
<p>Corrections enter a public review queue with this audit's evidence, router path, and Nemotron review. They never retrain production models without approval.</p>
</div>
<div class="feedback-controls">
<div class="feedback-choice">
<button class="button quiet" data-feedback="accurate">This audit is accurate</button>
<button class="button quiet" data-feedback="needs_correction">This needs correction</button>
</div>
<textarea id="feedback-correction" placeholder="What did PacketCourt miss or misread? Cite the packet evidence."></textarea>
<button class="button dark" id="submit-feedback">Queue evidence review <span></span></button>
<span id="feedback-status"></span>
</div>
</section>
</section>
<section class="method">
<p class="kicker">THE STANDARD OF PROOF</p>
<h2>PacketCourt refuses to guess.</h2>
<div class="method-grid">
<div><span>SUPPORTED</span><p>The supplied back label provides direct evidence.</p></div>
<div><span>CONTRADICTED</span><p>The supplied evidence conflicts with the front claim.</p></div>
<div><span>CONTEXT MISSING</span><p>The claim may be true, but material context is quiet.</p></div>
<div><span>CANNOT VERIFY</span><p>The packet has not supplied enough evidence.</p></div>
</div>
</section>
</main>
<footer><span>PacketCourt · Built Small 2026</span><span>Evidence analysis, not medical or legal advice.</span></footer>
<script>/*__PACKETCOURT_JS__*/</script>
</body>
</html>