diff --git a/web/src/components/landing-page.css b/web/src/components/landing-page.css
index e1082cb..cda4278 100644
--- a/web/src/components/landing-page.css
+++ b/web/src/components/landing-page.css
@@ -34,7 +34,12 @@
--feat-bg: #221f1b;
--feat-text: #ffffff;
--term-bg: #221f1b;
- font-family: "Inter", ui-sans-serif, system-ui, -apple-system, sans-serif;
+ font-family:
+ "Inter",
+ ui-sans-serif,
+ system-ui,
+ -apple-system,
+ sans-serif;
background: var(--canvas);
color: var(--ink);
font-size: 16px;
@@ -298,6 +303,33 @@
position: relative;
z-index: 1;
}
+/* Out of flow so the hero's vertical centering ignores the laurel and the
+ headline block sits exactly where it did without it. */
+.itc-hero-ph-laurel {
+ color: var(--ink);
+ display: inline-flex;
+ position: absolute;
+ bottom: calc(100% + 28px);
+ left: 50%;
+ transform: translateX(-50%);
+ opacity: 0.85;
+ transition: opacity 0.18s ease;
+}
+.itc-hero-ph-laurel:hover {
+ opacity: 1;
+}
+.itc-hero-ph-laurel svg {
+ height: 44px;
+ width: auto;
+}
+@media (max-width: 767px) {
+ .itc-hero-ph-laurel {
+ bottom: calc(100% + 20px);
+ }
+ .itc-hero-ph-laurel svg {
+ height: 38px;
+ }
+}
.itc-hero-title {
color: var(--ink);
transition: color 0.18s ease;
diff --git a/web/src/components/landing-page.tsx b/web/src/components/landing-page.tsx
index d767483..57bdf0f 100644
--- a/web/src/components/landing-page.tsx
+++ b/web/src/components/landing-page.tsx
@@ -7,11 +7,14 @@
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";
@@ -179,7 +182,10 @@ function ArrowCta({
size?: "md" | "lg";
}) {
return (
-
+
{children}
{page.eyebrow}
+
{blurb}
@@ -457,8 +475,7 @@ function McpSection() {
› find and cluster keywords
- for{" "}
- openseo.so
+ for openseo.so
{"\n\n"}
⏺ openseo.keyword_research(seed: "open source seo")
@@ -630,22 +647,10 @@ function GeminiIcon(props: SVGProps) {
-
+
-
+
- Why Open Source?{" "}
-
+ Why Open Source?
diff --git a/web/src/components/product-hunt-laurel.tsx b/web/src/components/product-hunt-laurel.tsx
new file mode 100644
index 0000000..15ab430
--- /dev/null
+++ b/web/src/components/product-hunt-laurel.tsx
@@ -0,0 +1,209 @@
+// Product Hunt "1st Product of the Day" laurel badge. Paths are Product
+// Hunt's official badge artwork; fill inherits currentColor so the badge can
+// sit on any background.
+export function ProductHuntLaurel({ className }: { className?: string }) {
+ return (
+
+ );
+}