/** * 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
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
{t.quote}
Keyword research, competitor analysis, backlinks, rank tracking, technical audits, and AI-search visibility, all on real DataForSEO data and connected to each other.
{page.eyebrow}
{blurb}
))}Model Context Protocol
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.
› 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
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.