{/* ── Amount hero ── */}
-
+
a.code === payment.asset.toUpperCase())?.logo}
+ name={assetMetadata.find((a) => a.code === payment.asset.toUpperCase())?.name}
+ />
{payment.amount.toLocaleString(undefined, {
diff --git a/frontend/src/lib/useAssetMetadata.ts b/frontend/src/lib/useAssetMetadata.ts
new file mode 100644
index 0000000..dad6b95
--- /dev/null
+++ b/frontend/src/lib/useAssetMetadata.ts
@@ -0,0 +1,52 @@
+"use client";
+
+import { useEffect, useState } from "react";
+import type { AssetMetadata, AssetMetadataResponse } from "@/app/api/asset-metadata/route";
+
+export type { AssetMetadata };
+
+// Static defaults — logo is null until the route resolves a real URL from stellar.toml.
+const DEFAULT_ASSETS: AssetMetadata[] = [
+ {
+ code: "XLM",
+ issuer: null,
+ name: "Stellar Lumens",
+ logo: null,
+ description: "The native asset of the Stellar network",
+ },
+ {
+ code: "USDC",
+ issuer:
+ process.env.NEXT_PUBLIC_USDC_ISSUER ??
+ "GBBD47IF6LWK7P7MDEVSCWR7DPUWV3NY3DTQEVFL4NAT4AQH3ZLLFLA5",
+ name: "USD Coin",
+ logo: null,
+ description: "USD-backed stablecoin",
+ },
+];
+
+export function useAssetMetadata(): { assets: AssetMetadata[] } {
+ const [assets, setAssets] = useState(DEFAULT_ASSETS);
+
+ useEffect(() => {
+ let cancelled = false;
+
+ fetch("/api/asset-metadata")
+ .then((res) => {
+ if (!res.ok) return;
+ return res.json() as Promise;
+ })
+ .then((data) => {
+ if (!cancelled && data) setAssets(data.assets);
+ })
+ .catch(() => {
+
+ });
+
+ return () => {
+ cancelled = true;
+ };
+ }, []);
+
+ return { assets };
+}
diff --git a/frontend/test-results/.last-run.json b/frontend/test-results/.last-run.json
new file mode 100644
index 0000000..cbcc1fb
--- /dev/null
+++ b/frontend/test-results/.last-run.json
@@ -0,0 +1,4 @@
+{
+ "status": "passed",
+ "failedTests": []
+}
\ No newline at end of file
diff --git a/frontend/tests/e2e/vrt.spec.ts-snapshots/buttons-core-chromium-darwin.png b/frontend/tests/e2e/vrt.spec.ts-snapshots/buttons-core-chromium-darwin.png
new file mode 100644
index 0000000..0985324
Binary files /dev/null and b/frontend/tests/e2e/vrt.spec.ts-snapshots/buttons-core-chromium-darwin.png differ
diff --git a/frontend/tests/e2e/vrt.spec.ts-snapshots/inputs-core-chromium-darwin.png b/frontend/tests/e2e/vrt.spec.ts-snapshots/inputs-core-chromium-darwin.png
new file mode 100644
index 0000000..d18e6f2
Binary files /dev/null and b/frontend/tests/e2e/vrt.spec.ts-snapshots/inputs-core-chromium-darwin.png differ
diff --git a/frontend/tests/e2e/vrt.spec.ts-snapshots/modal-core-chromium-darwin.png b/frontend/tests/e2e/vrt.spec.ts-snapshots/modal-core-chromium-darwin.png
new file mode 100644
index 0000000..52e5d32
Binary files /dev/null and b/frontend/tests/e2e/vrt.spec.ts-snapshots/modal-core-chromium-darwin.png differ