/** * Canonical marketing landing page. * * The page uses a soft cream canvas, restrained hairline surfaces, charcoal * type, and a single orange emphasis moment around the MCP section. */ import { type ReactNode, type SVGProps } from "react"; import { NewsletterSignup } from "@/components/newsletter-signup"; import { ProductHuntLaurel } from "@/components/product-hunt-laurel"; import { SiteFooter } from "@/components/site-footer"; import { featurePages } from "@/lib/feature-pages"; import "./landing-page.css"; const SIGNUP_URL = "https://app.openseo.so/sign-up"; const PRODUCT_HUNT_URL = "https://www.producthunt.com/products/openseo?launch=openseo"; const GITHUB_URL = "https://github.com/every-app/open-seo"; const DISCORD_URL = "https://discord.gg/c9uGs3cFXr"; type Testimonial = { quote: string; name: string; initial: string; handle: string; href: string; network: "x" | "linkedin" | "web"; avatarSrc?: string; }; const TESTIMONIALS: Testimonial[] = [ { quote: "All of the value, none of the bloat. OpenSEO is a no-brainer compared to the expensive alternatives!", name: "Fed", initial: "F", handle: "@foliofed", href: "https://x.com/foliofed", network: "x", avatarSrc: "/avatars/fed-avatar.jpg", }, { quote: "I've been using OpenSEO for the past 3 months, Ben keeps launching features to make it the best. I use it every day to find where my competitors are ranking.", name: "Samik", initial: "S", handle: "Subclip", href: "https://www.subclip.app/", network: "web", avatarSrc: "/avatars/samik-avatar.jpg", }, { quote: "It's so straightforward and incredibly easy to get started. OpenSEO gives you the complete setup, stripped of all the fluff that you get elsewhere.", name: "Tom Raine", initial: "T", handle: "LinkedIn", href: "https://www.linkedin.com/in/tom-raine-hk/", network: "linkedin", avatarSrc: "/avatars/tom-avatar.jpeg", }, ]; // ─── Icons (inline SVG only, per project convention) ───────────────── type IconProps = { size?: number; className?: string }; function strokeProps(size: number, className?: string) { return { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 2, strokeLinecap: "round" as const, strokeLinejoin: "round" as const, className, "aria-hidden": true, }; } function IconArrowRight({ size = 16, className }: IconProps) { return ( ); } function IconGithub({ size = 16, className }: IconProps) { return ( ); } function IconX({ size = 14, className }: IconProps) { return ( ); } function IconLinkedIn({ size = 14, className }: IconProps) { return ( ); } function IconLink({ size = 14, className }: IconProps) { return ( ); } function IconDiscord({ size = 18, className }: IconProps) { return ( ); } // ─── Shared bits ───────────────────────────────────────────────────── function Container({ children, className = "", }: { children: ReactNode; className?: string; }) { return
{children}
; } function ArrowCta({ href = SIGNUP_URL, className = "itc-btn itc-btn-primary", children = "Start enjoying SEO", size = "md", }: { href?: string; className?: string; children?: ReactNode; size?: "md" | "lg"; }) { return ( {children} ); } // ─── Hero ──────────────────────────────────────────────────────────── function Hero() { return (

The modern, open source SEO platform.

Without quality data, AI gives generic advice. OpenSEO is built for you and your AI agent to work together on SEO strategy + content tailored to your business.

No credit card required

); } // ─── Testimonial (true-black inverse strip) ────────────────────────── function Testimonial() { return (

Trusted by hundreds of customers worldwide

{TESTIMONIALS.map((t) => (
{t.quote}
{t.name} {t.network === "x" ? ( ) : t.network === "linkedin" ? ( ) : ( )} {t.handle}
))}
); } // ─── Product ───────────────────────────────────────────────────────── const FEATURE_CARDS = [ { page: featurePages.keywordResearch, blurb: "Find ideas, demand, difficulty, intent, and live SERPs.", }, { page: featurePages.domainOverview, blurb: "Estimate organic traffic and ranking keywords.", }, { page: featurePages.backlinks, blurb: "Inspect backlinks, referring domains, and link quality.", }, { page: featurePages.rankTracking, blurb: "Track keyword positions over time.", }, { page: featurePages.siteAudit, blurb: "Crawl pages and surface technical issues.", }, { page: featurePages.aiBrandVisibility, blurb: "Review AI mentions, citations, and prompts.", }, { page: featurePages.aiSearchPrompts, blurb: "Compare prompts across supported AI models.", }, { page: featurePages.savedKeywords, blurb: "Organize ideas for content and tracking.", }, ]; function DemoVideo() { return ( ); } function ProductSection() { return (

See OpenSEO in action

Keyword research, competitor analysis, backlinks, rank tracking, technical audits, and AI-search visibility, all on real DataForSEO data and connected to each other.

{FEATURE_CARDS.map(({ page, blurb }) => (

{page.eyebrow}

{blurb}

))}
All features
); } // ─── MCP: the page's one Fin Orange moment ─────────────────────────── type McpClient = { name: string; Icon: (props: SVGProps) => ReactNode; }; const MCP_CLIENTS: McpClient[] = [ { name: "Claude", Icon: ClaudeIcon }, { name: "Codex", Icon: CodexIcon }, { name: "OpenClaw", Icon: OpenClawIcon }, { name: "OpenCode", Icon: OpenCodeIcon }, { name: "Gemini", Icon: GeminiIcon }, ]; function McpSection() { return (

Model Context Protocol

Get superpowers with the MCP

Give your agent real SEO data instead of guesses. It can research keywords, competitors, backlinks, and Google Search Console performance, then you can review the work in OpenSEO.

{MCP_CLIENTS.map(({ name, Icon }) => ( ))}
              
                 find and cluster keywords
                for openseo.so
                {"\n\n"}
                
                  ⏺ openseo.keyword_research(seed: "open source seo")
                
                {"\n"}
                {"  "}keyword{"                      "}volume{"     "}kd{"\n"}
                {"  "}open source seo{"              "}
                1,300
                {"      "}
                12
                {"\n"}
                {"  "}open source seo tools{"        "}
                720
                {"        "}
                9
                {"\n"}
                {"  "}self-hosted seo platform{"     "}
                210
                {"        "}
                4
                {"\n\n"}
                
                
                  {" "}
                  Saved 3 keywords to your workspace.
                
                {"\n"}
                
                 View data in app: 
                app.openseo.so/keywords
              
            
); } function ClaudeIcon(props: SVGProps) { return ( ); } function CodexIcon(props: SVGProps) { return ( ); } function OpenClawIcon(props: SVGProps) { return ( ); } function OpenCodeIcon(props: SVGProps) { return ( ); } function GeminiIcon(props: SVGProps) { return ( ); } // ─── Open source ───────────────────────────────────────────────────── function OpenSourceSection() { return (

100% open source

People should have the option to self-host and customize their tools. If you ever hear someone talking about building their own tool from scratch, tell them to build on top of OpenSEO.

); } // ─── Footer ────────────────────────────────────────────────────────── function Footer() { return (

Stay in the loop

Product updates, new features, and the occasional behind-the-scenes.

© 2026 Every App, Inc.

); } // ─── Page ──────────────────────────────────────────────────────────── export function LandingPage() { return ( ); }