diff --git a/apps/app/public/colosseum-logo-white.svg b/apps/app/public/colosseum-logo-white.svg
new file mode 100644
index 0000000..a513aa3
--- /dev/null
+++ b/apps/app/public/colosseum-logo-white.svg
@@ -0,0 +1,24 @@
+
diff --git a/apps/app/src/components/custom-ui/hero-3d.tsx b/apps/app/src/components/custom-ui/hero-3d.tsx
index 6925319..b6fd91e 100644
--- a/apps/app/src/components/custom-ui/hero-3d.tsx
+++ b/apps/app/src/components/custom-ui/hero-3d.tsx
@@ -15,6 +15,11 @@ import {
import { easeOut } from "motion"
const SUPPORTED_BY_LOGOS = [
+ {
+ name: "colosseum",
+ href: "https://blog.colosseum.com/announcing-colosseums-accelerator-cohort-4/",
+ src: "/colosseum-logo-white.svg",
+ },
{
name: "coinbase",
href: "https://www.coinbase.com/developer-platform/discover/launches/summer-builder-grants",
@@ -48,6 +53,8 @@ const getLogoSize = (name: string) => {
return { className: "h-6 w-[60px]", width: 60, height: 24 }
case "ethglobal":
return { className: "h-5 w-[90px]", width: 80, height: 20 }
+ case "colosseum":
+ return { className: "h-6 w-[120px]", width: 120, height: 24 }
default:
return { className: "h-12 w-[160px]", width: 160, height: 64 }
}
@@ -64,6 +71,46 @@ const getMaskStyle = (src: string): React.CSSProperties => ({
WebkitMaskPosition: "center",
})
+const renderLogo = (logo: typeof SUPPORTED_BY_LOGOS[number], index?: number) => {
+ const logoSize = getLogoSize(logo.name)
+ return (
+
+
+
+ )
+}
+
export function SupportedBySection() {
const prefersReduced = useReducedMotion()
const [isMounted, setIsMounted] = React.useState(false)
@@ -84,56 +131,41 @@ export function SupportedBySection() {
[prefersReduced]
)
+ // Duplicate logos for seamless infinite scroll (exactly 2 copies for -50% animation)
+ const duplicatedLogos = [...SUPPORTED_BY_LOGOS, ...SUPPORTED_BY_LOGOS]
+
return (
-
-
-
SUPPORTED BY
-
- {SUPPORTED_BY_LOGOS.map((logo) => {
- const logoSize = getLogoSize(logo.name)
- return (
-
-
-
- )
- })}
+ <>
+
+
+
SUPPORTED BY
+
+ {/* Desktop: flex-wrap layout */}
+
+ {SUPPORTED_BY_LOGOS.map((logo) => renderLogo(logo))}
+
+
+
+
+ {/* Mobile: auto-scrolling carousel - full width to edge */}
+
+
+ {duplicatedLogos.map((logo, index) => renderLogo(logo, index))}
-
+ >
)
}
diff --git a/apps/app/src/components/custom-ui/mcp-example-card.tsx b/apps/app/src/components/custom-ui/mcp-example-card.tsx
index 394fdc7..654a1a7 100644
--- a/apps/app/src/components/custom-ui/mcp-example-card.tsx
+++ b/apps/app/src/components/custom-ui/mcp-example-card.tsx
@@ -13,6 +13,7 @@ import { Spinner } from "@/components/ui/spinner"
import Image from "next/image"
import { toast } from "sonner"
import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "@/components/ui/tooltip"
+import { Drawer, DrawerContent, DrawerHeader, DrawerTitle, DrawerDescription } from "@/components/ui/drawer"
interface McpExampleCardProps extends React.HTMLAttributes
{
className?: string
@@ -26,6 +27,7 @@ export default function McpExampleCard({
}: McpExampleCardProps) {
const [selectedTool, setSelectedTool] = useState(null)
const [showToolModal, setShowToolModal] = useState(false)
+ const [toolDescriptionDrawer, setToolDescriptionDrawer] = useState<{ toolName: string; description: string } | null>(null)
const [data, setData] = useState<{
serverId: string
origin?: string
@@ -189,34 +191,47 @@ export default function McpExampleCard({
displayTools.map((tool) => (
- {/* Left: Name + Info Icon */}
+ {/* Mobile: First line - Tool name + Info Icon */}
+ {/* Desktop: Left - Name + Info Icon */}
{tool.name}
{tool.description && (
-
-
+ <>
+ {/* Desktop: Tooltip */}
+
+
+
+
+
+ {tool.description}
+
+
+ {/* Mobile: Clickable button to open drawer */}
+
-
- {tool.description}
-
-
+
+ >
)}
- {/* Right: Price + RUN Button */}
-
+ {/* Mobile: Second line - Price (1/4) + RUN Button (3/4) */}
+ {/* Desktop: Right - Price + RUN Button */}
+
{tool.paymentHint && tool.paymentPriceUSD && (
-
${tool.paymentPriceUSD}
+
${tool.paymentPriceUSD}
)}