This commit is contained in:
parent
b0b5528a3a
commit
67ed8d3c77
@ -34,7 +34,12 @@
|
|||||||
--feat-bg: #221f1b;
|
--feat-bg: #221f1b;
|
||||||
--feat-text: #ffffff;
|
--feat-text: #ffffff;
|
||||||
--term-bg: #221f1b;
|
--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);
|
background: var(--canvas);
|
||||||
color: var(--ink);
|
color: var(--ink);
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
@ -298,6 +303,33 @@
|
|||||||
position: relative;
|
position: relative;
|
||||||
z-index: 1;
|
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 {
|
.itc-hero-title {
|
||||||
color: var(--ink);
|
color: var(--ink);
|
||||||
transition: color 0.18s ease;
|
transition: color 0.18s ease;
|
||||||
|
|||||||
@ -7,11 +7,14 @@
|
|||||||
|
|
||||||
import { type ReactNode, type SVGProps } from "react";
|
import { type ReactNode, type SVGProps } from "react";
|
||||||
import { NewsletterSignup } from "@/components/newsletter-signup";
|
import { NewsletterSignup } from "@/components/newsletter-signup";
|
||||||
|
import { ProductHuntLaurel } from "@/components/product-hunt-laurel";
|
||||||
import { SiteFooter } from "@/components/site-footer";
|
import { SiteFooter } from "@/components/site-footer";
|
||||||
import { featurePages } from "@/lib/feature-pages";
|
import { featurePages } from "@/lib/feature-pages";
|
||||||
import "./landing-page.css";
|
import "./landing-page.css";
|
||||||
|
|
||||||
const SIGNUP_URL = "https://app.openseo.so/sign-up";
|
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 GITHUB_URL = "https://github.com/every-app/open-seo";
|
||||||
const DISCORD_URL = "https://discord.gg/c9uGs3cFXr";
|
const DISCORD_URL = "https://discord.gg/c9uGs3cFXr";
|
||||||
|
|
||||||
@ -179,7 +182,10 @@ function ArrowCta({
|
|||||||
size?: "md" | "lg";
|
size?: "md" | "lg";
|
||||||
}) {
|
}) {
|
||||||
return (
|
return (
|
||||||
<a href={href} className={`${className}${size === "lg" ? " itc-btn-lg" : ""}`}>
|
<a
|
||||||
|
href={href}
|
||||||
|
className={`${className}${size === "lg" ? " itc-btn-lg" : ""}`}
|
||||||
|
>
|
||||||
{children}
|
{children}
|
||||||
<IconArrowRight size={size === "lg" ? 18 : 16} className="itc-arrow" />
|
<IconArrowRight size={size === "lg" ? 18 : 16} className="itc-arrow" />
|
||||||
</a>
|
</a>
|
||||||
@ -192,6 +198,15 @@ function Hero() {
|
|||||||
return (
|
return (
|
||||||
<section className="itc-hero">
|
<section className="itc-hero">
|
||||||
<Container>
|
<Container>
|
||||||
|
<a
|
||||||
|
href={PRODUCT_HUNT_URL}
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener noreferrer"
|
||||||
|
className="itc-hero-ph-laurel"
|
||||||
|
aria-label="Number 1 Product of the Day on Product Hunt"
|
||||||
|
>
|
||||||
|
<ProductHuntLaurel />
|
||||||
|
</a>
|
||||||
<h1
|
<h1
|
||||||
className="itc-display-xl itc-hero-title"
|
className="itc-display-xl itc-hero-title"
|
||||||
style={{ maxWidth: 1180, margin: "0 auto" }}
|
style={{ maxWidth: 1180, margin: "0 auto" }}
|
||||||
@ -370,7 +385,10 @@ function ProductSection() {
|
|||||||
<p style={{ margin: 0, fontSize: 16, fontWeight: 500 }}>
|
<p style={{ margin: 0, fontSize: 16, fontWeight: 500 }}>
|
||||||
{page.eyebrow}
|
{page.eyebrow}
|
||||||
</p>
|
</p>
|
||||||
<p className="itc-body-sm itc-muted" style={{ margin: "8px 0 0" }}>
|
<p
|
||||||
|
className="itc-body-sm itc-muted"
|
||||||
|
style={{ margin: "8px 0 0" }}
|
||||||
|
>
|
||||||
{blurb}
|
{blurb}
|
||||||
</p>
|
</p>
|
||||||
</a>
|
</a>
|
||||||
@ -457,8 +475,7 @@ function McpSection() {
|
|||||||
<pre>
|
<pre>
|
||||||
<code>
|
<code>
|
||||||
<span className="t-orange">›</span> find and cluster keywords
|
<span className="t-orange">›</span> find and cluster keywords
|
||||||
for{" "}
|
for <span className="t-bright">openseo.so</span>
|
||||||
<span className="t-bright">openseo.so</span>
|
|
||||||
{"\n\n"}
|
{"\n\n"}
|
||||||
<span className="t-dim">
|
<span className="t-dim">
|
||||||
⏺ openseo.keyword_research(seed: "open source seo")
|
⏺ openseo.keyword_research(seed: "open source seo")
|
||||||
@ -630,22 +647,10 @@ function GeminiIcon(props: SVGProps<SVGSVGElement>) {
|
|||||||
<ellipse cx="163" cy="149" fill="#3689FF" rx="196" ry="159" />
|
<ellipse cx="163" cy="149" fill="#3689FF" rx="196" ry="159" />
|
||||||
</g>
|
</g>
|
||||||
<g filter="url(#intercom-gemini-c)">
|
<g filter="url(#intercom-gemini-c)">
|
||||||
<ellipse
|
<ellipse cx="33.5" cy="142.5" fill="#F6C013" rx="68.5" ry="72.5" />
|
||||||
cx="33.5"
|
|
||||||
cy="142.5"
|
|
||||||
fill="#F6C013"
|
|
||||||
rx="68.5"
|
|
||||||
ry="72.5"
|
|
||||||
/>
|
|
||||||
</g>
|
</g>
|
||||||
<g filter="url(#intercom-gemini-d)">
|
<g filter="url(#intercom-gemini-d)">
|
||||||
<ellipse
|
<ellipse cx="19.5" cy="148.5" fill="#F6C013" rx="68.5" ry="72.5" />
|
||||||
cx="19.5"
|
|
||||||
cy="148.5"
|
|
||||||
fill="#F6C013"
|
|
||||||
rx="68.5"
|
|
||||||
ry="72.5"
|
|
||||||
/>
|
|
||||||
</g>
|
</g>
|
||||||
<g filter="url(#intercom-gemini-e)">
|
<g filter="url(#intercom-gemini-e)">
|
||||||
<path
|
<path
|
||||||
@ -824,8 +829,7 @@ function OpenSourceSection() {
|
|||||||
Star on GitHub
|
Star on GitHub
|
||||||
</a>
|
</a>
|
||||||
<a href="/open-source-seo" className="itc-textlink">
|
<a href="/open-source-seo" className="itc-textlink">
|
||||||
Why Open Source?{" "}
|
Why Open Source? <IconArrowRight size={15} className="itc-arrow" />
|
||||||
<IconArrowRight size={15} className="itc-arrow" />
|
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</Container>
|
</Container>
|
||||||
|
|||||||
209
web/src/components/product-hunt-laurel.tsx
Normal file
209
web/src/components/product-hunt-laurel.tsx
Normal file
File diff suppressed because one or more lines are too long
Loading…
x
Reference in New Issue
Block a user