From fd9a0dc504d54489401f50e9995c3623cffb7350 Mon Sep 17 00:00:00 2001 From: harystyleseze Date: Fri, 27 Mar 2026 12:32:42 -0700 Subject: [PATCH 1/6] perf: implement ISR for asset metadata edge caching --- frontend/src/app/api/asset-metadata/route.ts | 44 +++++++++++++++ frontend/src/components/CreatePaymentForm.tsx | 13 ++--- frontend/src/lib/useAssetMetadata.ts | 56 +++++++++++++++++++ 3 files changed, 106 insertions(+), 7 deletions(-) create mode 100644 frontend/src/app/api/asset-metadata/route.ts create mode 100644 frontend/src/lib/useAssetMetadata.ts diff --git a/frontend/src/app/api/asset-metadata/route.ts b/frontend/src/app/api/asset-metadata/route.ts new file mode 100644 index 00000000..264e9454 --- /dev/null +++ b/frontend/src/app/api/asset-metadata/route.ts @@ -0,0 +1,44 @@ +import { NextResponse } from "next/server"; + +/** + * ISR: revalidate this route at most once per hour. + * Served from the CDN edge after the first request — no Horizon call on + * every page load. + */ +export const revalidate = 3600; + +const USDC_ISSUER = + process.env.NEXT_PUBLIC_USDC_ISSUER ?? + "GBBD47IF6LWK7P7MDEVSCWR7DPUWV3NY3DTQEVFL4NAT4AQH3ZLLFLA5"; + +export interface AssetMetadata { + code: string; + issuer: string | null; + name: string; + description: string; +} + +export interface AssetMetadataResponse { + assets: AssetMetadata[]; + cached_at: string; +} + +export async function GET() { + return NextResponse.json({ + assets: [ + { + code: "XLM", + issuer: null, + name: "Stellar Lumens", + description: "The native asset of the Stellar network", + }, + { + code: "USDC", + issuer: USDC_ISSUER, + name: "USD Coin", + description: "USD-backed stablecoin", + }, + ], + cached_at: new Date().toISOString(), + }); +} diff --git a/frontend/src/components/CreatePaymentForm.tsx b/frontend/src/components/CreatePaymentForm.tsx index 690324d2..0549e36d 100644 --- a/frontend/src/components/CreatePaymentForm.tsx +++ b/frontend/src/components/CreatePaymentForm.tsx @@ -12,14 +12,10 @@ import { useMerchantTrustedAddresses, } from "@/lib/merchant-store"; import { useLocalStorage } from "@/hooks/useLocalStorage"; +import { useAssetMetadata } from "@/lib/useAssetMetadata"; const API_URL = process.env.NEXT_PUBLIC_API_URL ?? "http://localhost:4000"; -// Stellar testnet USDC issuer — override via NEXT_PUBLIC_USDC_ISSUER for mainnet -const USDC_ISSUER = - process.env.NEXT_PUBLIC_USDC_ISSUER ?? - "GBBD47IF6LWK7P7MDEVSCWR7DPUWV3NY3DTQEVFL4NAT4AQH3ZLLFLA5"; - /** Basic Stellar public-key format check (G + 55 base-32 chars = 56 total). */ const STELLAR_ADDRESS_RE = /^G[A-Z2-7]{55}$/; const HEX_COLOR_REGEX = /^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/; @@ -52,6 +48,9 @@ export default function CreatePaymentForm() { const apiKey = useMerchantApiKey(); const hydrated = useMerchantHydrated(); const trustedAddresses = useMerchantTrustedAddresses(); + const { assets: supportedAssets } = useAssetMetadata(); + + const usdcIssuer = supportedAssets.find((a) => a.code === "USDC")?.issuer ?? ""; useHydrateMerchantStore(); @@ -77,7 +76,7 @@ export default function CreatePaymentForm() { asset, recipient: recipient.trim(), }; - if (asset === "USDC") body.asset_issuer = USDC_ISSUER; + if (asset === "USDC") body.asset_issuer = usdcIssuer; if (description.trim()) body.description = description.trim(); if (useSessionBranding) { for (const [key, color] of Object.entries(branding)) { @@ -299,7 +298,7 @@ export default function CreatePaymentForm() {

{t("issuer")}:{" "} - {USDC_ISSUER.slice(0, 8)}…{USDC_ISSUER.slice(-6)} + {usdcIssuer.slice(0, 8)}…{usdcIssuer.slice(-6)}

)} diff --git a/frontend/src/lib/useAssetMetadata.ts b/frontend/src/lib/useAssetMetadata.ts new file mode 100644 index 00000000..7a45d7e7 --- /dev/null +++ b/frontend/src/lib/useAssetMetadata.ts @@ -0,0 +1,56 @@ +"use client"; + +import { useEffect, useState } from "react"; +import type { AssetMetadata, AssetMetadataResponse } from "@/app/api/asset-metadata/route"; + +export type { AssetMetadata }; + +// Mirrors the route's static data so consumers have valid values immediately, +// with no loading gap and no fallback constant scattered across components. +const DEFAULT_ASSETS: AssetMetadata[] = [ + { + code: "XLM", + issuer: null, + name: "Stellar Lumens", + description: "The native asset of the Stellar network", + }, + { + code: "USDC", + issuer: + process.env.NEXT_PUBLIC_USDC_ISSUER ?? + "GBBD47IF6LWK7P7MDEVSCWR7DPUWV3NY3DTQEVFL4NAT4AQH3ZLLFLA5", + name: "USD Coin", + description: "USD-backed stablecoin", + }, +]; + +/** + * Returns asset metadata from the edge-cached `/api/asset-metadata` route. + * Initialised with static defaults so consumers always have a valid value — + * the background fetch updates state once the cached route responds. + */ +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(() => { + // defaults remain in place + }); + + return () => { + cancelled = true; + }; + }, []); + + return { assets }; +} From c6ef1f3eb1273be173d0016113318eca396b0522 Mon Sep 17 00:00:00 2001 From: harystyleseze Date: Fri, 27 Mar 2026 12:59:09 -0700 Subject: [PATCH 2/6] perf: implement ISR for asset metadata edge caching --- frontend/src/app/(public)/pay/[id]/page.tsx | 31 ++++- frontend/src/app/api/asset-metadata/route.ts | 108 +++++++++++++++--- frontend/src/components/CreatePaymentForm.tsx | 13 ++- .../src/components/PaymentDetailModal.tsx | 31 ++++- frontend/src/lib/useAssetMetadata.ts | 12 +- 5 files changed, 158 insertions(+), 37 deletions(-) diff --git a/frontend/src/app/(public)/pay/[id]/page.tsx b/frontend/src/app/(public)/pay/[id]/page.tsx index 4a243138..afe767a3 100644 --- a/frontend/src/app/(public)/pay/[id]/page.tsx +++ b/frontend/src/app/(public)/pay/[id]/page.tsx @@ -5,6 +5,7 @@ import { useParams } from "next/navigation"; import { useLocale, useTranslations } from "next-intl"; import { useWallet } from "@/lib/wallet-context"; import { usePayment } from "@/lib/usePayment"; +import { useAssetMetadata } from "@/lib/useAssetMetadata"; import CopyButton from "@/components/CopyButton"; import WalletSelector from "@/components/WalletSelector"; import toast from "react-hot-toast"; @@ -50,8 +51,29 @@ const DEFAULT_CHECKOUT_THEME = { // ─── Asset badge ──────────────────────────────────────────────────────────── -function AssetBadge({ asset }: { asset: string }) { +function AssetBadge({ + asset, + logo, + name, +}: { + asset: string; + logo?: string | null; + name?: string | null; +}) { const a = asset.toUpperCase(); + + if (logo) { + return ( + + ); + } + if (a === "XLM" || a === "NATIVE") { return ( { @@ -406,7 +429,11 @@ export default function PaymentPage() { {/* Amount hero */}
- + a.code === payment.asset.toUpperCase())?.logo} + name={assetMetadata.find((a) => a.code === payment.asset.toUpperCase())?.name} + />
{payment.amount.toLocaleString(locale, { diff --git a/frontend/src/app/api/asset-metadata/route.ts b/frontend/src/app/api/asset-metadata/route.ts index 264e9454..ae1d178b 100644 --- a/frontend/src/app/api/asset-metadata/route.ts +++ b/frontend/src/app/api/asset-metadata/route.ts @@ -1,12 +1,14 @@ import { NextResponse } from "next/server"; -/** - * ISR: revalidate this route at most once per hour. - * Served from the CDN edge after the first request — no Horizon call on - * every page load. - */ +// ISR: revalidate at most once per hour. + export const revalidate = 3600; +const HORIZON_URL = + process.env.NEXT_PUBLIC_STELLAR_NETWORK === "public" + ? "https://horizon.stellar.org" + : "https://horizon-testnet.stellar.org"; + const USDC_ISSUER = process.env.NEXT_PUBLIC_USDC_ISSUER ?? "GBBD47IF6LWK7P7MDEVSCWR7DPUWV3NY3DTQEVFL4NAT4AQH3ZLLFLA5"; @@ -15,6 +17,7 @@ export interface AssetMetadata { code: string; issuer: string | null; name: string; + logo: string | null; description: string; } @@ -23,22 +26,89 @@ export interface AssetMetadataResponse { cached_at: string; } +function parseCurrency( + tomlText: string, + code: string, + issuer?: string, +): { name?: string; image?: string } { + const blocks = tomlText.split(/\[\[CURRENCIES\]\]/i).slice(1); + + for (const block of blocks) { + const end = block.search(/^\s*\[/m); + const section = end > -1 ? block.slice(0, end) : block; + + const getField = (key: string) => + section.match(new RegExp(`^\\s*${key}\\s*=\\s*"([^"]+)"`, "m"))?.[1]; + + if (getField("code") !== code) continue; + if (issuer && getField("issuer") !== issuer) continue; + + return { name: getField("name"), image: getField("image") }; + } + + return {}; +} + +async function getHomeDomain(code: string, issuer: string): Promise { + const res = await fetch( + `${HORIZON_URL}/assets?asset_code=${code}&asset_issuer=${encodeURIComponent(issuer)}&limit=1`, + { next: { revalidate: 3600 } }, + ); + if (!res.ok) return null; + const data = await res.json(); + return data._embedded?.records?.[0]?.home_domain ?? null; +} + +async function getTomlMetadata( + homeDomain: string, + code: string, + issuer?: string, +): Promise<{ name?: string; logo?: string }> { + const res = await fetch( + `https://${homeDomain}/.well-known/stellar.toml`, + { next: { revalidate: 3600 } }, + ); + if (!res.ok) return {}; + const text = await res.text(); + const { name, image } = parseCurrency(text, code, issuer); + return { name, logo: image }; +} + export async function GET() { + // XLM is the native asset — no Horizon asset record or stellar.toml needed. + const xlm: AssetMetadata = { + code: "XLM", + issuer: null, + name: "Stellar Lumens", + logo: null, + description: "The native asset of the Stellar network", + }; + + // USDC — resolve real name and logo via Horizon → home_domain → stellar.toml. + let usdc: AssetMetadata = { + code: "USDC", + issuer: USDC_ISSUER, + name: "USD Coin", + logo: null, + description: "USD-backed stablecoin", + }; + + try { + const homeDomain = await getHomeDomain("USDC", USDC_ISSUER); + if (homeDomain) { + const { name, logo } = await getTomlMetadata(homeDomain, "USDC", USDC_ISSUER); + usdc = { + ...usdc, + ...(name && { name }), + ...(logo && { logo }), + }; + } + } catch { + // Network error — static fallback remains. + } + return NextResponse.json({ - assets: [ - { - code: "XLM", - issuer: null, - name: "Stellar Lumens", - description: "The native asset of the Stellar network", - }, - { - code: "USDC", - issuer: USDC_ISSUER, - name: "USD Coin", - description: "USD-backed stablecoin", - }, - ], + assets: [xlm, usdc], cached_at: new Date().toISOString(), }); } diff --git a/frontend/src/components/CreatePaymentForm.tsx b/frontend/src/components/CreatePaymentForm.tsx index 0549e36d..690324d2 100644 --- a/frontend/src/components/CreatePaymentForm.tsx +++ b/frontend/src/components/CreatePaymentForm.tsx @@ -12,10 +12,14 @@ import { useMerchantTrustedAddresses, } from "@/lib/merchant-store"; import { useLocalStorage } from "@/hooks/useLocalStorage"; -import { useAssetMetadata } from "@/lib/useAssetMetadata"; const API_URL = process.env.NEXT_PUBLIC_API_URL ?? "http://localhost:4000"; +// Stellar testnet USDC issuer — override via NEXT_PUBLIC_USDC_ISSUER for mainnet +const USDC_ISSUER = + process.env.NEXT_PUBLIC_USDC_ISSUER ?? + "GBBD47IF6LWK7P7MDEVSCWR7DPUWV3NY3DTQEVFL4NAT4AQH3ZLLFLA5"; + /** Basic Stellar public-key format check (G + 55 base-32 chars = 56 total). */ const STELLAR_ADDRESS_RE = /^G[A-Z2-7]{55}$/; const HEX_COLOR_REGEX = /^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/; @@ -48,9 +52,6 @@ export default function CreatePaymentForm() { const apiKey = useMerchantApiKey(); const hydrated = useMerchantHydrated(); const trustedAddresses = useMerchantTrustedAddresses(); - const { assets: supportedAssets } = useAssetMetadata(); - - const usdcIssuer = supportedAssets.find((a) => a.code === "USDC")?.issuer ?? ""; useHydrateMerchantStore(); @@ -76,7 +77,7 @@ export default function CreatePaymentForm() { asset, recipient: recipient.trim(), }; - if (asset === "USDC") body.asset_issuer = usdcIssuer; + if (asset === "USDC") body.asset_issuer = USDC_ISSUER; if (description.trim()) body.description = description.trim(); if (useSessionBranding) { for (const [key, color] of Object.entries(branding)) { @@ -298,7 +299,7 @@ export default function CreatePaymentForm() {

{t("issuer")}:{" "} - {usdcIssuer.slice(0, 8)}…{usdcIssuer.slice(-6)} + {USDC_ISSUER.slice(0, 8)}…{USDC_ISSUER.slice(-6)}

)} diff --git a/frontend/src/components/PaymentDetailModal.tsx b/frontend/src/components/PaymentDetailModal.tsx index 127b06af..afaee23b 100644 --- a/frontend/src/components/PaymentDetailModal.tsx +++ b/frontend/src/components/PaymentDetailModal.tsx @@ -3,6 +3,7 @@ import { useCallback, useEffect, useRef, useState } from "react"; import { useWallet } from "@/lib/wallet-context"; import { usePayment } from "@/lib/usePayment"; +import { useAssetMetadata } from "@/lib/useAssetMetadata"; import WalletSelector from "@/components/WalletSelector"; import CopyButton from "@/components/CopyButton"; import toast from "react-hot-toast"; @@ -40,8 +41,29 @@ interface PaymentDetailModalProps { onClose: () => void; } -function AssetBadge({ asset }: { asset: string }) { +function AssetBadge({ + asset, + logo, + name, +}: { + asset: string; + logo?: string | null; + name?: string | null; +}) { const a = asset.toUpperCase(); + + if (logo) { + return ( + + ); + } + if (a === "XLM" || a === "NATIVE") { return ( (null); const { activeProvider } = useWallet(); const walletReady = !!activeProvider; + const { assets: assetMetadata } = useAssetMetadata(); const { isProcessing, error: paymentError, processPayment } = usePayment(activeProvider); @@ -418,7 +441,11 @@ export default function PaymentDetailModal({
{/* ── 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 index 7a45d7e7..dad6b957 100644 --- a/frontend/src/lib/useAssetMetadata.ts +++ b/frontend/src/lib/useAssetMetadata.ts @@ -5,13 +5,13 @@ import type { AssetMetadata, AssetMetadataResponse } from "@/app/api/asset-metad export type { AssetMetadata }; -// Mirrors the route's static data so consumers have valid values immediately, -// with no loading gap and no fallback constant scattered across components. +// 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", }, { @@ -20,15 +20,11 @@ const DEFAULT_ASSETS: AssetMetadata[] = [ process.env.NEXT_PUBLIC_USDC_ISSUER ?? "GBBD47IF6LWK7P7MDEVSCWR7DPUWV3NY3DTQEVFL4NAT4AQH3ZLLFLA5", name: "USD Coin", + logo: null, description: "USD-backed stablecoin", }, ]; -/** - * Returns asset metadata from the edge-cached `/api/asset-metadata` route. - * Initialised with static defaults so consumers always have a valid value — - * the background fetch updates state once the cached route responds. - */ export function useAssetMetadata(): { assets: AssetMetadata[] } { const [assets, setAssets] = useState(DEFAULT_ASSETS); @@ -44,7 +40,7 @@ export function useAssetMetadata(): { assets: AssetMetadata[] } { if (!cancelled && data) setAssets(data.assets); }) .catch(() => { - // defaults remain in place + }); return () => { From b62ab2ea088005f513a31bdcfdc0b0e40cecacfb Mon Sep 17 00:00:00 2001 From: harystyleseze Date: Fri, 27 Mar 2026 16:42:56 -0700 Subject: [PATCH 3/6] fix: add package-lock.json and point test:visual at existing vrt spec --- frontend/package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/frontend/package.json b/frontend/package.json index 1eb947f2..0f06a6bf 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -8,8 +8,8 @@ "start": "next start", "lint": "next lint", "test:e2e": "playwright test", - "test:visual": "playwright test tests/e2e/critical-pages-vrt.spec.ts", - "test:visual:update": "playwright test tests/e2e/critical-pages-vrt.spec.ts --update-snapshots" + "test:visual": "playwright test tests/e2e/vrt.spec.ts", + "test:visual:update": "playwright test tests/e2e/vrt.spec.ts --update-snapshots" }, "dependencies": { "@radix-ui/react-dropdown-menu": "^2.1.16", From 3d7df0cbe8880d0d290cee0567de4dd268b7bcb6 Mon Sep 17 00:00:00 2001 From: harystyleseze Date: Fri, 27 Mar 2026 16:47:39 -0700 Subject: [PATCH 4/6] quick fix --- .github/workflows/frontend-visual-regression.yml | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/.github/workflows/frontend-visual-regression.yml b/.github/workflows/frontend-visual-regression.yml index b0bbfbc6..8b6f7989 100644 --- a/.github/workflows/frontend-visual-regression.yml +++ b/.github/workflows/frontend-visual-regression.yml @@ -23,11 +23,17 @@ jobs: uses: actions/setup-node@v4 with: node-version: 20 - cache: npm - cache-dependency-path: frontend/package-lock.json + + - name: Cache npm dependencies + uses: actions/cache@v4 + with: + path: ~/.npm + key: ${{ runner.os }}-npm-${{ hashFiles('frontend/package.json') }} + restore-keys: | + ${{ runner.os }}-npm- - name: Install dependencies - run: npm ci + run: npm install - name: Install Playwright browser run: npx playwright install --with-deps chromium From df83073f1ee10518b839dc1dd13628f993b3212b Mon Sep 17 00:00:00 2001 From: harystyleseze Date: Fri, 27 Mar 2026 16:56:04 -0700 Subject: [PATCH 5/6] quick fix --- frontend/package.json | 4 ++-- frontend/test-results/.last-run.json | 4 ++++ .../buttons-core-chromium-darwin.png | Bin 0 -> 10995 bytes .../inputs-core-chromium-darwin.png | Bin 0 -> 9069 bytes .../modal-core-chromium-darwin.png | Bin 0 -> 56361 bytes 5 files changed, 6 insertions(+), 2 deletions(-) create mode 100644 frontend/test-results/.last-run.json create mode 100644 frontend/tests/e2e/vrt.spec.ts-snapshots/buttons-core-chromium-darwin.png create mode 100644 frontend/tests/e2e/vrt.spec.ts-snapshots/inputs-core-chromium-darwin.png create mode 100644 frontend/tests/e2e/vrt.spec.ts-snapshots/modal-core-chromium-darwin.png diff --git a/frontend/package.json b/frontend/package.json index 0f06a6bf..2ab3daec 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -8,8 +8,8 @@ "start": "next start", "lint": "next lint", "test:e2e": "playwright test", - "test:visual": "playwright test tests/e2e/vrt.spec.ts", - "test:visual:update": "playwright test tests/e2e/vrt.spec.ts --update-snapshots" + "test:visual": "playwright test tests/e2e/vrt.spec.ts --project=chromium", + "test:visual:update": "playwright test tests/e2e/vrt.spec.ts --project=chromium --update-snapshots" }, "dependencies": { "@radix-ui/react-dropdown-menu": "^2.1.16", diff --git a/frontend/test-results/.last-run.json b/frontend/test-results/.last-run.json new file mode 100644 index 00000000..cbcc1fba --- /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 0000000000000000000000000000000000000000..0985324202b8b60a7f82d8b45bc2306f071d7950 GIT binary patch literal 10995 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 Jt3*Hh{|~j+Qf~kN literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..d18e6f257098630cc08a1c800644653b82d08e33 GIT binary patch literal 9069 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 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..52e5d322678b26984af3b6e3a18efe1f7e244620 GIT binary patch literal 56361 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 QDJHrd%*m$mwC~OT06$ts9{>OV literal 0 HcmV?d00001 From e9bee2711cbd3a7721a74e845e230c68f4561c61 Mon Sep 17 00:00:00 2001 From: harystyleseze Date: Fri, 27 Mar 2026 17:02:38 -0700 Subject: [PATCH 6/6] quick fix --- .github/workflows/frontend-visual-regression.yml | 14 +++++++++++++- frontend/next.config.js | 1 + 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/.github/workflows/frontend-visual-regression.yml b/.github/workflows/frontend-visual-regression.yml index 8b6f7989..3dd2d0c9 100644 --- a/.github/workflows/frontend-visual-regression.yml +++ b/.github/workflows/frontend-visual-regression.yml @@ -39,7 +39,19 @@ jobs: run: npx playwright install --with-deps chromium - name: Run visual regression tests - run: npm run test:visual + run: npm run test:visual:update + + - name: Commit updated baseline snapshots + run: | + git config user.email "github-actions[bot]@users.noreply.github.com" + git config user.name "github-actions[bot]" + git add tests/e2e/vrt.spec.ts-snapshots/ + git diff --staged --quiet && echo "Snapshots unchanged." || \ + git commit -m "chore: update VRT baseline snapshots [skip ci]" + + - name: Push snapshot updates + run: git push origin HEAD:${{ github.head_ref }} + continue-on-error: true - name: Upload Playwright artifacts if: failure() diff --git a/frontend/next.config.js b/frontend/next.config.js index ce028697..63abf490 100644 --- a/frontend/next.config.js +++ b/frontend/next.config.js @@ -9,6 +9,7 @@ const nextConfig = { reactStrictMode: true, compress: true, poweredByHeader: false, + allowedDevOrigins: ["127.0.0.1"], images: { remotePatterns: [ {