From eed083858cee663b0b26e8d08e209409558705f9 Mon Sep 17 00:00:00 2001 From: gregfromstl Date: Wed, 23 Jul 2025 15:41:35 -0700 Subject: [PATCH 1/3] refactor: move /universal-bridge to /payments --- apps/dashboard/redirects.js | 25 +++++++++++++++---- .../components/PayAnalytics.tsx | 0 .../components/PayAnalyticsFilter.tsx | 0 .../components/PayCustomersTable.tsx | 0 .../components/PayEmbedFTUX.tsx | 0 .../components/PayNewCustomers.tsx | 0 .../components/PaymentHistory.tsx | 0 .../components/PaymentsSuccessRate.tsx | 0 .../components/Payouts.tsx | 0 .../components/TotalPayVolume.tsx | 0 .../components/TotalVolumePieChart.tsx | 0 .../components/code-examples.tsx | 0 .../components/common.tsx | 0 .../components/time.ts | 0 .../{universal-bridge => payments}/layout.tsx | 0 .../{universal-bridge => payments}/page.tsx | 0 .../settings/PayConfig.tsx | 0 .../settings/RouteDiscovery.tsx | 0 .../settings/page.tsx | 0 .../webhooks/components/webhooks.client.tsx | 0 .../webhooks/loading.tsx | 0 .../webhooks/page.tsx | 0 22 files changed, 20 insertions(+), 5 deletions(-) rename apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/{universal-bridge => payments}/components/PayAnalytics.tsx (100%) rename apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/{universal-bridge => payments}/components/PayAnalyticsFilter.tsx (100%) rename apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/{universal-bridge => payments}/components/PayCustomersTable.tsx (100%) rename apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/{universal-bridge => payments}/components/PayEmbedFTUX.tsx (100%) rename apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/{universal-bridge => payments}/components/PayNewCustomers.tsx (100%) rename apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/{universal-bridge => payments}/components/PaymentHistory.tsx (100%) rename apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/{universal-bridge => payments}/components/PaymentsSuccessRate.tsx (100%) rename apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/{universal-bridge => payments}/components/Payouts.tsx (100%) rename apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/{universal-bridge => payments}/components/TotalPayVolume.tsx (100%) rename apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/{universal-bridge => payments}/components/TotalVolumePieChart.tsx (100%) rename apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/{universal-bridge => payments}/components/code-examples.tsx (100%) rename apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/{universal-bridge => payments}/components/common.tsx (100%) rename apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/{universal-bridge => payments}/components/time.ts (100%) rename apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/{universal-bridge => payments}/layout.tsx (100%) rename apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/{universal-bridge => payments}/page.tsx (100%) rename apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/{universal-bridge => payments}/settings/PayConfig.tsx (100%) rename apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/{universal-bridge => payments}/settings/RouteDiscovery.tsx (100%) rename apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/{universal-bridge => payments}/settings/page.tsx (100%) rename apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/{universal-bridge => payments}/webhooks/components/webhooks.client.tsx (100%) rename apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/{universal-bridge => payments}/webhooks/loading.tsx (100%) rename apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/{universal-bridge => payments}/webhooks/page.tsx (100%) diff --git a/apps/dashboard/redirects.js b/apps/dashboard/redirects.js index 6acffb4a2f9..6ca2d1738ce 100644 --- a/apps/dashboard/redirects.js +++ b/apps/dashboard/redirects.js @@ -66,15 +66,20 @@ const projectRoute = "/team/:team_slug/:project_slug"; const projectPageRedirects = [ { - destination: `${projectRoute}/universal-bridge/:path*`, + destination: `${projectRoute}/payments/:path*`, permanent: false, source: `${projectRoute}/connect/pay/:path*`, }, { - destination: `${projectRoute}/universal-bridge/:path*`, + destination: `${projectRoute}/payments/:path*`, permanent: false, source: `${projectRoute}/connect/universal-bridge/:path*`, }, + { + destination: `${projectRoute}/payments/:path*`, + permanent: false, + source: `${projectRoute}/universal-bridge/:path*`, + }, { destination: `${projectRoute}/account-abstraction/:path*`, permanent: false, @@ -375,12 +380,22 @@ async function redirects() { permanent: false, source: "/template/:slug", }, - // redirect /connect/pay to /universal-bridge + // redirect /connect/pay to /payments { - destination: "/universal-bridge", - permanent: false, + destination: "/payments", + permanent: true, source: "/connect/pay", }, + { + destination: "/payments", + permanent: true, + source: "/universal-bridge", + }, + { + destination: "/payments/:slug", + permanent: true, + source: "/universal-bridge/:slug", + }, // PREVIOUS CAMPAIGNS { destination: "/", diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/universal-bridge/components/PayAnalytics.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/payments/components/PayAnalytics.tsx similarity index 100% rename from apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/universal-bridge/components/PayAnalytics.tsx rename to apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/payments/components/PayAnalytics.tsx diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/universal-bridge/components/PayAnalyticsFilter.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/payments/components/PayAnalyticsFilter.tsx similarity index 100% rename from apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/universal-bridge/components/PayAnalyticsFilter.tsx rename to apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/payments/components/PayAnalyticsFilter.tsx diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/universal-bridge/components/PayCustomersTable.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/payments/components/PayCustomersTable.tsx similarity index 100% rename from apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/universal-bridge/components/PayCustomersTable.tsx rename to apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/payments/components/PayCustomersTable.tsx diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/universal-bridge/components/PayEmbedFTUX.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/payments/components/PayEmbedFTUX.tsx similarity index 100% rename from apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/universal-bridge/components/PayEmbedFTUX.tsx rename to apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/payments/components/PayEmbedFTUX.tsx diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/universal-bridge/components/PayNewCustomers.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/payments/components/PayNewCustomers.tsx similarity index 100% rename from apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/universal-bridge/components/PayNewCustomers.tsx rename to apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/payments/components/PayNewCustomers.tsx diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/universal-bridge/components/PaymentHistory.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/payments/components/PaymentHistory.tsx similarity index 100% rename from apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/universal-bridge/components/PaymentHistory.tsx rename to apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/payments/components/PaymentHistory.tsx diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/universal-bridge/components/PaymentsSuccessRate.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/payments/components/PaymentsSuccessRate.tsx similarity index 100% rename from apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/universal-bridge/components/PaymentsSuccessRate.tsx rename to apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/payments/components/PaymentsSuccessRate.tsx diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/universal-bridge/components/Payouts.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/payments/components/Payouts.tsx similarity index 100% rename from apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/universal-bridge/components/Payouts.tsx rename to apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/payments/components/Payouts.tsx diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/universal-bridge/components/TotalPayVolume.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/payments/components/TotalPayVolume.tsx similarity index 100% rename from apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/universal-bridge/components/TotalPayVolume.tsx rename to apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/payments/components/TotalPayVolume.tsx diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/universal-bridge/components/TotalVolumePieChart.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/payments/components/TotalVolumePieChart.tsx similarity index 100% rename from apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/universal-bridge/components/TotalVolumePieChart.tsx rename to apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/payments/components/TotalVolumePieChart.tsx diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/universal-bridge/components/code-examples.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/payments/components/code-examples.tsx similarity index 100% rename from apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/universal-bridge/components/code-examples.tsx rename to apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/payments/components/code-examples.tsx diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/universal-bridge/components/common.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/payments/components/common.tsx similarity index 100% rename from apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/universal-bridge/components/common.tsx rename to apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/payments/components/common.tsx diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/universal-bridge/components/time.ts b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/payments/components/time.ts similarity index 100% rename from apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/universal-bridge/components/time.ts rename to apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/payments/components/time.ts diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/universal-bridge/layout.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/payments/layout.tsx similarity index 100% rename from apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/universal-bridge/layout.tsx rename to apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/payments/layout.tsx diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/universal-bridge/page.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/payments/page.tsx similarity index 100% rename from apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/universal-bridge/page.tsx rename to apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/payments/page.tsx diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/universal-bridge/settings/PayConfig.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/payments/settings/PayConfig.tsx similarity index 100% rename from apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/universal-bridge/settings/PayConfig.tsx rename to apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/payments/settings/PayConfig.tsx diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/universal-bridge/settings/RouteDiscovery.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/payments/settings/RouteDiscovery.tsx similarity index 100% rename from apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/universal-bridge/settings/RouteDiscovery.tsx rename to apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/payments/settings/RouteDiscovery.tsx diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/universal-bridge/settings/page.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/payments/settings/page.tsx similarity index 100% rename from apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/universal-bridge/settings/page.tsx rename to apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/payments/settings/page.tsx diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/universal-bridge/webhooks/components/webhooks.client.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/payments/webhooks/components/webhooks.client.tsx similarity index 100% rename from apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/universal-bridge/webhooks/components/webhooks.client.tsx rename to apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/payments/webhooks/components/webhooks.client.tsx diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/universal-bridge/webhooks/loading.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/payments/webhooks/loading.tsx similarity index 100% rename from apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/universal-bridge/webhooks/loading.tsx rename to apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/payments/webhooks/loading.tsx diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/universal-bridge/webhooks/page.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/payments/webhooks/page.tsx similarity index 100% rename from apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/universal-bridge/webhooks/page.tsx rename to apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/payments/webhooks/page.tsx From 036409c4309b9c3f4d08692f6218ca2958082255 Mon Sep 17 00:00:00 2001 From: gregfromstl Date: Wed, 23 Jul 2025 16:50:39 -0700 Subject: [PATCH 2/3] feat: payments overview page --- .../(sidebar)/payments/analytics/page.tsx | 85 +++++++++++++ .../{PayEmbedFTUX.tsx => BuyWidgetFTUX.tsx} | 6 +- .../payments/components/PayAnalytics.tsx | 4 +- .../(sidebar)/payments/layout.tsx | 11 +- .../(sidebar)/payments/page.tsx | 119 ++++++++++++++---- 5 files changed, 193 insertions(+), 32 deletions(-) create mode 100644 apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/payments/analytics/page.tsx rename apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/payments/components/{PayEmbedFTUX.tsx => BuyWidgetFTUX.tsx} (92%) diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/payments/analytics/page.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/payments/analytics/page.tsx new file mode 100644 index 00000000000..b2eb6a87695 --- /dev/null +++ b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/payments/analytics/page.tsx @@ -0,0 +1,85 @@ +import { ArrowUpRightIcon } from "lucide-react"; +import { redirect } from "next/navigation"; +import { ResponsiveSearchParamsProvider } from "responsive-rsc"; +import { getAuthToken } from "@/api/auth-token"; +import { getProject } from "@/api/projects"; +import { getClientThirdwebClient } from "@/constants/thirdweb-client.client"; +import { loginRedirect } from "@/utils/redirects"; +import { PayAnalytics } from "../components/PayAnalytics"; +import { getUniversalBridgeFiltersFromSearchParams } from "../components/time"; + +export default async function Page(props: { + params: Promise<{ + team_slug: string; + project_slug: string; + }>; + searchParams: Promise<{ + from?: string | undefined | string[]; + to?: string | undefined | string[]; + interval?: string | undefined | string[]; + }>; +}) { + const [params, authToken] = await Promise.all([props.params, getAuthToken()]); + + const project = await getProject(params.team_slug, params.project_slug); + + if (!authToken) { + loginRedirect( + `/team/${params.team_slug}/${params.project_slug}/universal-bridge`, + ); + } + + if (!project) { + redirect(`/team/${params.team_slug}`); + } + + const searchParams = await props.searchParams; + const { range, interval } = getUniversalBridgeFiltersFromSearchParams({ + defaultRange: "last-30", + from: searchParams.from, + interval: searchParams.interval, + to: searchParams.to, + }); + + const client = getClientThirdwebClient({ + jwt: authToken, + teamId: project.teamId, + }); + + return ( + +
+ + +
+
+
+
+
+

Get Started with Payments

+

+ Simple, instant, and secure payments across any token and chain. +

+
+ + Learn More + + +
+
+
+ + ); +} diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/payments/components/PayEmbedFTUX.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/payments/components/BuyWidgetFTUX.tsx similarity index 92% rename from apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/payments/components/PayEmbedFTUX.tsx rename to apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/payments/components/BuyWidgetFTUX.tsx index 7f199bb6df7..b911530dd9a 100644 --- a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/payments/components/PayEmbedFTUX.tsx +++ b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/payments/components/BuyWidgetFTUX.tsx @@ -8,7 +8,7 @@ import { TabButtons } from "@/components/ui/tabs"; type Tab = "embed" | "sdk" | "api"; -export function PayEmbedFTUX(props: { +export function BuyWidgetFTUX(props: { clientId: string; codeExamples: { embed: React.ReactNode; @@ -21,7 +21,7 @@ export function PayEmbedFTUX(props: {

- Start Monetizing Your App + Setup Payments to View Analytics

@@ -56,7 +56,7 @@ export function PayEmbedFTUX(props: { + + ); +} From 7cf245a72e2bb01a25f58e9f494f06396ea2f13a Mon Sep 17 00:00:00 2001 From: gregfromstl Date: Wed, 23 Jul 2025 17:00:31 -0700 Subject: [PATCH 3/3] fixup! refactor: move /universal-bridge to /payments --- apps/dashboard/src/@/analytics/report.ts | 15 ++++++++ .../components/ProjectFTUX/ProjectFTUX.tsx | 2 +- .../components/ProjectSidebarLayout.tsx | 2 +- .../insight/components/TopChainsTable.tsx | 2 +- .../insight/components/TopEndpointsTable.tsx | 2 +- .../[project_slug]/(sidebar)/page.tsx | 2 +- .../(sidebar)/payments/analytics/page.tsx | 4 +- .../components/FeatureCard.client.tsx | 37 ++++++++++++++++++ .../(sidebar)/payments/page.tsx | 38 ++++--------------- .../(sidebar)/payments/settings/page.tsx | 8 ++-- .../(sidebar)/rpc/components/MethodsTable.tsx | 2 +- .../settings/ProjectGeneralSettingsPage.tsx | 2 +- .../(sidebar)/webhooks/layout.tsx | 4 +- .../webhooks/universal-bridge/page.tsx | 2 +- 14 files changed, 74 insertions(+), 48 deletions(-) create mode 100644 apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/payments/components/FeatureCard.client.tsx diff --git a/apps/dashboard/src/@/analytics/report.ts b/apps/dashboard/src/@/analytics/report.ts index 4516a4fcaff..c898ff45932 100644 --- a/apps/dashboard/src/@/analytics/report.ts +++ b/apps/dashboard/src/@/analytics/report.ts @@ -413,3 +413,18 @@ export function reportUpsellShown(properties: UpsellParams) { export function reportUpsellClicked(properties: UpsellParams) { posthog.capture("upsell clicked", properties); } + +// ---------------------------- +// PAYMENTS +// ---------------------------- + +/** + * ### Why do we need to report this event? + * - To track conversions on payment overview page + * + * ### Who is responsible for this event? + * @samina + */ +export function reportPaymentCardClick(properties: { id: string }) { + posthog.capture("payment card clicked", properties); +} diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/components/ProjectFTUX/ProjectFTUX.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/components/ProjectFTUX/ProjectFTUX.tsx index 44bb77edba4..ab0f272b4c1 100644 --- a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/components/ProjectFTUX/ProjectFTUX.tsx +++ b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/components/ProjectFTUX/ProjectFTUX.tsx @@ -254,7 +254,7 @@ function ProductsSection(props: { teamSlug: string; projectSlug: string }) { { description: "Bridge, swap, and purchase cryptocurrencies with any fiat options or tokens via cross-chain routing", - href: `/team/${props.teamSlug}/${props.projectSlug}/universal-bridge`, + href: `/team/${props.teamSlug}/${props.projectSlug}/payments`, icon: PayIcon, title: "Payments", }, diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/components/ProjectSidebarLayout.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/components/ProjectSidebarLayout.tsx index 3549bab49a8..e9dd315e7c1 100644 --- a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/components/ProjectSidebarLayout.tsx +++ b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/components/ProjectSidebarLayout.tsx @@ -79,7 +79,7 @@ export function ProjectSidebarLayout(props: { group: "Monetize", links: [ { - href: `${layoutPath}/universal-bridge`, + href: `${layoutPath}/payments`, icon: PayIcon, label: "Payments", }, diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/insight/components/TopChainsTable.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/insight/components/TopChainsTable.tsx index 79c661299ae..7af51938b48 100644 --- a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/insight/components/TopChainsTable.tsx +++ b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/insight/components/TopChainsTable.tsx @@ -13,7 +13,7 @@ import { TableHeader, TableRow, } from "@/components/ui/table"; -import { CardHeading } from "../../universal-bridge/components/common"; +import { CardHeading } from "../../payments/components/common"; export function TopInsightChainsTable(props: { data: InsightChainStats[]; diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/insight/components/TopEndpointsTable.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/insight/components/TopEndpointsTable.tsx index 1ee0853f08b..622ae6df8c5 100644 --- a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/insight/components/TopEndpointsTable.tsx +++ b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/insight/components/TopEndpointsTable.tsx @@ -13,7 +13,7 @@ import { TableHeader, TableRow, } from "@/components/ui/table"; -import { CardHeading } from "../../universal-bridge/components/common"; +import { CardHeading } from "../../payments/components/common"; export function TopInsightEndpointsTable(props: { data: InsightEndpointStats[]; diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/page.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/page.tsx index 58f07c263fa..87763b5c018 100644 --- a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/page.tsx +++ b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/page.tsx @@ -423,7 +423,7 @@ function AppHighlightsCard({ emptyContent: ( ), diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/payments/analytics/page.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/payments/analytics/page.tsx index b2eb6a87695..4bf1d7e2f00 100644 --- a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/payments/analytics/page.tsx +++ b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/payments/analytics/page.tsx @@ -24,9 +24,7 @@ export default async function Page(props: { const project = await getProject(params.team_slug, params.project_slug); if (!authToken) { - loginRedirect( - `/team/${params.team_slug}/${params.project_slug}/universal-bridge`, - ); + loginRedirect(`/team/${params.team_slug}/${params.project_slug}/payments`); } if (!project) { diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/payments/components/FeatureCard.client.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/payments/components/FeatureCard.client.tsx new file mode 100644 index 00000000000..e6ac59f9e92 --- /dev/null +++ b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/payments/components/FeatureCard.client.tsx @@ -0,0 +1,37 @@ +"use client"; + +import Link from "next/link"; +import { reportPaymentCardClick } from "@/analytics/report"; +import { Button } from "@/components/ui/button"; +import { Card } from "@/components/ui/card"; + +export function FeatureCard(props: { + title: string; + description: string; + icon: React.ReactNode; + id: string; + link: { href: string; label: string; target?: string }; +}) { + return ( + +
+ {props.icon} +
+
+

{props.title}

+

{props.description}

+
+ +
+ ); +} diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/payments/page.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/payments/page.tsx index 7053fb62e96..149cfe7cca3 100644 --- a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/payments/page.tsx +++ b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/payments/page.tsx @@ -7,14 +7,12 @@ import { HammerIcon, LinkIcon, } from "lucide-react"; -import Link from "next/link"; import { redirect } from "next/navigation"; import { ResponsiveSearchParamsProvider } from "responsive-rsc"; import { getAuthToken } from "@/api/auth-token"; import { getProject } from "@/api/projects"; -import { Button } from "@/components/ui/button"; -import { Card } from "@/components/ui/card"; import { loginRedirect } from "@/utils/redirects"; +import { FeatureCard } from "./components/FeatureCard.client"; export default async function Page(props: { params: Promise<{ @@ -32,9 +30,7 @@ export default async function Page(props: { const project = await getProject(params.team_slug, params.project_slug); if (!authToken) { - loginRedirect( - `/team/${params.team_slug}/${params.project_slug}/universal-bridge`, - ); + loginRedirect(`/team/${params.team_slug}/${params.project_slug}/payments`); } if (!project) { @@ -51,6 +47,7 @@ export default async function Page(props: { title="Earn Fees" description="Setup fees to earn any time a user swaps or bridges funds." icon={} + id="earn_fees" link={{ href: `/team/${params.team_slug}/${params.project_slug}/payments/settings`, label: "Configure", @@ -60,6 +57,7 @@ export default async function Page(props: { title="Create Payment Links" description="Create shareable URLs to receive any token in seconds." icon={} + id="create_payment_links" link={{ href: `/pay`, label: "Create", @@ -69,6 +67,7 @@ export default async function Page(props: { title="Sell Your Token" description="Allow users to swap from any token to your token from your app." icon={} + id="sell_your_token" link={{ href: `/team/${params.team_slug}/${params.project_slug}/tokens`, label: "Launch Token", @@ -78,6 +77,7 @@ export default async function Page(props: { title="Get Notified" description="Create Webhooks to get notified on each purchase or transaction." icon={} + id="get_notified" link={{ href: `/team/${params.team_slug}/${params.project_slug}/payments/webhooks`, label: "Setup", @@ -87,6 +87,7 @@ export default async function Page(props: { title="Sell Products" description="Sell physical or digital products with an easy-to-configure component." icon={} + id="sell_products" link={{ href: "https://portal.thirdweb.com/payments/products", label: "Get Started", @@ -97,6 +98,7 @@ export default async function Page(props: { title="Customize Your Experience" description="Fully customizable backend API to create your own branded flows." icon={} + id="customize_your_experience" link={{ href: "https://payments.thirdweb.com/reference", label: "Docs", @@ -130,27 +132,3 @@ export default async function Page(props: { ); } - -function FeatureCard(props: { - title: string; - description: string; - icon: React.ReactNode; - link: { href: string; label: string; target?: string }; -}) { - return ( - -
- {props.icon} -
-
-

{props.title}

-

{props.description}

-
- -
- ); -} diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/payments/settings/page.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/payments/settings/page.tsx index c4cfe368d22..9347d6f0a7a 100644 --- a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/payments/settings/page.tsx +++ b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/payments/settings/page.tsx @@ -1,5 +1,5 @@ -import { PayConfig } from "@app/team/[team_slug]/[project_slug]/(sidebar)/universal-bridge/settings/PayConfig"; -import { RouteDiscovery } from "@app/team/[team_slug]/[project_slug]/(sidebar)/universal-bridge/settings/RouteDiscovery"; +import { PayConfig } from "@app/team/[team_slug]/[project_slug]/(sidebar)/payments/settings/PayConfig"; +import { RouteDiscovery } from "@app/team/[team_slug]/[project_slug]/(sidebar)/payments/settings/RouteDiscovery"; import { redirect } from "next/navigation"; import { getAuthToken } from "@/api/auth-token"; import { getProject } from "@/api/projects"; @@ -23,9 +23,7 @@ export default async function Page(props: { ]); if (!authToken) { - loginRedirect( - `/team/${team_slug}/${project_slug}/universal-bridge/settings`, - ); + loginRedirect(`/team/${team_slug}/${project_slug}/payments/settings`); } if (!team) { diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/rpc/components/MethodsTable.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/rpc/components/MethodsTable.tsx index a49f84b2fcd..ce5700566c9 100644 --- a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/rpc/components/MethodsTable.tsx +++ b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/rpc/components/MethodsTable.tsx @@ -15,7 +15,7 @@ import { TableHeader, TableRow, } from "@/components/ui/table"; -import { CardHeading } from "../../universal-bridge/components/common"; +import { CardHeading } from "../../payments/components/common"; export function TopRPCMethodsTable(props: { data: RpcMethodStats[]; diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/settings/ProjectGeneralSettingsPage.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/settings/ProjectGeneralSettingsPage.tsx index 8a55ee8f95e..5e9a4da51ed 100644 --- a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/settings/ProjectGeneralSettingsPage.tsx +++ b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/settings/ProjectGeneralSettingsPage.tsx @@ -223,7 +223,7 @@ export function ProjectGeneralSettingsPageUI(props: { aaConfig: `${projectLayout}/account-abstraction/settings`, afterDeleteRedirectTo: `/team/${props.teamSlug}`, inAppConfig: `${projectLayout}/wallets/settings`, - payConfig: `${projectLayout}/universal-bridge/settings`, + payConfig: `${projectLayout}/payments/settings`, }; const { project } = props; diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/webhooks/layout.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/webhooks/layout.tsx index 852acc1ffa1..ee52f222023 100644 --- a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/webhooks/layout.tsx +++ b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/webhooks/layout.tsx @@ -49,7 +49,7 @@ export default async function WebhooksLayout(props: { }, { name: "Payments", - path: `/team/${params.team_slug}/${params.project_slug}/webhooks/universal-bridge`, + path: `/team/${params.team_slug}/${params.project_slug}/payments/webhooks`, }, ]} scrollableClassName="container max-w-7xl" @@ -63,7 +63,7 @@ export default async function WebhooksLayout(props: { }, { name: "Payments", - path: `/team/${params.team_slug}/${params.project_slug}/webhooks/universal-bridge`, + path: `/team/${params.team_slug}/${params.project_slug}/payments/webhooks`, }, ]} scrollableClassName="container max-w-7xl" diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/webhooks/universal-bridge/page.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/webhooks/universal-bridge/page.tsx index 2a935afef9e..13408806ecc 100644 --- a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/webhooks/universal-bridge/page.tsx +++ b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/webhooks/universal-bridge/page.tsx @@ -1,7 +1,7 @@ import { redirect } from "next/navigation"; import { getProject } from "@/api/projects"; import { UnderlineLink } from "@/components/ui/UnderlineLink"; -import { PayWebhooksPage } from "../../universal-bridge/webhooks/components/webhooks.client"; +import { PayWebhooksPage } from "../../payments/webhooks/components/webhooks.client"; export default async function Page(props: { params: Promise<{