Marketing Website

This commit is contained in:
Desktop
2025-11-13 16:51:48 +05:00
parent 224e32230c
commit 86f6886a13
27 changed files with 2149 additions and 0 deletions

14
frontend/marketing.html Normal file
View File

@@ -0,0 +1,14 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<link rel="icon" type="image/png" href="/favicon.png" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Igny8 · AI Growth Engine</title>
</head>
<body class="bg-[#050913]">
<div id="root"></div>
<script type="module" src="/src/marketing/index.tsx"></script>
</body>
</html>

View File

@@ -0,0 +1,39 @@
import React, { Suspense, lazy } from "react";
import { Route, Routes } from "react-router-dom";
import MarketingLayout from "./layout/MarketingLayout";
import LoadingPage from "./components/LoadingPage";
const Home = lazy(() => import("./pages/Home"));
const Product = lazy(() => import("./pages/Product"));
const Solutions = lazy(() => import("./pages/Solutions"));
const Pricing = lazy(() => import("./pages/Pricing"));
const Tour = lazy(() => import("./pages/Tour"));
const Resources = lazy(() => import("./pages/Resources"));
const CaseStudies = lazy(() => import("./pages/CaseStudies"));
const Partners = lazy(() => import("./pages/Partners"));
const Contact = lazy(() => import("./pages/Contact"));
const Waitlist = lazy(() => import("./pages/Waitlist"));
const MarketingApp: React.FC = () => {
return (
<MarketingLayout>
<Suspense fallback={<LoadingPage />}>
<Routes>
<Route path="/" element={<Home />} />
<Route path="/product" element={<Product />} />
<Route path="/solutions" element={<Solutions />} />
<Route path="/pricing" element={<Pricing />} />
<Route path="/tour" element={<Tour />} />
<Route path="/resources" element={<Resources />} />
<Route path="/case-studies" element={<CaseStudies />} />
<Route path="/partners" element={<Partners />} />
<Route path="/contact" element={<Contact />} />
<Route path="/waitlist" element={<Waitlist />} />
</Routes>
</Suspense>
</MarketingLayout>
);
};
export default MarketingApp;

View File

@@ -0,0 +1,73 @@
import React from "react";
interface CTASectionProps {
title: string;
description: string;
primaryCta: { label: string; href: string };
secondaryCta?: { label: string; href: string };
}
const CTASection: React.FC<CTASectionProps> = ({
title,
description,
primaryCta,
secondaryCta,
}) => {
const renderAnchor = (label: string, href: string, className: string) => {
const isExternal = href.startsWith("http");
if (isExternal) {
return (
<a
key={href}
href={href}
className={className}
target="_blank"
rel="noreferrer"
>
{label}
</a>
);
}
return (
<a key={href} href={href} className={className}>
{label}
</a>
);
};
return (
<section className="py-24">
<div className="max-w-5xl mx-auto px-6">
<div className="relative overflow-hidden rounded-3xl border border-white/10 bg-gradient-to-br from-brand-500/30 via-brand-600/20 to-transparent p-10 md:p-14">
<div className="absolute inset-0 bg-[radial-gradient(circle_at_top_left,_rgba(255,255,255,0.12),_transparent_60%)] pointer-events-none" />
<div className="relative flex flex-col gap-6">
<h3 className="text-3xl md:text-4xl font-semibold text-white leading-tight">
{title}
</h3>
<p className="text-white/70 text-base md:text-lg max-w-2xl">
{description}
</p>
<div className="flex flex-col sm:flex-row gap-4">
{renderAnchor(
primaryCta.label,
primaryCta.href,
"inline-flex items-center justify-center rounded-full bg-white text-slate-950 px-6 py-3 text-sm md:text-base font-semibold hover:bg-brand-100 transition"
)}
{secondaryCta && (
renderAnchor(
secondaryCta.label,
secondaryCta.href,
"inline-flex items-center justify-center rounded-full border border-white/40 px-6 py-3 text-sm md:text-base font-semibold text-white hover:border-white/60 transition"
)
)}
</div>
</div>
</div>
</div>
</section>
);
};
export default CTASection;

View File

@@ -0,0 +1,49 @@
import React from "react";
import { ArrowUpRightIcon } from "@heroicons/react/24/outline";
interface FeatureItem {
title: string;
description: string;
icon: React.ReactNode;
link?: { label: string; href: string };
}
interface FeatureGridProps {
features: FeatureItem[];
}
const FeatureGrid: React.FC<FeatureGridProps> = ({ features }) => {
return (
<div className="max-w-6xl mx-auto px-6 py-24">
<div className="grid grid-cols-1 md:grid-cols-2 gap-6">
{features.map((feature) => (
<div
key={feature.title}
className="relative rounded-3xl border border-white/10 bg-gradient-to-br from-white/8 via-transparent to-white/0 p-8 flex flex-col gap-4 group hover:border-brand-400/40 transition"
>
<div className="size-12 rounded-2xl bg-brand-500/10 border border-brand-500/30 flex items-center justify-center text-brand-200">
{feature.icon}
</div>
<h3 className="text-xl font-semibold text-white">{feature.title}</h3>
<p className="text-sm text-white/60 leading-relaxed">
{feature.description}
</p>
{feature.link && (
<a
href={feature.link.href}
className="inline-flex items-center gap-2 text-sm font-semibold text-brand-200 hover:text-brand-100"
>
{feature.link.label}
<ArrowUpRightIcon className="h-4 w-4" />
</a>
)}
<div className="absolute inset-0 rounded-3xl border border-white/0 group-hover:border-brand-500/30 transition" />
</div>
))}
</div>
</div>
);
};
export default FeatureGrid;

View File

@@ -0,0 +1,74 @@
import React from "react";
import { Link } from "react-router-dom";
interface HeroSectionProps {
image: string;
headline: string;
subheadline: string;
primaryCta: { label: string; href: string };
secondaryCta?: { label: string; href: string };
}
const HeroSection: React.FC<HeroSectionProps> = ({
image,
headline,
subheadline,
primaryCta,
secondaryCta,
}) => {
return (
<section className="relative overflow-hidden">
<div className="absolute inset-0 bg-[radial-gradient(circle_at_top,_rgba(66,133,244,0.25),_rgba(9,14,26,0.9))]" />
<div className="relative max-w-6xl mx-auto px-6 py-24 md:py-32 flex flex-col lg:flex-row gap-16 items-center">
<div className="flex-1 flex flex-col gap-6">
<span className="inline-flex items-center gap-2 text-xs font-semibold uppercase tracking-[0.28em] text-brand-200">
AI + SEO PLATFORM
</span>
<h1 className="text-4xl md:text-6xl font-semibold leading-tight text-white">
{headline}
</h1>
<p className="text-lg md:text-xl text-white/70 leading-relaxed max-w-xl">
{subheadline}
</p>
<div className="flex flex-col sm:flex-row gap-4">
<Link
to={primaryCta.href}
className="inline-flex items-center justify-center rounded-full bg-brand-500 hover:bg-brand-400 px-6 py-3 text-sm md:text-base font-semibold transition"
>
{primaryCta.label}
</Link>
{secondaryCta && (
<Link
to={secondaryCta.href}
className="inline-flex items-center justify-center rounded-full border border-white/20 px-6 py-3 text-sm md:text-base font-semibold text-white/80 hover:text-white hover:border-white/40 transition"
>
{secondaryCta.label}
</Link>
)}
</div>
</div>
<div className="flex-1 w-full">
<div className="relative rounded-3xl border border-white/10 bg-white/5 shadow-[0_0_60px_rgba(88,166,255,0.1)]">
<div className="absolute inset-0 rounded-3xl bg-gradient-to-br from-white/10 via-transparent to-white/0 pointer-events-none" />
<img
src={`/marketing/images/${image}`}
alt="Igny8 dashboard preview"
className="w-full h-full object-cover rounded-3xl"
/>
<div className="absolute bottom-6 left-6 bg-slate-950/70 backdrop-blur-lg border border-white/10 rounded-2xl px-6 py-4 flex flex-col gap-1">
<span className="text-xs uppercase tracking-[0.2em] text-white/50">
End-to-end automation
</span>
<span className="text-lg font-semibold text-white">
Keywords Ideas Tasks Content Images
</span>
</div>
</div>
</div>
</div>
</section>
);
};
export default HeroSection;

View File

@@ -0,0 +1,15 @@
import React from "react";
const LoadingPage: React.FC = () => {
return (
<div className="min-h-screen flex flex-col items-center justify-center bg-slate-950 text-white">
<div className="flex items-center gap-3 text-lg font-semibold tracking-wide uppercase">
<span className="h-3 w-3 rounded-full bg-brand-500 animate-pulse" />
Loading experience
</div>
</div>
);
};
export default LoadingPage;

View File

@@ -0,0 +1,39 @@
import React from "react";
const logos = [
"launchpad",
"northbeam",
"scaleops",
"pathfinder",
"catalyst",
"orbit",
];
const LogoCloud: React.FC = () => {
return (
<section className="py-16 bg-slate-950/70 border-y border-white/5">
<div className="max-w-5xl mx-auto px-6 flex flex-col gap-6 items-center">
<span className="text-xs uppercase tracking-[0.28em] text-white/40">
Trusted by modern SEO + content teams
</span>
<div className="flex flex-wrap justify-center gap-8 md:gap-12">
{logos.map((name) => (
<div
key={name}
className="h-8 md:h-10 opacity-70 hover:opacity-100 transition"
>
<img
src={`/marketing/images/logo-${name}.svg`}
alt={`${name} logo`}
className="h-full w-auto"
/>
</div>
))}
</div>
</div>
</section>
);
};
export default LogoCloud;

View File

@@ -0,0 +1,30 @@
import React from "react";
interface Metric {
label: string;
value: string;
}
interface MetricsBarProps {
metrics: Metric[];
}
const MetricsBar: React.FC<MetricsBarProps> = ({ metrics }) => {
return (
<div className="max-w-5xl mx-auto -mt-12 sm:-mt-16 px-6">
<div className="grid grid-cols-1 sm:grid-cols-3 gap-4 rounded-2xl border border-white/10 bg-slate-950/70 backdrop-blur-2xl p-6">
{metrics.map((metric) => (
<div key={metric.label} className="text-center sm:text-left">
<div className="text-3xl font-semibold text-white">{metric.value}</div>
<div className="text-sm uppercase tracking-[0.2em] text-white/50 mt-2">
{metric.label}
</div>
</div>
))}
</div>
</div>
);
};
export default MetricsBar;

View File

@@ -0,0 +1,38 @@
import React from "react";
interface SectionHeadingProps {
eyebrow?: string;
title: string;
description?: string;
align?: "left" | "center";
}
const SectionHeading: React.FC<SectionHeadingProps> = ({
eyebrow,
title,
description,
align = "center",
}) => {
return (
<div
className={`flex flex-col gap-4 ${align === "center" ? "items-center text-center" : "items-start text-left"}`}
>
{eyebrow && (
<span className="inline-flex items-center rounded-full border border-white/15 bg-white/5 px-4 py-1 text-xs font-semibold uppercase tracking-[0.2em] text-brand-200">
{eyebrow}
</span>
)}
<h2 className="text-3xl md:text-4xl font-semibold text-white leading-tight max-w-3xl">
{title}
</h2>
{description && (
<p className="text-white/60 max-w-2xl text-base md:text-lg leading-relaxed">
{description}
</p>
)}
</div>
);
};
export default SectionHeading;

View File

@@ -0,0 +1,41 @@
import React from "react";
import { testimonials } from "../data/testimonials";
const TestimonialSlider: React.FC = () => {
return (
<section className="bg-slate-950">
<div className="max-w-6xl mx-auto px-6 py-24 space-y-12">
<div className="flex flex-col items-center gap-4 text-center">
<span className="inline-flex items-center rounded-full border border-white/15 bg-white/5 px-4 py-1 text-xs font-semibold uppercase tracking-[0.2em] text-brand-200">
Loved by scaling teams
</span>
<h2 className="text-3xl md:text-4xl font-semibold text-white leading-tight max-w-2xl">
Teams ship more content, capture more demand, and see faster ROI with Igny8.
</h2>
</div>
<div className="grid grid-cols-1 md:grid-cols-3 gap-6">
{testimonials.map((testimonial) => (
<div
key={testimonial.name}
className="rounded-3xl border border-white/10 bg-white/5 p-8 flex flex-col gap-6 relative overflow-hidden"
>
<div className="absolute -top-16 left-1/2 -translate-x-1/2 h-32 w-[140%] rounded-[50%] bg-brand-500/10 blur-3xl pointer-events-none" />
<p className="text-base text-white/80 leading-relaxed">
{testimonial.quote}
</p>
<div className="flex flex-col text-sm text-white/60">
<span className="font-semibold text-white">{testimonial.name}</span>
<span>
{testimonial.title} · {testimonial.company}
</span>
</div>
</div>
))}
</div>
</div>
</section>
);
};
export default TestimonialSlider;

View File

@@ -0,0 +1,38 @@
import React from "react";
interface WorkflowStep {
title: string;
subtitle: string;
}
interface WorkflowStepsProps {
steps: WorkflowStep[];
}
const WorkflowSteps: React.FC<WorkflowStepsProps> = ({ steps }) => {
return (
<div className="max-w-6xl mx-auto px-6 py-24">
<div className="grid grid-cols-1 md:grid-cols-4 gap-6">
{steps.map((step, index) => (
<div
key={step.title}
className="rounded-3xl border border-white/10 bg-white/5 p-6 flex flex-col gap-4 hover:border-brand-400/40 transition"
>
<div className="h-12 w-12 rounded-2xl bg-brand-500/10 border border-brand-500/30 flex items-center justify-center font-semibold text-brand-200 text-xl">
{index + 1}
</div>
<h3 className="text-lg font-semibold text-white leading-snug">
{step.title}
</h3>
<p className="text-sm text-white/60 leading-relaxed">
{step.subtitle}
</p>
</div>
))}
</div>
</div>
);
};
export default WorkflowSteps;

View File

@@ -0,0 +1,25 @@
export const heroMetrics = [
{ label: "Content velocity", value: "6× faster" },
{ label: "SERP lift", value: "+132%" },
{ label: "Automation coverage", value: "85%" },
];
export const workflowSteps = [
{
title: "Capture search intent",
subtitle: "Import keywords or pull from the global database with one click.",
},
{
title: "Cluster automatically",
subtitle: "Group related queries using Igny8 AI to map topical authority.",
},
{
title: "Generate briefs",
subtitle: "Turn clusters into on-brand, SEO-rich content briefs instantly.",
},
{
title: "Produce content",
subtitle: "Draft long-form content tailored to your tone, guidelines, and SERP data.",
},
];

View File

@@ -0,0 +1,42 @@
export interface NavLinkItem {
name: string;
path: string;
}
export const primaryNav: NavLinkItem[] = [
{ name: "Product", path: "/product" },
{ name: "Solutions", path: "/solutions" },
{ name: "Pricing", path: "/pricing" },
{ name: "Tour", path: "/tour" },
{ name: "Resources", path: "/resources" },
{ name: "Case Studies", path: "/case-studies" },
{ name: "Partners", path: "/partners" },
];
export const footerNavGroups: { title: string; links: NavLinkItem[] }[] = [
{
title: "Platform",
links: [
{ name: "Planner", path: "/product#planner" },
{ name: "Writer", path: "/product#writer" },
{ name: "Automation", path: "/product#automation" },
],
},
{
title: "Company",
links: [
{ name: "Case Studies", path: "/case-studies" },
{ name: "Partners", path: "/partners" },
{ name: "Contact", path: "/contact" },
],
},
{
title: "Resources",
links: [
{ name: "Help Center", path: "/resources#help" },
{ name: "Documentation", path: "/resources#docs" },
{ name: "Partner Program", path: "/partners" },
],
},
];

View File

@@ -0,0 +1,31 @@
export interface Testimonial {
quote: string;
name: string;
title: string;
company: string;
}
export const testimonials: Testimonial[] = [
{
quote:
"Igny8 replaced four tools for our content team. We now go from keywords to published content in hours, not weeks.",
name: "Maria Lopez",
title: "Head of Content",
company: "ScaleOps",
},
{
quote:
"Cluster automation plus AI writing gave us a 3× lift in organic traffic. Igny8 is an unfair advantage.",
name: "James Patel",
title: "SEO Director",
company: "BrightOrbit",
},
{
quote:
"From briefs to images, everything is automated. Our clients feel the impact every single month.",
name: "Lena Morris",
title: "Agency Founder",
company: "Northbeam Digital",
},
];

View File

@@ -0,0 +1,22 @@
import React from "react";
import ReactDOM from "react-dom/client";
import { BrowserRouter } from "react-router-dom";
import MarketingApp from "./MarketingApp";
import "../styles/global.css";
const container = document.getElementById("root");
if (!container) {
throw new Error("Marketing root element not found");
}
const root = ReactDOM.createRoot(container);
root.render(
<React.StrictMode>
<BrowserRouter>
<MarketingApp />
</BrowserRouter>
</React.StrictMode>
);

View File

@@ -0,0 +1,158 @@
import React, { useState } from "react";
import { Link, useLocation } from "react-router-dom";
import { primaryNav, footerNavGroups } from "../data/navLinks";
import { Bars3Icon, XMarkIcon } from "@heroicons/react/24/outline";
interface MarketingLayoutProps {
children: React.ReactNode;
}
const MarketingLayout: React.FC<MarketingLayoutProps> = ({ children }) => {
const [mobileOpen, setMobileOpen] = useState(false);
const location = useLocation();
const toggleMobile = () => setMobileOpen((prev) => !prev);
const closeMobile = () => setMobileOpen(false);
return (
<div className="min-h-screen flex flex-col bg-[#090E1A] text-white">
<header className="sticky top-0 z-[1100] backdrop-blur-xl bg-slate-950/70 border-b border-white/10">
<div className="max-w-6xl mx-auto px-6 py-4 flex items-center justify-between">
<Link to="/" className="flex items-center gap-3" onClick={closeMobile}>
<span className="h-10 w-10 rounded-xl bg-gradient-to-br from-brand-400 to-brand-600 flex items-center justify-center text-lg font-bold">
IG
</span>
<div className="flex flex-col leading-tight">
<span className="font-semibold tracking-wide text-white uppercase">
Igny8
</span>
<span className="text-xs text-white/60">AI growth engine</span>
</div>
</Link>
<nav className="hidden lg:flex items-center gap-8 text-sm font-medium">
{primaryNav.map((link) => {
const isActive = location.pathname === link.path;
return (
<Link
key={link.name}
to={link.path}
className={`transition hover:text-brand-200 ${isActive ? "text-brand-200" : "text-white/70"}`}
>
{link.name}
</Link>
);
})}
</nav>
<div className="hidden lg:flex items-center gap-4">
<a
href="https://app.igny8.com/login"
className="text-sm font-medium text-white/70 hover:text-white transition"
>
Log in
</a>
<a
href="https://app.igny8.com/signup"
className="inline-flex items-center justify-center rounded-full bg-brand-500 hover:bg-brand-400 px-5 py-2 text-sm font-semibold transition"
>
Start Free
</a>
</div>
<button
className="lg:hidden inline-flex items-center justify-center rounded-lg border border-white/10 p-2 text-white/80"
onClick={toggleMobile}
aria-label="Toggle navigation"
>
{mobileOpen ? <XMarkIcon className="h-6 w-6" /> : <Bars3Icon className="h-6 w-6" />}
</button>
</div>
{mobileOpen && (
<div className="lg:hidden border-t border-white/10 bg-slate-950/95 backdrop-blur-xl">
<nav className="px-6 py-4 flex flex-col gap-3">
{primaryNav.map((link) => (
<Link
key={link.name}
to={link.path}
onClick={closeMobile}
className="text-sm font-medium text-white/80 hover:text-white transition"
>
{link.name}
</Link>
))}
</nav>
<div className="px-6 pb-6 flex flex-col gap-3">
<a
href="https://app.igny8.com/login"
className="text-sm font-medium text-white/70 hover:text-white transition"
onClick={closeMobile}
>
Log in
</a>
<a
href="https://app.igny8.com/signup"
className="inline-flex items-center justify-center rounded-full bg-brand-500 hover:bg-brand-400 px-5 py-2 text-sm font-semibold transition"
onClick={closeMobile}
>
Start Free
</a>
</div>
</div>
)}
</header>
<main className="flex-1">{children}</main>
<footer className="bg-slate-950 border-t border-white/10">
<div className="max-w-6xl mx-auto px-6 py-16 grid grid-cols-1 md:grid-cols-4 gap-12">
<div className="space-y-4">
<Link to="/" className="inline-flex items-center gap-3">
<span className="h-10 w-10 rounded-xl bg-gradient-to-br from-brand-400 to-brand-600 flex items-center justify-center text-lg font-bold">
IG
</span>
<div className="flex flex-col leading-tight">
<span className="font-semibold tracking-wide text-white uppercase">
Igny8
</span>
<span className="text-xs text-white/60">
AI + SEO automation suite
</span>
</div>
</Link>
<p className="text-sm text-white/60 max-w-xs">
Automate keyword intelligence, clustering, content production, and image creation in one unified growth engine.
</p>
<div className="text-xs text-white/40">
© {new Date().getFullYear()} Igny8 Labs. All rights reserved.
</div>
</div>
{footerNavGroups.map((group) => (
<div key={group.title}>
<h4 className="text-sm font-semibold text-white uppercase tracking-wide mb-4">
{group.title}
</h4>
<ul className="space-y-3 text-sm text-white/60">
{group.links.map((link) => (
<li key={link.name}>
<Link to={link.path} className="hover:text-white transition">
{link.name}
</Link>
</li>
))}
</ul>
</div>
))}
</div>
<div className="border-t border-white/10 py-6 px-6 text-center text-xs text-white/30">
Built for marketers who automate growth with AI.
</div>
</footer>
</div>
);
};
export default MarketingLayout;

View File

@@ -0,0 +1,136 @@
import React from "react";
import SectionHeading from "../components/SectionHeading";
import CTASection from "../components/CTASection";
const caseStudies = [
{
company: "Lumen Publishing",
headline: "From 40 to 220 articles/month with 3× SERP visibility.",
metrics: [
{ label: "Organic traffic", value: "+210%" },
{ label: "Time-to-publish", value: "-58%" },
{ label: "Cost per article", value: "-34%" },
],
summary:
"Publisher running 6 niche brands used Igny8 to centralize research, briefs, and AI-assisted writing. Automation recipes ensured every keyword moved to published content with minimal handoff friction.",
image: "case-lumen.png",
},
{
company: "Northbeam Digital",
headline: "Agency tripled client output without adding headcount.",
metrics: [
{ label: "Client satisfaction", value: "98%" },
{ label: "Deliverables/mo", value: "+175%" },
{ label: "Margin lift", value: "+22%" },
],
summary:
"Multi-client agency adopted Igny8 to standardize workflows, automate reporting, and launch custom Thinker playbooks. Teams now produce keyword research, content, and images for 20+ clients simultaneously.",
image: "case-northbeam.png",
},
{
company: "Arcadia SaaS",
headline: "In-house team built a 7-stage automation pipeline.",
metrics: [
{ label: "New keywords ranked", value: "1,040" },
{ label: "Automation coverage", value: "82%" },
{ label: "Time saved monthly", value: "120 hrs" },
],
summary:
"Arcadia used Igny8 to align SEO, product marketing, and design. Thinker libraries ensured every asset matched product messaging; automation pushed approved content directly into WordPress and HubSpot.",
image: "case-arcadia.png",
},
];
const CaseStudies: React.FC = () => {
return (
<div className="bg-[#050913] text-white">
<section className="max-w-6xl mx-auto px-6 pt-24 pb-16">
<SectionHeading
eyebrow="Proof"
title="Stories from teams automating their way to category leadership."
description="See how publishers, agencies, and SaaS companies transformed their SEO and content operations with Igny8."
/>
</section>
<section className="max-w-6xl mx-auto px-6 pb-24 space-y-12">
{caseStudies.map((cs) => (
<div
key={cs.company}
className="rounded-3xl border border-white/10 bg-white/5 p-12 grid grid-cols-1 lg:grid-cols-2 gap-12"
>
<div className="space-y-6">
<span className="text-xs uppercase tracking-[0.3em] text-white/40">
{cs.company}
</span>
<h3 className="text-2xl font-semibold text-white">{cs.headline}</h3>
<p className="text-sm text-white/70 leading-relaxed">{cs.summary}</p>
<div className="grid grid-cols-3 gap-4">
{cs.metrics.map((metric) => (
<div
key={metric.label}
className="rounded-2xl border border-white/10 bg-white/5 p-4 text-center space-y-2"
>
<div className="text-xl font-semibold text-white">
{metric.value}
</div>
<div className="text-xs uppercase tracking-[0.2em] text-white/40">
{metric.label}
</div>
</div>
))}
</div>
</div>
<div className="rounded-3xl border border-white/10 bg-slate-900 overflow-hidden">
<img
src={`/marketing/images/${cs.image}`}
alt={`${cs.company} case study`}
className="w-full h-full object-cover"
/>
</div>
</div>
))}
</section>
<section className="bg-slate-950/70 border-y border-white/5">
<div className="max-w-6xl mx-auto px-6 py-24 grid grid-cols-1 md:grid-cols-2 gap-12">
<div className="space-y-4">
<h4 className="text-lg font-semibold text-white">Results you can expect</h4>
<ul className="space-y-3 text-sm text-white/70">
<li className="flex gap-3">
<span className="mt-1 size-1.5 rounded-full bg-brand-300" />
30-60 day onboarding to deploy automation and Thinker governance.
</li>
<li className="flex gap-3">
<span className="mt-1 size-1.5 rounded-full bg-brand-300" />
3-5× increase in content throughput without sacrificing editorial quality.
</li>
<li className="flex gap-3">
<span className="mt-1 size-1.5 rounded-full bg-brand-300" />
Clear ROI dashboards tying automation to revenue outcomes.
</li>
</ul>
</div>
<div className="rounded-3xl border border-white/10 bg-white/5 p-10 space-y-4 text-sm text-white/70">
<h4 className="text-lg font-semibold text-white">Customer advisory board</h4>
<p>
Igny8s roadmap is shaped by an active community of customer strategists, agency partners, and product marketers. Join and get early access to features, template libraries, and industry benchmarks.
</p>
<button className="inline-flex items-center justify-center rounded-full bg-brand-500 hover:bg-brand-400 px-5 py-2 text-sm font-semibold">
Join the CAB waitlist
</button>
</div>
</div>
</section>
<CTASection
title="Lets document your Igny8 success story next."
description="Share your goals and well map an automation blueprint specific to your team, then track and celebrate the wins together."
primaryCta={{ label: "Book strategy session", href: "/contact" }}
secondaryCta={{ label: "Download case study pack", href: "/resources" }}
/>
</div>
);
};
export default CaseStudies;

View File

@@ -0,0 +1,118 @@
import React from "react";
import SectionHeading from "../components/SectionHeading";
import CTASection from "../components/CTASection";
const Contact: React.FC = () => {
return (
<div className="bg-[#050913] text-white">
<section className="max-w-4xl mx-auto px-6 pt-24 pb-12">
<SectionHeading
eyebrow="Contact"
title="Talk with an Igny8 strategist."
description="Share your goals, current stack, and timeline. Well map automation opportunities, project ROI, and plan your launch."
/>
</section>
<section className="max-w-5xl mx-auto px-6 pb-24 grid grid-cols-1 lg:grid-cols-2 gap-12">
<form className="rounded-3xl border border-white/10 bg-white/5 p-10 space-y-6">
<div className="grid grid-cols-1 sm:grid-cols-2 gap-4">
<label className="flex flex-col gap-2 text-sm text-white/70">
First name
<input
type="text"
placeholder="Alex"
className="rounded-xl border border-white/15 bg-slate-950/60 px-4 py-3 text-sm text-white placeholder:text-white/40 focus:outline-none focus:border-brand-400"
/>
</label>
<label className="flex flex-col gap-2 text-sm text-white/70">
Last name
<input
type="text"
placeholder="Rivera"
className="rounded-xl border border-white/15 bg-slate-950/60 px-4 py-3 text-sm text-white placeholder:text-white/40 focus:outline-none focus:border-brand-400"
/>
</label>
</div>
<label className="flex flex-col gap-2 text-sm text-white/70">
Work email
<input
type="email"
placeholder="you@company.com"
className="rounded-xl border border-white/15 bg-slate-950/60 px-4 py-3 text-sm text-white placeholder:text-white/40 focus:outline-none focus:border-brand-400"
/>
</label>
<label className="flex flex-col gap-2 text-sm text-white/70">
Company
<input
type="text"
placeholder="Company name"
className="rounded-xl border border-white/15 bg-slate-950/60 px-4 py-3 text-sm text-white placeholder:text-white/40 focus:outline-none focus:border-brand-400"
/>
</label>
<label className="flex flex-col gap-2 text-sm text-white/70">
How can we help?
<textarea
rows={4}
placeholder="Tell us about your current workflow, challenges, and goals."
className="rounded-xl border border-white/15 bg-slate-950/60 px-4 py-3 text-sm text-white placeholder:text-white/40 focus:outline-none focus:border-brand-400 resize-none"
/>
</label>
<button
type="submit"
className="inline-flex items-center justify-center rounded-full bg-brand-500 hover:bg-brand-400 px-6 py-3 text-sm font-semibold"
>
Book strategy call
</button>
</form>
<div className="space-y-8">
<div className="rounded-3xl border border-white/10 bg-white/5 p-8 space-y-4 text-sm text-white/70">
<h3 className="text-lg font-semibold text-white">Calendly placeholder</h3>
<div className="aspect-[4/3] rounded-2xl border border-white/10 bg-slate-900 flex items-center justify-center text-xs text-white/40">
Embed Calendly iframe here
</div>
<p>
Prefer async? Email us at{" "}
<a href="mailto:hello@igny8.com" className="text-brand-200 hover:text-brand-100">
hello@igny8.com
</a>{" "}
or join our community Slack.
</p>
</div>
<div className="rounded-3xl border border-white/10 bg-white/5 p-8 space-y-4">
<h3 className="text-lg font-semibold text-white">Support perks</h3>
<ul className="space-y-3 text-sm text-white/70">
<li className="flex gap-3">
<span className="mt-1 size-1.5 rounded-full bg-brand-300" />
24-hour response time on all Launch+ plans.
</li>
<li className="flex gap-3">
<span className="mt-1 size-1.5 rounded-full bg-brand-300" />
Dedicated success architect for Scale and Enterprise.
</li>
<li className="flex gap-3">
<span className="mt-1 size-1.5 rounded-full bg-brand-300" />
Migration services when replacing legacy content stacks.
</li>
</ul>
</div>
</div>
</section>
<CTASection
title="Need instant access?"
description="Start a free trial to explore Igny8 in minutes—no credit card, no setup required."
primaryCta={{ label: "Start free trial", href: "https://app.igny8.com/signup" }}
secondaryCta={{ label: "Visit help center", href: "/resources" }}
/>
</div>
);
};
export default Contact;

View File

@@ -0,0 +1,162 @@
import React from "react";
import {
BoltIcon,
SparklesIcon,
ChartBarIcon,
PhotoIcon,
} from "@heroicons/react/24/outline";
import HeroSection from "../components/HeroSection";
import MetricsBar from "../components/MetricsBar";
import { heroMetrics, workflowSteps } from "../data/metrics";
import LogoCloud from "../components/LogoCloud";
import WorkflowSteps from "../components/WorkflowSteps";
import FeatureGrid from "../components/FeatureGrid";
import SectionHeading from "../components/SectionHeading";
import TestimonialSlider from "../components/TestimonialSlider";
import CTASection from "../components/CTASection";
const Home: React.FC = () => {
return (
<div className="bg-[#050913]">
<HeroSection
image="hero-dashboard.png"
headline="Scale SEO content from keyword discovery to AI-crafted outputs."
subheadline="Igny8 automates your entire growth workflow—from market intelligence to publishing-ready content and imagery—so your team builds momentum, not spreadsheets."
primaryCta={{
label: "Start free trial",
href: "https://app.igny8.com/signup",
}}
secondaryCta={{
label: "Book a live tour",
href: "/tour",
}}
/>
<MetricsBar metrics={heroMetrics} />
<LogoCloud />
<section className="max-w-6xl mx-auto px-6 py-24 space-y-12">
<SectionHeading
eyebrow="Unified growth engine"
title="Four deeply connected products deliver one end-to-end workflow."
description="Every step compounds the next—from keyword intelligence to AI-powered writing and design. Automations keep your pipeline moving while strategy stays in your control."
/>
<FeatureGrid
features={[
{
title: "Planner · Market intelligence",
description:
"Tap into a living keyword database, cluster at scale, and prioritize opportunities with AI scoring. Build topical maps in minutes, not days.",
icon: <ChartBarIcon className="h-6 w-6" />,
link: { label: "See Planner", href: "/product#planner" },
},
{
title: "Writer · AI content studio",
description:
"Generate briefs, long-form articles, and on-brand messaging with contextual SERP data, tone controls, and collaboration tools.",
icon: <SparklesIcon className="h-6 w-6" />,
link: { label: "See Writer", href: "/product#writer" },
},
{
title: "Thinker · Strategy OS",
description:
"Centralize prompts, author voices, and brand playbooks. Sync guidelines directly into every piece of content Igny8 creates.",
icon: <BoltIcon className="h-6 w-6" />,
link: { label: "See Thinker", href: "/product#thinker" },
},
{
title: "Automation · Always-on execution",
description:
"Orchestrate keywords to ideas, tasks to content, and assets to WordPress in automated cycles—customized to your cadence.",
icon: <PhotoIcon className="h-6 w-6" />,
link: { label: "See Automation", href: "/product#automation" },
},
]}
/>
</section>
<WorkflowSteps steps={workflowSteps} />
<section className="max-w-6xl mx-auto px-6 py-24 grid grid-cols-1 lg:grid-cols-2 gap-16 items-center">
<div className="space-y-6">
<SectionHeading
eyebrow="Full visibility"
title="See the entire pipeline—from keyword intake to published content—in one dashboard."
description="Monitor velocity, quality, and automation coverage across every site. Use filters to dive into sectors, teams, and campaigns. Igny8 keeps leadership confident and operations aligned."
align="left"
/>
<ul className="space-y-4 text-sm text-white/70">
<li className="flex gap-3">
<span className="mt-1 size-2 rounded-full bg-brand-300" />
Real-time metrics on keyword additions, clusters formed, briefs generated, and content shipped.
</li>
<li className="flex gap-3">
<span className="mt-1 size-2 rounded-full bg-brand-300" />
Drill into automation logs to understand every AI action, approvals, and handoffs.
</li>
<li className="flex gap-3">
<span className="mt-1 size-2 rounded-full bg-brand-300" />
Export-ready visuals for leadership updates and client reporting.
</li>
</ul>
</div>
<div className="relative">
<div className="rounded-3xl border border-white/10 bg-white/5 overflow-hidden">
<img
src="/marketing/images/workflow-overview.png"
alt="Workflow overview"
className="w-full h-full object-cover"
/>
</div>
<div className="absolute -bottom-8 -left-8 md:-left-12 bg-slate-950/80 border border-white/10 rounded-3xl p-6 w-64">
<h4 className="text-sm font-semibold text-white/80">Automation snapshot</h4>
<p className="text-xs text-white/60 mt-2">
87 keywords 63 briefs 48 articles 48 image sets generated this week.
</p>
</div>
</div>
</section>
<TestimonialSlider />
<section className="max-w-6xl mx-auto px-6 py-24 grid grid-cols-1 lg:grid-cols-3 gap-8">
{[
{
title: "Deploy anywhere",
description:
"Publish directly to WordPress with Igny8 automations or export polished assets to CMS, docs, or project tools.",
},
{
title: "Collaborate cross-team",
description:
"Give SEO, content, and creative teams a shared workspace—complete with approvals, version history, and assignments.",
},
{
title: "Stay on-brand and compliant",
description:
"Govern prompts, author voices, and AI usage with centralized policies and audit-ready histories.",
},
].map((item) => (
<div
key={item.title}
className="rounded-3xl border border-white/10 bg-white/5 p-8 space-y-4"
>
<h3 className="text-lg font-semibold text-white">{item.title}</h3>
<p className="text-sm text-white/60 leading-relaxed">{item.description}</p>
</div>
))}
</section>
<CTASection
title="Ready to orchestrate SEO, content, and creative in one AI engine?"
description="Launch Igny8 in minutes. Start automating your workflow, or book a white-glove onboarding session with our team."
primaryCta={{ label: "Start free trial", href: "https://app.igny8.com/signup" }}
secondaryCta={{ label: "Talk to sales", href: "/contact" }}
/>
</div>
);
};
export default Home;

View File

@@ -0,0 +1,109 @@
import React from "react";
import SectionHeading from "../components/SectionHeading";
import CTASection from "../components/CTASection";
const tiers = [
{
title: "Certified Agency",
benefits: [
"Co-branded marketing assets and listing in partner directory.",
"Dedicated partner manager and quarterly business reviews.",
"Access to automation templates and think tank sessions.",
],
},
{
title: "Technology Partner",
benefits: [
"API access, sandbox environments, and technical documentation.",
"Joint integration roadmap planning and go-to-market support.",
"Shared lead programs and launch promotion campaigns.",
],
},
{
title: "Affiliate & Advocate",
benefits: [
"Performance-based revenue share with lifetime attribution.",
"Early access to new features and partner community channels.",
"Custom reporting dashboards to track referred accounts.",
],
},
];
const Partners: React.FC = () => {
return (
<div className="bg-[#050913] text-white">
<section className="max-w-6xl mx-auto px-6 pt-24 pb-16">
<SectionHeading
eyebrow="Partners"
title="Grow faster together—build services and solutions on Igny8."
description="Join our partner ecosystem to co-create automations, deliver measurable results, and co-market AI-driven success stories."
/>
</section>
<section className="max-w-6xl mx-auto px-6 pb-24 grid grid-cols-1 md:grid-cols-3 gap-8">
{tiers.map((tier) => (
<div
key={tier.title}
className="rounded-3xl border border-white/10 bg-white/5 p-8 flex flex-col gap-5"
>
<span className="text-xs uppercase tracking-[0.3em] text-white/40">
Program
</span>
<h3 className="text-xl font-semibold text-white">{tier.title}</h3>
<ul className="space-y-3 text-sm text-white/70">
{tier.benefits.map((benefit) => (
<li key={benefit} className="flex gap-3">
<span className="mt-1 size-1.5 rounded-full bg-brand-300" />
{benefit}
</li>
))}
</ul>
</div>
))}
</section>
<section className="bg-slate-950/70 border-y border-white/5">
<div className="max-w-6xl mx-auto px-6 py-24 grid grid-cols-1 lg:grid-cols-2 gap-12">
<div className="space-y-6">
<SectionHeading
eyebrow="API & integrations"
title="Embed Igny8 intelligence into your workflows."
description="Use Igny8 APIs and webhooks to power your own products, analytics, or client portals. Automate keyword ingestion, content creation, asset delivery, and reporting."
align="left"
/>
<div className="rounded-3xl border border-white/10 bg-white/5 p-6 text-sm text-white/60">
API docs placeholder (download at `/marketing/images/api-docs.png`, 1100×720).
</div>
</div>
<div className="rounded-3xl border border-white/10 bg-white/5 p-10 space-y-6">
<h4 className="text-lg font-semibold text-white">Partner resources</h4>
<ul className="space-y-4 text-sm text-white/70">
<li className="flex gap-3">
<span className="mt-1 size-1.5 rounded-full bg-brand-300" />
Sales playbooks, ROI calculators, and demo environments.
</li>
<li className="flex gap-3">
<span className="mt-1 size-1.5 rounded-full bg-brand-300" />
Shared Slack channels with Igny8 product and marketing teams.
</li>
<li className="flex gap-3">
<span className="mt-1 size-1.5 rounded-full bg-brand-300" />
Quarterly partner labs to showcase launches and integrations.
</li>
</ul>
</div>
</div>
</section>
<CTASection
title="Become an Igny8 partner."
description="Apply today to co-create automations, launch integrations, and grow with our shared go-to-market engine."
primaryCta={{ label: "Apply now", href: "/contact" }}
secondaryCta={{ label: "Download partner deck", href: "/marketing/images/partner-program.png" }}
/>
</div>
);
};
export default Partners;

View File

@@ -0,0 +1,214 @@
import React from "react";
import SectionHeading from "../components/SectionHeading";
import CTASection from "../components/CTASection";
const tiers = [
{
name: "Launch",
price: "$199",
cadence: "per month",
description: "For emerging teams launching AI-assisted content operations.",
features: [
"Up to 5 team seats",
"Planner + Writer modules",
"3 automation recipes",
"2,500 AI credits / month",
"Email support",
],
badge: "Most popular for startups",
},
{
name: "Scale",
price: "$499",
cadence: "per month",
description: "For growing organizations automating multi-site workflows.",
features: [
"Unlimited seats",
"Planner + Writer + Thinker",
"All automation recipes",
"10,000 AI credits / month",
"Priority support & onboarding",
],
featured: true,
badge: "Best value",
},
{
name: "Enterprise",
price: "Lets talk",
cadence: "",
description: "For publishers and agencies needing advanced governance.",
features: [
"Custom SLAs and SSO",
"Private automation recipes",
"Dedicated success architect",
"Credit scaling & on-prem options",
"Security reviews & compliance support",
],
badge: "Tailored programs",
},
];
const featureMatrix = [
{
feature: "Global keyword database",
launch: true,
scale: true,
enterprise: true,
},
{
feature: "AI clustering & topical maps",
launch: "10k keywords",
scale: "100k keywords",
enterprise: "Unlimited",
},
{
feature: "Automation recipes",
launch: "3 core",
scale: "All 12",
enterprise: "Custom",
},
{
feature: "WordPress publishing",
launch: "Manual",
scale: "Automated",
enterprise: "Automated + custom CMS",
},
{
feature: "Support",
launch: "Email + docs",
scale: "Priority + onboarding",
enterprise: "Dedicated CSM",
},
];
const Pricing: React.FC = () => {
return (
<div className="bg-[#050913] text-white">
<section className="max-w-6xl mx-auto px-6 pt-24 pb-16 space-y-8">
<SectionHeading
eyebrow="Pricing"
title="Simple plans that scale with your automation ambitions."
description="Transparent pricing for the entire Igny8 platform. No seat-based penalties—every teammate can collaborate freely."
/>
<div className="rounded-3xl border border-white/10 bg-white/5 p-6 text-sm text-white/60 text-center">
Looking to migrate from an existing AI content stack? Ask about our migration credit and onboarding accelerator.
</div>
</section>
<section className="max-w-6xl mx-auto px-6 pb-24 grid grid-cols-1 lg:grid-cols-3 gap-8">
{tiers.map((tier) => (
<div
key={tier.name}
className={`relative rounded-3xl border ${tier.featured ? "border-brand-500/60 bg-brand-500/10 shadow-[0_0_70px_rgba(59,130,246,0.25)]" : "border-white/10 bg-white/5"} p-10 flex flex-col gap-6`}
>
{tier.badge && (
<span className="inline-flex items-center self-start rounded-full border border-white/15 bg-white/10 px-4 py-1 text-[11px] uppercase tracking-[0.25em] text-brand-100">
{tier.badge}
</span>
)}
<div>
<h3 className="text-2xl font-semibold text-white">{tier.name}</h3>
<p className="text-sm text-white/60 mt-2">{tier.description}</p>
</div>
<div className="text-4xl font-semibold text-white">
{tier.price}
{tier.cadence && (
<span className="text-sm font-normal text-white/50 ml-2">
{tier.cadence}
</span>
)}
</div>
<ul className="space-y-3 text-sm text-white/70">
{tier.features.map((feature) => (
<li key={feature} className="flex gap-3">
<span className="mt-1 size-1.5 rounded-full bg-brand-300" />
{feature}
</li>
))}
</ul>
<div className="pt-4">
<a
href={tier.name === "Enterprise" ? "/contact" : "https://app.igny8.com/signup"}
className={`inline-flex w-full items-center justify-center rounded-full px-6 py-3 text-sm font-semibold transition ${
tier.featured
? "bg-white text-slate-950 hover:bg-brand-100"
: "border border-white/30 text-white hover:border-white/60"
}`}
>
{tier.name === "Enterprise" ? "Contact sales" : "Start free trial"}
</a>
</div>
</div>
))}
</section>
<section className="max-w-6xl mx-auto px-6 pb-24 space-y-10">
<h3 className="text-xl font-semibold text-white">
Compare plan capabilities
</h3>
<div className="overflow-hidden rounded-3xl border border-white/10 bg-white/5">
<table className="min-w-full text-sm text-white/70">
<thead className="bg-white/5 text-white/60 uppercase text-xs tracking-[0.3em]">
<tr>
<th className="px-6 py-4 text-left">Capability</th>
<th className="px-6 py-4 text-center">Launch</th>
<th className="px-6 py-4 text-center">Scale</th>
<th className="px-6 py-4 text-center">Enterprise</th>
</tr>
</thead>
<tbody>
{featureMatrix.map((row, index) => (
<tr key={row.feature} className={index % 2 === 0 ? "bg-white/3" : ""}>
<td className="px-6 py-5 text-white font-medium">{row.feature}</td>
<td className="px-6 py-5 text-center">
{row.launch === true ? "Included" : row.launch}
</td>
<td className="px-6 py-5 text-center">
{row.scale === true ? "Included" : row.scale}
</td>
<td className="px-6 py-5 text-center">
{row.enterprise === true ? "Included" : row.enterprise}
</td>
</tr>
))}
</tbody>
</table>
</div>
</section>
<section className="bg-slate-950/70 border-y border-white/5">
<div className="max-w-6xl mx-auto px-6 py-24 grid grid-cols-1 md:grid-cols-2 gap-12 text-sm text-white/70">
<div className="space-y-4">
<h4 className="text-lg font-semibold text-white">
Usage-based credits explained
</h4>
<p>
Igny8 credits cover AI-generated drafts, clustering, and image creation. Monitor usage in real time from your dashboard. Credits roll over for 30 days.
</p>
<p>
Need more? Add packs instantly or set automation rules to pause when thresholds are hit.
</p>
</div>
<div className="space-y-4">
<h4 className="text-lg font-semibold text-white">
Security & compliance
</h4>
<p>
Igny8 supports granular access controls, SSO, audit logging, and data residency requests. Enterprise plans include SOC 2 documentation and custom security reviews.
</p>
</div>
</div>
</section>
<CTASection
title="Lets build a plan tailored to your content velocity goals."
description="Our team will help you forecast automation impact, map migrations, and launch Igny8 within days."
primaryCta={{ label: "Talk to sales", href: "/contact" }}
secondaryCta={{ label: "Start free trial", href: "https://app.igny8.com/signup" }}
/>
</div>
);
};
export default Pricing;

View File

@@ -0,0 +1,169 @@
import React from "react";
import SectionHeading from "../components/SectionHeading";
import CTASection from "../components/CTASection";
const Product: React.FC = () => {
return (
<div className="bg-[#050913] text-white">
<section className="max-w-6xl mx-auto px-6 pt-24 pb-16">
<div className="grid grid-cols-1 lg:grid-cols-2 gap-16 items-center">
<div className="space-y-6">
<SectionHeading
eyebrow="Platform overview"
title="One operating system for keyword intelligence, AI content production, and automation."
description="Planner, Writer, Thinker, and Automation act as one cohesive system. Each module is powerful on its own—together they deliver a compounding growth engine."
align="left"
/>
<div className="rounded-3xl border border-white/10 bg-white/5 p-6 space-y-4 text-sm text-white/70">
<div className="flex items-center justify-between text-white">
<span className="font-semibold">Modules included</span>
<span>4 products · 12 automation recipes</span>
</div>
<ul className="space-y-3">
{[
"Planner → Find, cluster, and prioritize keywords with AI scoring and SERP insights.",
"Writer → Generate on-brand long-form content from briefs with tone, audience, and compliance controls.",
"Thinker → Manage prompts, author profiles, and brand playbooks that feed every generation.",
"Automation → Run scheduled workflows that move keywords to ideas, tasks, content, and images automatically.",
].map((point) => (
<li key={point} className="flex gap-3">
<span className="mt-1 size-2 rounded-full bg-brand-300" />
{point}
</li>
))}
</ul>
</div>
</div>
<div className="relative">
<div className="rounded-3xl border border-white/10 bg-white/5 overflow-hidden">
<img
src="/marketing/images/planner-keywords.png"
alt="Planner module screenshot"
className="w-full h-full object-cover"
/>
</div>
</div>
</div>
</section>
<section className="max-w-6xl mx-auto px-6 py-24 space-y-12">
<SectionHeading
eyebrow="Module deep dive"
title="Everything you need to research, create, deploy, and measure."
description="We designed Igny8 so your team can centralize strategy, remove bottlenecks, and trust AI with execution while maintaining full visibility."
/>
<div className="grid grid-cols-1 lg:grid-cols-2 gap-10">
{[
{
title: "Planner",
copy: [
"Global keyword database with opportunity scoring, SERP overlays, and traffic estimates.",
"Drag-and-drop topical mapping. Auto-cluster thousands of terms in minutes.",
"Alerts for emerging opportunities, competitive gaps, and seasonality shifts.",
],
image: "planner-strategy.png",
},
{
title: "Writer",
copy: [
"AI briefs with outlines, talking points, and internal link suggestions.",
"Long-form drafts aligned to your brand voice, compliance rules, and target SERP.",
"Editorial workspace with comments, approvals, and WordPress publishing.",
],
image: "writer-editor.png",
},
{
title: "Thinker",
copy: [
"Centralize prompts, tone profiles, and persona guidance.",
"Version control for AI instructions and playbooks across teams.",
"Governance dashboards showing who generated what, when, and with which inputs.",
],
image: "thinker-prompts.png",
},
{
title: "Automation",
copy: [
"Schedule keywords → ideas → tasks → content → images in fully automated cycles.",
"Trigger workflows based on SERP movements, pipeline bottlenecks, or credit availability.",
"Monitor every automation with audit logs and manual override controls.",
],
image: "automation-timeline.png",
},
].map((module) => (
<div
key={module.title}
className="rounded-3xl border border-white/10 bg-white/5 p-10 flex flex-col gap-6"
>
<div className="flex items-center gap-3 text-sm uppercase tracking-[0.3em] text-white/40">
<span className="size-2 rounded-full bg-brand-300" />
{module.title}
</div>
<h3 className="text-2xl font-semibold text-white">{module.title} platform</h3>
<ul className="space-y-3 text-sm text-white/65">
{module.copy.map((line) => (
<li key={line} className="flex gap-3">
<span className="mt-1 size-1.5 rounded-full bg-brand-200" />
{line}
</li>
))}
</ul>
<div className="rounded-2xl border border-white/10 bg-slate-900 overflow-hidden">
<img
src={`/marketing/images/${module.image}`}
alt={`${module.title} module`}
className="w-full h-full object-cover"
/>
</div>
</div>
))}
</div>
</section>
<section className="max-w-6xl mx-auto px-6 py-24">
<div className="rounded-3xl border border-white/10 bg-gradient-to-br from-white/5 via-transparent to-slate-950/60 p-10 md:p-16 flex flex-col lg:flex-row gap-16">
<div className="flex-1 space-y-6">
<SectionHeading
eyebrow="Automation timeline"
title="Visualize every automated handoff—and take control at any point."
description="Igny8 timelines map dependencies across your workflow so you can see how AI is powering each deliverable. Pause or accelerate with confidence."
align="left"
/>
<div className="grid grid-cols-1 md:grid-cols-2 gap-6 text-sm text-white/70">
{[
"Real-time status for every automation recipe with success rates and manual interventions logged.",
"Smart recommendations to rebalance workloads, add credits, or adjust prompts when performance shifts.",
"Exportable reports to share results with leadership or clients in one click.",
"Granular permissions so teams can automate while leadership maintains oversight.",
].map((item) => (
<div key={item} className="flex gap-3">
<span className="mt-1 size-2 rounded-full bg-brand-300" />
{item}
</div>
))}
</div>
</div>
<div className="flex-1">
<div className="rounded-3xl border border-white/10 bg-white/5 overflow-hidden">
<img
src="/marketing/images/automation-timeline.png"
alt="Automation timeline"
className="w-full h-full object-cover"
/>
</div>
</div>
</div>
</section>
<CTASection
title="Unify search intelligence, AI content, and automation in one platform."
description="Start with 14 days on us or book a bespoke walkthrough with our team to map Igny8 to your workflows."
primaryCta={{ label: "Start your trial", href: "https://app.igny8.com/signup" }}
secondaryCta={{ label: "Book a tour", href: "/tour" }}
/>
</div>
);
};
export default Product;

View File

@@ -0,0 +1,143 @@
import React from "react";
import SectionHeading from "../components/SectionHeading";
import CTASection from "../components/CTASection";
const articles = [
{
title: "AI + SEO: Building topical authority at scale",
description:
"How Igny8 customers map thousands of keywords into authoritative clusters that rank faster.",
date: "October 2025",
},
{
title: "Automating the content supply chain",
description:
"A playbook for connecting keyword research, briefs, writing, and imagery without human bottlenecks.",
date: "September 2025",
},
{
title: "Measuring AI-generated content quality",
description:
"Frameworks for tracking performance, editorial standards, and compliance across large AI programs.",
date: "August 2025",
},
];
const webinars = [
{
title: "Building an automation-first content ops team",
description: "Live strategy session with Igny8 specialists and customer panel.",
date: "November 21, 2025",
},
{
title: "From keywords to conversions: dashboards that prove ROI",
description: "Hands-on walkthrough of Igny8 dashboards and reporting exports.",
date: "On-demand replay",
},
];
const Resources: React.FC = () => {
return (
<div className="bg-[#050913] text-white">
<section className="max-w-6xl mx-auto px-6 pt-24 pb-16 space-y-6">
<SectionHeading
eyebrow="Resources"
title="Insights, playbooks, and events for AI-led growth teams."
description="Stay ahead of the curve with strategic content, live sessions, and practical guides built by the Igny8 team."
/>
</section>
<section className="max-w-6xl mx-auto px-6 pb-24 grid grid-cols-1 md:grid-cols-3 gap-6">
{articles.map((article) => (
<article
key={article.title}
className="rounded-3xl border border-white/10 bg-white/5 p-8 flex flex-col gap-6"
>
<span className="text-xs uppercase tracking-[0.3em] text-white/40">
{article.date}
</span>
<h3 className="text-xl font-semibold text-white">{article.title}</h3>
<p className="text-sm text-white/70 leading-relaxed">{article.description}</p>
<div className="rounded-2xl border border-white/10 bg-slate-900 h-40 flex items-center justify-center text-xs text-white/40">
Article cover placeholder (800×600) /marketing/images/resource-hero.png
</div>
</article>
))}
</section>
<section className="bg-slate-950/70 border-y border-white/5">
<div className="max-w-6xl mx-auto px-6 py-24 grid grid-cols-1 md:grid-cols-2 gap-8">
{webinars.map((webinar) => (
<div
key={webinar.title}
className="rounded-3xl border border-white/10 bg-white/5 p-8 flex flex-col gap-4"
>
<span className="text-xs uppercase tracking-[0.3em] text-white/40">
{webinar.date}
</span>
<h3 className="text-lg font-semibold text-white">{webinar.title}</h3>
<p className="text-sm text-white/70">{webinar.description}</p>
<button className="inline-flex items-center justify-center rounded-full bg-brand-500 hover:bg-brand-400 px-5 py-2 text-sm font-semibold">
Save my seat
</button>
</div>
))}
</div>
</section>
<section className="max-w-6xl mx-auto px-6 py-24 grid grid-cols-1 md:grid-cols-2 gap-12 items-center">
<div className="space-y-4">
<SectionHeading
eyebrow="Help center"
title="Get instant answers and product walkthroughs."
description="Dive into documentation, watch quickstart videos, or join live onboarding cohorts."
align="left"
/>
<ul className="space-y-3 text-sm text-white/70">
<li className="flex gap-3">
<span className="mt-1 size-1.5 rounded-full bg-brand-300" />
Help Center `/help`
</li>
<li className="flex gap-3">
<span className="mt-1 size-1.5 rounded-full bg-brand-300" />
Documentation `/help#docs`
</li>
<li className="flex gap-3">
<span className="mt-1 size-1.5 rounded-full bg-brand-300" />
API Reference `/partners#api`
</li>
</ul>
</div>
<div className="rounded-3xl border border-white/10 bg-white/5 p-10 space-y-6">
<h3 className="text-2xl font-semibold text-white">Join the Igny8 newsletter</h3>
<p className="text-sm text-white/60">
Monthly insights on AI, SEO, and automation. No fluffjust tactical guidance and event invites.
</p>
<form className="flex flex-col sm:flex-row gap-3">
<input
type="email"
placeholder="you@company.com"
className="flex-1 rounded-full border border-white/15 bg-slate-950/60 px-4 py-3 text-sm text-white placeholder:text-white/40 focus:outline-none focus:border-brand-400"
/>
<button
type="submit"
className="inline-flex items-center justify-center rounded-full bg-brand-500 hover:bg-brand-400 px-6 py-3 text-sm font-semibold"
>
Subscribe
</button>
</form>
</div>
</section>
<CTASection
title="Want deeper access? Join our monthly live strategy lab."
description="Reserve your seat for upcoming webinars and office hours to learn how teams automate their growth pipeline with Igny8."
primaryCta={{ label: "Reserve seat", href: "/contact" }}
secondaryCta={{ label: "Browse articles", href: "/resources" }}
/>
</div>
);
};
export default Resources;

View File

@@ -0,0 +1,148 @@
import React from "react";
import SectionHeading from "../components/SectionHeading";
import CTASection from "../components/CTASection";
const personas = [
{
name: "Publishers & Media",
pains: [
"Monthly content quotas and strict editorial standards.",
"Need faster research without sacrificing topical authority.",
"Multiple brands and verticals competing for attention.",
],
outcomes: [
"Launch keyword → content automation that protects brand voice.",
"Keep editors in control with approvals and Thinker playbooks.",
"Automate image generation and WordPress publishing by site.",
],
image: "solutions-publisher.png",
},
{
name: "Agencies & Consultancies",
pains: [
"Manual reporting and slow client deliverables.",
"Disjointed tool stack for research, writing, and visuals.",
"Scaling teams across time zones with consistent quality.",
],
outcomes: [
"Shared workspaces for each client with automation templates.",
"Real-time dashboards to prove impact and showcase velocity.",
"Reusable Thinker libraries to standardize tone and strategy.",
],
image: "solutions-agency.png",
},
{
name: "In-house Marketing Teams",
pains: [
"Demand for multi-channel content with lean resources.",
"Difficulty aligning SEO, content, and creative workflows.",
"Pressure to report results to leadership quickly.",
],
outcomes: [
"Automated pipeline from keyword intake to published content.",
"Dashboards that unite SEO, writers, designers, and leadership.",
"Insights to reallocate focus when campaigns spike or drop.",
],
image: "solutions-inhouse.png",
},
];
const Solutions: React.FC = () => {
return (
<div className="bg-[#050913] text-white">
<section className="max-w-6xl mx-auto px-6 pt-24 pb-16">
<SectionHeading
eyebrow="Solutions"
title="Designed for every team that owns growth."
description="Igny8 adapts to your operating model—agency, publisher, or in-house. Automate repetitive work, keep strategy centralized, and connect every team to outcomes."
/>
</section>
<section className="max-w-6xl mx-auto px-6 pb-24 space-y-12">
{personas.map((persona) => (
<div
key={persona.name}
className="rounded-3xl border border-white/10 bg-white/5 p-10 md:p-16 grid grid-cols-1 lg:grid-cols-3 gap-12"
>
<div className="lg:col-span-1 space-y-4">
<span className="text-xs uppercase tracking-[0.3em] text-white/50">
Persona
</span>
<h3 className="text-2xl font-semibold">{persona.name}</h3>
<div className="rounded-2xl border border-white/10 bg-slate-900 overflow-hidden">
<img
src={`/marketing/images/${persona.image}`}
alt={`${persona.name} workflow`}
className="w-full h-full object-cover"
/>
</div>
</div>
<div className="space-y-6">
<h4 className="text-sm uppercase tracking-[0.3em] text-white/40">
Pain points
</h4>
<ul className="space-y-4 text-sm text-white/70">
{persona.pains.map((pain) => (
<li key={pain} className="flex gap-3">
<span className="mt-1 size-1.5 rounded-full bg-rose-300" />
{pain}
</li>
))}
</ul>
</div>
<div className="space-y-6">
<h4 className="text-sm uppercase tracking-[0.3em] text-white/40">
Outcomes with Igny8
</h4>
<ul className="space-y-4 text-sm text-white/70">
{persona.outcomes.map((outcome) => (
<li key={outcome} className="flex gap-3">
<span className="mt-1 size-1.5 rounded-full bg-brand-300" />
{outcome}
</li>
))}
</ul>
</div>
</div>
))}
</section>
<section className="bg-slate-950/70 border-y border-white/5">
<div className="max-w-6xl mx-auto px-6 py-24 grid grid-cols-1 md:grid-cols-3 gap-8">
{[
{
metric: "3.2×",
label: "Average lift in organic traffic within 90 days.",
},
{
metric: "48%",
label: "Reduction in time-to-publish from keyword discovery.",
},
{
metric: "4 tools",
label: "Average number of point solutions replaced by Igny8.",
},
].map((item) => (
<div
key={item.metric}
className="rounded-3xl border border-white/10 bg-white/5 p-8 text-center space-y-4"
>
<div className="text-4xl font-semibold">{item.metric}</div>
<p className="text-sm text-white/60">{item.label}</p>
</div>
))}
</div>
</section>
<CTASection
title="Lets tailor Igny8 to your growth targets."
description="Book a session with our team to map Igny8 to your use cases. Well uncover ROI, automation recommendations, and the fastest path to value."
primaryCta={{ label: "Talk to sales", href: "/contact" }}
secondaryCta={{ label: "See pricing", href: "/pricing" }}
/>
</div>
);
};
export default Solutions;

View File

@@ -0,0 +1,114 @@
import React from "react";
import SectionHeading from "../components/SectionHeading";
import CTASection from "../components/CTASection";
const tourSteps = [
{
title: "Kick off in the Dashboard",
description:
"Get instant visibility into automation coverage, credit usage, and pipeline health with filters for every site and team.",
image: "tour-dash.png",
},
{
title: "Research in Planner",
description:
"Explore the global keyword graph, build clustering blueprints, and score opportunities with AI to set your roadmap.",
image: "tour-planner.png",
},
{
title: "Generate briefs and drafts in Writer",
description:
"Create detailed briefs, assign tasks, and produce on-brand drafts tuned to your tone, format, and competitive insights.",
image: "tour-writer.png",
},
{
title: "Automate delivery",
description:
"Configure recipes that move keywords to ideas, content, and imagery. Publish to WordPress or notify your CMS automatically.",
image: "tour-automation.png",
},
];
const Tour: React.FC = () => {
return (
<div className="bg-[#050913] text-white">
<section className="max-w-6xl mx-auto px-6 pt-24 pb-16 space-y-6">
<SectionHeading
eyebrow="Guided Tour"
title="Experience the entire Igny8 journey in minutes."
description="Walk through the workflow that moves market intelligence into production-ready content. Each step builds toward an automated growth flywheel."
/>
<div className="rounded-3xl border border-white/10 bg-white/5 p-8">
<div className="aspect-video rounded-2xl border border-white/10 bg-slate-900 flex items-center justify-center text-white/40 text-sm">
Video walkthrough placeholder (embed demo or Loom)
</div>
</div>
</section>
<section className="max-w-6xl mx-auto px-6 pb-24 space-y-12">
{tourSteps.map((step, index) => (
<div
key={step.title}
className={`grid grid-cols-1 lg:grid-cols-2 gap-12 items-center ${index % 2 === 1 ? "lg:flex-row-reverse" : ""}`}
>
<div className="space-y-4">
<span className="text-xs uppercase tracking-[0.3em] text-white/50">
Step {index + 1}
</span>
<h3 className="text-2xl font-semibold">{step.title}</h3>
<p className="text-sm text-white/70 leading-relaxed">{step.description}</p>
</div>
<div className="rounded-3xl border border-white/10 bg-white/5 overflow-hidden">
<img
src={`/marketing/images/${step.image}`}
alt={step.title}
className="w-full h-full object-cover"
/>
</div>
</div>
))}
</section>
<section className="bg-slate-950/70 border-y border-white/5">
<div className="max-w-6xl mx-auto px-6 py-24 space-y-10">
<SectionHeading
eyebrow="Automation recipes"
title="Pre-built workflows you can launch on day one."
description="Activate automation templates or customize them in minutes. Igny8 tracks dependencies, statuses, and handoffs."
/>
<div className="grid grid-cols-1 md:grid-cols-2 xl:grid-cols-3 gap-6 text-sm text-white/70">
{[
{ name: "Keywords → Ideas", time: "Nightly", highlight: "Targets new opportunities" },
{ name: "Ideas → Tasks", time: "Daily", highlight: "Staff writers automatically" },
{ name: "Tasks → Content", time: "Hourly", highlight: "Generate & queue drafts" },
{ name: "Content → Images", time: "On approval", highlight: "Produce branded visuals" },
{ name: "Content → WordPress", time: "Manual launch", highlight: "One-click publish" },
{ name: "SERP Win/Loss Alerts", time: "Real-time", highlight: "Trigger optimizations" },
].map((recipe) => (
<div
key={recipe.name}
className="rounded-3xl border border-white/10 bg-white/5 p-6 space-y-3"
>
<h4 className="text-base font-semibold text-white">{recipe.name}</h4>
<div className="text-xs uppercase tracking-[0.3em] text-white/40">
{recipe.time}
</div>
<p>{recipe.highlight}</p>
</div>
))}
</div>
</div>
</section>
<CTASection
title="See Igny8 in action with a live strategist."
description="Book a walkthrough and well tailor the tour to your stack, data sources, and growth targets."
primaryCta={{ label: "Book live tour", href: "/contact" }}
secondaryCta={{ label: "Start free", href: "https://app.igny8.com/signup" }}
/>
</div>
);
};
export default Tour;

View File

@@ -0,0 +1,96 @@
import React from "react";
import SectionHeading from "../components/SectionHeading";
import CTASection from "../components/CTASection";
const roadmapItems = [
{
title: "One-click workflows",
description: "Trigger keywords → ideas → drafts directly inside Planner and Writer with new automation toggles.",
},
{
title: "Schedule intelligence",
description: "Plan automation cycles by day and time with credit-aware throttling and fallback rules.",
},
{
title: "AI quality scoring",
description: "Monitor readability, compliance, and SERP alignment across AI-generated content with automated fixes.",
},
];
const Waitlist: React.FC = () => {
return (
<div className="bg-[#050913] text-white">
<section className="max-w-4xl mx-auto px-6 pt-24 pb-12">
<SectionHeading
eyebrow="Roadmap preview"
title="Get early access to upcoming Igny8 releases."
description="Were releasing a wave of automation upgrades and AI scoring tools. Join the waitlist to test features before they ship."
/>
</section>
<section className="max-w-5xl mx-auto px-6 pb-24 grid grid-cols-1 lg:grid-cols-2 gap-12">
<div className="rounded-3xl border border-white/10 bg-white/5 p-10 space-y-6">
<h3 className="text-lg font-semibold text-white">Join the waitlist</h3>
<p className="text-sm text-white/70">
Share your details and well invite you to beta cohorts with onboarding resources and direct feedback loops to our product team.
</p>
<form className="space-y-4">
<input
type="text"
placeholder="Name"
className="w-full rounded-xl border border-white/15 bg-slate-950/60 px-4 py-3 text-sm text-white placeholder:text-white/40 focus:outline-none focus:border-brand-400"
/>
<input
type="email"
placeholder="Work email"
className="w-full rounded-xl border border-white/15 bg-slate-950/60 px-4 py-3 text-sm text-white placeholder:text-white/40 focus:outline-none focus:border-brand-400"
/>
<textarea
rows={4}
placeholder="Tell us about your current workflow and why you're excited."
className="w-full rounded-xl border border-white/15 bg-slate-950/60 px-4 py-3 text-sm text-white placeholder:text-white/40 focus:outline-none focus:border-brand-400 resize-none"
/>
<button
type="submit"
className="inline-flex items-center justify-center rounded-full bg-brand-500 hover:bg-brand-400 px-6 py-3 text-sm font-semibold"
>
Join waitlist
</button>
</form>
</div>
<div className="space-y-6">
<div className="rounded-3xl border border-white/10 bg-white/5 p-8 space-y-4">
<h4 className="text-lg font-semibold text-white">Whats coming</h4>
<ul className="space-y-3 text-sm text-white/70">
{roadmapItems.map((item) => (
<li key={item.title} className="flex gap-3">
<span className="mt-1 size-1.5 rounded-full bg-brand-300" />
<div>
<div className="font-semibold text-white">{item.title}</div>
<div>{item.description}</div>
</div>
</li>
))}
</ul>
</div>
<div className="rounded-3xl border border-white/10 bg-white/5 p-8 text-sm text-white/70 space-y-3">
<h4 className="text-lg font-semibold text-white">How the beta works</h4>
<p>We onboard new features to the waitlist in weekly waves. Youll receive playbooks, sample workflows, and a feedback channel with our product team.</p>
<p>Participants also get extended credits to experiment with automation scenarios.</p>
</div>
</div>
</section>
<CTASection
title="Prefer to explore now?"
description="Start your Igny8 trial and youll get notified the moment new automation releases are ready."
primaryCta={{ label: "Start free", href: "https://app.igny8.com/signup" }}
secondaryCta={{ label: "Contact us", href: "/contact" }}
/>
</div>
);
};
export default Waitlist;

View File

@@ -1,6 +1,7 @@
import { defineConfig } from "vite";
import react from "@vitejs/plugin-react";
import svgr from "vite-plugin-svgr";
import { resolve } from "path";
// https://vite.dev/config/
export default defineConfig(({ mode }) => {
@@ -56,6 +57,10 @@ export default defineConfig(({ mode }) => {
cssCodeSplit: true,
// Optimize chunk size
rollupOptions: {
input: {
main: resolve(__dirname, "index.html"),
marketing: resolve(__dirname, "marketing.html"),
},
output: {
// Manual chunk splitting for better code splitting
manualChunks: (id) => {
@@ -129,6 +134,13 @@ export default defineConfig(({ mode }) => {
return `page-${pageName.toLowerCase()}`;
}
}
if (id.includes('/marketing/')) {
const match = id.match(/\/marketing\/([^/]+)/);
if (match) {
const sectionName = match[1];
return `marketing-${sectionName.toLowerCase()}`;
}
}
// Split icons into separate chunk (lazy load)
if (id.includes('/icons/') && id.endsWith('.svg')) {
return 'icons';