Skip to content

Commit f4c6411

Browse files
TokenBriceclaude
andcommitted
feat(detail): add protocol fork tags to hero section
Adds tags[] field to StablecoinMeta and renders badges below the classification line on detail pages. Tagged coins: - satUSD (218), meUSD (303), BtcUSD (183), USBD (253): Liquity v1 fork - feUSD (251): Liquity v2 fork Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent 5f52cff commit f4c6411

File tree

3 files changed

+17
-1
lines changed

3 files changed

+17
-1
lines changed

src/app/stablecoin/[id]/client.tsx

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -222,6 +222,15 @@ export default function StablecoinDetailClient({ id, summary, coin, logoSrc }: S
222222
{" \u00b7 "}
223223
{PEG_LABELS_SHORT[coin.flags.pegCurrency] ?? coin.flags.pegCurrency}
224224
</p>
225+
{coin.tags && coin.tags.length > 0 && (
226+
<div className="flex flex-wrap gap-1.5">
227+
{coin.tags.map((tag) => (
228+
<span key={tag} className="inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-medium text-muted-foreground border-border/60 bg-muted/40">
229+
{tag}
230+
</span>
231+
))}
232+
</div>
233+
)}
225234
</div>
226235

227236
{/* Price + Gauge */}

src/lib/stablecoins.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,11 @@ interface StablecoinOpts {
2323
custodyModel?: import("./types").CustodyModel;
2424
reserves?: import("./types").ReserveSlice[];
2525
notices?: import("./types").CoinNotice[];
26+
tags?: string[];
2627
}
2728

2829
function coin(id: string, name: string, symbol: string, backing: StablecoinMeta["flags"]["backing"], governance: StablecoinMeta["flags"]["governance"], pegCurrency: StablecoinMeta["flags"]["pegCurrency"], opts?: StablecoinOpts): StablecoinMeta {
29-
return { id, name, symbol, flags: { backing, pegCurrency, governance, yieldBearing: opts?.yieldBearing ?? false, rwa: opts?.rwa ?? false, navToken: opts?.navToken ?? false }, collateral: opts?.collateral, pegMechanism: opts?.pegMechanism, commodityOunces: opts?.commodityOunces, geckoId: opts?.geckoId, cmcSlug: opts?.cmcSlug, protocolSlug: opts?.protocolSlug, proofOfReserves: opts?.proofOfReserves, links: opts?.links, jurisdiction: opts?.jurisdiction, contracts: opts?.contracts, supplyMethod: opts?.supplyMethod, dependencies: opts?.dependencies, canBeBlacklisted: opts?.canBeBlacklisted, chainRisk: opts?.chainRisk, collateralQuality: opts?.collateralQuality, custodyModel: opts?.custodyModel, reserves: opts?.reserves, notices: opts?.notices };
30+
return { id, name, symbol, flags: { backing, pegCurrency, governance, yieldBearing: opts?.yieldBearing ?? false, rwa: opts?.rwa ?? false, navToken: opts?.navToken ?? false }, collateral: opts?.collateral, pegMechanism: opts?.pegMechanism, commodityOunces: opts?.commodityOunces, geckoId: opts?.geckoId, cmcSlug: opts?.cmcSlug, protocolSlug: opts?.protocolSlug, proofOfReserves: opts?.proofOfReserves, links: opts?.links, jurisdiction: opts?.jurisdiction, contracts: opts?.contracts, supplyMethod: opts?.supplyMethod, dependencies: opts?.dependencies, canBeBlacklisted: opts?.canBeBlacklisted, chainRisk: opts?.chainRisk, collateralQuality: opts?.collateralQuality, custodyModel: opts?.custodyModel, reserves: opts?.reserves, notices: opts?.notices, tags: opts?.tags };
3031
}
3132
const usd = (id: string, name: string, symbol: string, backing: StablecoinMeta["flags"]["backing"], governance: StablecoinMeta["flags"]["governance"], opts?: StablecoinOpts) => coin(id, name, symbol, backing, governance, "USD", opts);
3233
const eur = (id: string, name: string, symbol: string, backing: StablecoinMeta["flags"]["backing"], governance: StablecoinMeta["flags"]["governance"], opts?: StablecoinOpts) => coin(id, name, symbol, backing, governance, "EUR", opts);
@@ -941,6 +942,7 @@ export const TRACKED_STABLECOINS: StablecoinMeta[] = [
941942
}),
942943
usd("218", "River Stablecoin", "satUSD", "crypto-backed", "decentralized", {
943944
geckoId: "satoshi-stablecoin",
945+
tags: ["Liquity v1 fork"],
944946
dependencies: [],
945947
collateralQuality: "alt-lst-bridged-or-mixed",
946948
collateral: "BTC, ETH, BNB, and liquid staking tokens; no centralized stablecoin collateral accepted",
@@ -1986,6 +1988,7 @@ export const TRACKED_STABLECOINS: StablecoinMeta[] = [
19861988
}),
19871989
usd("303", "Mezo USD", "meUSD", "crypto-backed", "decentralized", {
19881990
geckoId: "mezo-usd",
1991+
tags: ["Liquity v1 fork"],
19891992
dependencies: [],
19901993
collateral: "Bitcoin only; minimum 110% collateral ratio",
19911994
pegMechanism: "BTC-only overcollateralized CDP with direct $1 BTC redemption; operates on Mezo (Bitcoin L2, not Ethereum or a Stage 1 L2)",
@@ -2215,6 +2218,7 @@ export const TRACKED_STABLECOINS: StablecoinMeta[] = [
22152218
}),
22162219
usd("251", "Felix feUSD", "FEUSD", "crypto-backed", "decentralized", {
22172220
geckoId: "felix-feusd",
2221+
tags: ["Liquity v2 fork"],
22182222
dependencies: [],
22192223
collateral: "HYPE, kHYPE, wstHYPE, UBTC (feUBTC), ETH, and SOL via overcollateralized CDPs on Hyperliquid (Liquity V2 fork)",
22202224
pegMechanism: "Overcollateralized CDP (Liquity V2 fork) with direct redemption for $1 of collateral; interest-rate-sorted redemption queue (lower-rate positions redeemed first); stability pools absorb liquidations",
@@ -2460,6 +2464,7 @@ export const TRACKED_STABLECOINS: StablecoinMeta[] = [
24602464
}),
24612465
usd("183", "Bitcoin USD", "BtcUSD", "crypto-backed", "decentralized", {
24622466
geckoId: "bitcoin-usd-btcfi",
2467+
tags: ["Liquity v1 fork"],
24632468
dependencies: [],
24642469
collateral: "Overcollateralized Bitcoin (WBTC, BTCB, cbBTC, native BTC) via CDP vaults",
24652470
pegMechanism: "Overcollateralized CDP with liquidation mechanisms",
@@ -2478,6 +2483,7 @@ export const TRACKED_STABLECOINS: StablecoinMeta[] = [
24782483
}),
24792484
usd("253", "Bima USBD", "USBD", "crypto-backed", "centralized-dependent", {
24802485
geckoId: "usbd",
2486+
tags: ["Liquity v1 fork"],
24812487
dependencies: [],
24822488
collateral: "Overcollateralized Bitcoin LSTs/LRTs via CDP vaults at 150% MCR (160% CCR triggers recovery mode)",
24832489
pegMechanism: "Overcollateralized CDP (Liquity-style TroveManager) with automated liquidation",

src/lib/types.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,7 @@ export interface StablecoinMeta {
118118
custodyModel?: CustodyModel;
119119
reserves?: ReserveSlice[]; // Structured reserve composition (manually curated)
120120
notices?: CoinNotice[]; // Important alerts (winding down, depegged, etc.)
121+
tags?: string[]; // Protocol lineage / fork tags (e.g. "Liquity v1 fork")
121122
}
122123

123124
// --- Filter tags (used in the UI to filter the table) ---

0 commit comments

Comments
 (0)