The proof feed

Receipts & the Seal

The differentiator made visible. A ledger with one entry per turn: the inference receipt, the memory receipt, and — only when the call was genuinely attested — the Seal.

#The Record

Every value in the Record is real; the component is built so we never render a receipt we did not receive. Inside each receipt, the provider links to the chain explorer, hashes carry a copy button, and tx hashes link out. A judge does not take the UI’s word for anything — every claim is a link to the underlying 0G record.

#The earned Seal

The Seal — an SVG wax stamp with concentric crimson rings and a circular “SWORN · TEE ATTESTED · 0G” legend — renders only when the inference was genuinely attested.

apps/web/src/components/Record.tsxtsx
export function RecordEntry({ turn, variant, shareable }) {
  const isSample = turn.turnId === 'turn_sample';   // the sample is always visibly marked
  return (
    <article className={'entry ' + variant}>
      {isSample && <div className="entry-sample">Sample · illustrative, not a real receipt</div>}
      <InferenceReceiptView receipt={turn.inferenceReceipt} />
      <MemoryReceiptView receipt={turn.memoryReceipt} />
      {/* the Seal is earned: shown only when the inference was genuinely attested */}
      {turn.inferenceReceipt.valid && <SealBlock stamp={variant === 'now'} />}
      {shareable && <a className="entry-share" href={verifyHref(turn.turnId)}>Verify this call</a>}
    </article>
  );
}

Its docstring is blunt: “It is EARNED: render it only on a genuinely attested call. Faking it is the one unforgivable bug.”

#The state vocabulary

The chips translate the wire status into Sworn’s language, honestly in both directions:

apps/web/src/components/primitives.tsxtsx
export function InferenceStateChip({ valid }) {
  // valid is the REAL processResponse result. true → "Sworn"; false → "Unsworn".
  return valid
    ? <div className="state ok"><Tick />Sworn</div>
    : <div className="state unsworn">Unsworn</div>;
}

export function MemoryStateChip({ status }) {
  if (status === 'verified') return <div className="state ok"><Tick />On the record</div>;
  if (status === 'failed')   return <div className="state unsworn">Write failed</div>;
  return <div className="state pending"><span className="spin" />Filing · ~3 min</div>;
}

Sworn and On the record are the attested states; Filing is in flight; Unsworn and Write failed are shown plainly when verification did not happen.

#The design system

The look is deliberate: a near-black page, a single crimson accent (the wax-seal red), one serif-italic voice for emphasis, and monospace reserved strictly for on-chain data. The codebase calls it “affidavit meets terminal.” Color is meaning: crimson is the brand and the seal, sage means attested, amber means in flight — nothing else is chromatic.

apps/web/src/app/globals.csscss
:root{
  --bg:#070708; --panel:#0e0c0e; --text:#f4f2ec;
  --seal:#c5403a;   /* THE accent */
  --sage:#86b894;   /* verified / sworn — ONLY */
  --amber:#d2a24e;  /* filing / pending — ONLY */
  --sans:'Satoshi', system-ui, sans-serif;
  --serif:'Instrument Serif', Georgia, serif;
  --mono:'JetBrains Mono', ui-monospace, monospace;
}

#The verify page

Every call is shareable. The public route /verify/[turnId] re-renders a stored turn with the live memory receipt swapped in by root hash — so a link sent to a teammate or a judge shows the real, up-to-the-second status, not a frozen snapshot. It is read-only: no wallet, nothing to sign.

Honesty invariant
The sample is always marked

For offline demos, the workbench can seed a clearly-marked sample turn so the proof feed is visible before compute is funded. That entry is tagged “Sample · illustrative, not a real receipt” everywhere it renders. Honesty is not only in the backend; it is in every pixel that could be misread.