// docs

Read the spec.Build on it.

status definitions

ORIGINAL

The one coin a creator claimed for a source on Origin. Earliest public mint wins. Later coins for the same source are vamps.

VAMP

A copycat for an already-claimed source. Tagged on Origin — not blocked on other launchpads.

UNKNOWN

A source or coin not yet claimed or indexed on Origin.

Data model

Every claim resolves to an OriginalCoin with id (CA), name, ticker, image, description, source (the claimed tweet/link), marketCap, mintTime, creatorWallet, launchedAt (claimed on Origin), and vampsFlagged. One source → one original, proven by a signed creator-wallet message.

Plugging in a real indexer

The mock lives in src/lib/og-data.ts. Replace getCoin(), claimSource(), verifySignature(), and the ORIGNALS / RECENTLY_CLAIMED / VAMPS_FLAGGED_TOTAL exports with server functions (createServerFn) backed by your indexer + claim contract. The ClaimResult, ProveResult, and OriginalCoin shapes are the contract — keep them and the UI keeps working.

Vamp flagging

When a source is claimed, the registry records the original. Any later claim for the same source is evaluated against the earliest mint time and tagged VAMP. The Vamps flagged counter sums tagged copycats across all narratives — a live-looking mock until a real contract reports it.

Badge & API

Look up any coin by contract address. The response tells you whether it's the original, a vamp, or unclaimed — with the original CA, source, and claim time.

request

GET /api/v1/coin/{CA}

response

{
  "status": "original" | "vamp" | "unclaimed",
  "original": "<CA>",
  "source": "<url>",
  "claimedAt": "<iso>"
}

embeddable badge

<img
  src="https://origin.app/badge/<CA>.svg"
  alt="Origin status"
  width="120"
  height="32"
/>

honest limits

Origin tags originals and vamps — it cannot block coins on other launchpads. Claims depend on the creator wallet and public mint time, and disputes are possible within 24h.

$ORIGIN CACtTgzAMnsUwxqAHw1oC5J3Tx2FyBBMbZSHPNA72spump