Skip to content
Merged
2 changes: 1 addition & 1 deletion apps/app/src/app/api/og/server/[id]/route.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,7 @@ export async function GET(
display: "block",
}}
/>
<div style={{ fontWeight: 500, display: "block" }}>MCPay — Payments for MCPs</div>
<div style={{ fontWeight: 500, display: "block" }}>MCPay: make your AIs more capable</div>
</div>
<div style={{ fontSize: 15, opacity: 0.55, paddingLeft: 22, display: "block" }}>mcpay.tech</div>
</div>
Expand Down
8 changes: 4 additions & 4 deletions apps/app/src/app/layout.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ const hostGrotesk = Host_Grotesk({
});

export const metadata: Metadata = {
title: "MCPay — Payments for MCPs",
title: "MCPay: make your AIs more capable",
description: "Add micropayments per tool call to your MCP servers or APIs without rewriting infrastructure. Prepare your stack for agent-to-agent payments.",
icons: {
icon: [
Expand All @@ -45,7 +45,7 @@ export const metadata: Metadata = {
],
},
openGraph: {
title: "MCPay — Payments for MCPs",
title: "MCPay: make your AIs more capable",
description: "Add micropayments per tool call to your MCP servers or APIs without rewriting infrastructure. Prepare your stack for agent-to-agent payments.",
type: "website",
url: "https://mcpay.tech",
Expand All @@ -55,13 +55,13 @@ export const metadata: Metadata = {
url: '/mcpay-agentic-payments-og-image-14112025.png',
width: 1200,
height: 630,
alt: 'MCPay — Payments for MCPs',
alt: 'MCPay: make your AIs more capable',
}
],
},
twitter: {
card: 'summary_large_image',
title: "MCPay — Payments for MCPs",
title: "MCPay: make your AIs more capable",
description: "Add micropayments per tool call to your MCP servers or APIs without rewriting infrastructure. Prepare your stack for agent-to-agent payments.",
images: ['/mcpay-agentic-payments-og-image-14112025.png'],
creator: '@mcpaytech',
Expand Down
37 changes: 26 additions & 11 deletions apps/app/src/app/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,17 +5,18 @@ import DeveloperInfo from "@/components/custom-ui/developer-info"
import FAQSection from "@/components/custom-ui/faq-section"
import Footer from "@/components/custom-ui/footer"
import GithubInfo from "@/components/custom-ui/github-info"
import Hero3D from "@/components/custom-ui/hero-3d"
import Hero3D, { SupportedBySection } from "@/components/custom-ui/hero-3d"
import ServersGrid from "@/components/custom-ui/servers-grid"
import Stats from "@/components/custom-ui/stats"
import TypingAnimation from "@/components/custom-ui/typing-animation"
import { useTheme } from "@/components/providers/theme-context"
import { Button } from "@/components/ui/button"
import { useWindowScroll } from "@/hooks/use-chat-scroll"
import { mcpDataApi, McpServer } from "@/lib/client/utils"
import { ArrowRight, Rocket } from "lucide-react"
import Link from "next/link"
import { useEffect, useState } from "react"
import { useAccountModal } from "@/components/hooks/use-account-modal"
import { AccountModal } from "@/components/custom-ui/account-modal"
import { useSession } from "@/lib/client/auth"


export default function MCPBrowser() {
Expand All @@ -37,7 +38,8 @@ export default function MCPBrowser() {


const { isDark } = useTheme()
const { isAtBottom: hasReachedBottom } = useWindowScroll(200)
const { isOpen, defaultTab, openModal, closeModal } = useAccountModal()
const { data: session } = useSession()

const getFriendlyErrorMessage = (error: string) => {
if (error.includes('404')) {
Expand Down Expand Up @@ -125,6 +127,10 @@ export default function MCPBrowser() {
<Hero3D />
</section>

<section className="mb-8 md:mb-12">
<SupportedBySection />
</section>

<section>
<ConsumerInfo />
</section>
Expand Down Expand Up @@ -159,17 +165,26 @@ export default function MCPBrowser() {
<GithubInfo />
</section>

<section className="mb-2">
<div className="max-w-6xl px-4 md:px-6 mx-auto text-center">
<TypingAnimation
text="Join the future of agentic payments."
trigger={hasReachedBottom}
speed={20}
/>
<section className="mb-20">
<div className="max-w-6xl px-4 md:px-6 mx-auto text-center space-y-6">
<h2 className="text-3xl sm:text-4xl lg:text-5xl font-medium font-host text-foreground leading-tight">
Make your AIs more capable.
</h2>
{!session?.user && (
<Button
variant="customTallAccent"
size="tall"
onClick={() => openModal("wallets")}
className="min-w-[220px]"
>
SIGN IN
</Button>
)}
</div>
</section>
</div>
<Footer />
<AccountModal isOpen={isOpen} onClose={closeModal} defaultTab={defaultTab} />
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bug: Duplicate AccountModal instances with unsynchronized state

The page now creates its own useAccountModal() hook instance and renders a second AccountModal, while the Navbar component (rendered via the root layout) already has its own instance. Since useAccountModal uses local useState rather than React Context, these two modal instances have completely independent state. This causes duplicate modals to be rendered simultaneously on the page, with the navbar's "SIGN IN" button controlling one modal and the page's bottom "SIGN IN" button controlling another.

Additional Locations (2)

Fix in Cursor Fix in Web

</div>
)
}
Loading
Loading