import { useState, useEffect } from "react"; import { toast } from "sonner"; import { Button } from "@/components/ui/button"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { Badge } from "@/components/ui/badge"; import { Avatar, AvatarFallback } from "@/components/ui/avatar"; import { Input } from "@/components/ui/input"; import { Sheet, SheetContent, SheetTrigger } from "@/components/ui/sheet"; import { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from "@/components/ui/accordion"; import { Tabs, TabsList, TabsTrigger } from "@/components/ui/tabs"; import { Menu, ArrowRight, Check, X, Quote, ChevronLeft, ChevronRight, Github, Twitter, Linkedin, Instagram, Sparkles, TrendingUp, Users, Award, Clock, Shield, Zap, Heart, Lock } from "lucide-react"; import { Switch } from "@/components/ui/switch"; import { ThemeToggle } from "@/components/ThemeToggle"; import { useSaasMutation } from "@/hooks/use-tygarun"; export default function LandingPage() { const [mobileOpen, setMobileOpen] = useState(false); const [scrolled, setScrolled] = useState(false); const [activeTestimonial, setActiveTestimonial] = useState(0); const [email, setEmail] = useState(""); const [subscribing, setSubscribing] = useState(false); const { mutate: subscribe } = useSaasMutation("email", "/send/newsletter-confirm"); const handleSubscribe = async (e: React.FormEvent) => { e.preventDefault(); if (!email.includes("@")) return; setSubscribing(true); try { await subscribe({ email }); toast.success("You're in! Check your inbox."); setEmail(""); } catch { toast.error("Could not subscribe. Please try again."); } finally { setSubscribing(false); } }; useEffect(() => { const onScroll = () => setScrolled(window.scrollY > 20); window.addEventListener("scroll", onScroll); return () => window.removeEventListener("scroll", onScroll); }, []); const testimonials = [ { quote: "Luminary replaced four tools for us. Our product team finally has a single source of truth: from customer feedback to shipped features.", name: "Elena Rodriguez", title: "VP Product", company: "Notion" }, { quote: "The insights engine alone justified the switch. We discovered three critical pain points that our NPS surveys completely missed.", name: "David Chen", title: "CPO", company: "Loom" }, { quote: "Our roadmap used to live in five different spreadsheets. Now the entire company can see what we are building and why it matters.", name: "Priya Patel", title: "Head of Product", company: "Figma" }, ]; const navLinks = [ { label: "Features", href: "#features" }, { label: "Results", href: "#stats" }, { label: "Pricing", href: "#pricing" }, { label: "Stories", href: "#testimonials" }, ]; return (
{/* ── HEADER ── */}
Luminary
{/* ── HERO ── */}
{/* Grid dots pattern */}
Launching Summer 2026

Transform how your team builds products that customers love

The all-in-one platform that brings together product strategy, customer insights, and execution, so you can focus on what matters most.

No credit card required
{/* Social proof row */}
{["A", "B", "C", "D"].map((letter, i) => ( {letter} ))}

Joined by 2,400+ product teams this month

{/* ── SOCIAL PROOF BAR ── */}
{[ { value: "12K+", label: "Active Teams" }, { value: "4.9/5", label: "Average Rating" }, { value: "98%", label: "Retention Rate" }, { value: "150+", label: "Countries" }, ].map((s, i) => (
{s.value} {s.label}
))}
{/* ── FEATURES ── */}
Why Luminary

Built for teams that refuse to settle

Three core capabilities that change the way you work, from ideation to impact.

{[ { icon: , title: "Instant insights from every customer touchpoint", desc: "Automatically capture, organize, and surface customer feedback from support tickets, interviews, and surveys in real time.", bullets: ["AI-powered sentiment analysis across all channels", "Automated tagging and theme detection", "Real-time alerting for emerging trends"], gradient: "from-indigo-500 to-violet-600" }, { icon: , title: "Roadmaps that align your entire organization", desc: "Create living roadmaps that connect strategy to execution. Keep stakeholders informed and teams focused on the highest-impact work.", bullets: ["Visual timeline and kanban views", "Automatic dependency mapping", "Stakeholder sharing with custom permissions"], gradient: "from-emerald-500 to-teal-600" }, { icon: , title: "Measure impact, not just output", desc: "Track how every feature affects your core metrics. Know exactly which bets paid off and where to double down.", bullets: ["Built-in OKR and KPI tracking", "Feature-level impact attribution", "Executive dashboards with one-click export"], gradient: "from-amber-500 to-orange-600" }, ].map((feature, i) => (
{/* Image placeholder */}
{i + 1}
Live demo →
{/* Content */}
{feature.icon} Feature {i + 1}

{feature.title}

{feature.desc}

    {feature.bullets.map((b, j) => (
  • {b}
  • ))}
))}
{/* ── STATS ── */}

The numbers speak for themselves

{[ { icon: , value: "2.4M+", label: "Insights Captured" }, { icon: , value: "37%", label: "Faster Time-to-Market" }, { icon: , value: "#1", label: "on G2 for Product Mgmt" }, { icon: , value: "< 2 min", label: "Average Setup Time" }, ].map((s, i) => (
{s.icon}
{s.value}
{s.label}
))}
{/* ── TESTIMONIALS ── */}

What product leaders are saying

"{testimonials[activeTestimonial].quote}"

{testimonials[activeTestimonial].name.split(" ").map((n: string) => n[0]).join("")}
{testimonials[activeTestimonial].name}
{testimonials[activeTestimonial].title}
{testimonials[activeTestimonial].company}
{/* Navigation dots */}
{testimonials.map((_, i) => (
{/* ── PRICING ── */}
Pricing

Simple, transparent pricing

Start free, scale as you grow. No hidden fees, cancel anytime.

Monthly Annual Save 20%
{[ { name: "Free", price: "$0", period: "/month", desc: "For individuals and small teams getting started.", features: ["Up to 10 team members", "1,000 insights/month", "Basic roadmaps", "Community support"], missing: ["Advanced analytics", "Custom integrations"], cta: "Get Started Free", popular: false, }, { name: "Pro", price: "$29", period: "/user/month", desc: "For growing teams that need advanced features.", features: ["Unlimited team members", "Unlimited insights", "Advanced roadmaps & OKRs", "Priority support", "All integrations"], missing: [], cta: "Start Free Trial", popular: true, }, { name: "Enterprise", price: "Custom", period: "", desc: "For organizations with advanced security and compliance needs.", features: ["Everything in Pro", "SSO & SAML", "Dedicated account manager", "Custom SLA", "Audit logs & compliance", "On-premise deployment"], missing: [], cta: "Contact Sales", popular: false, }, ].map((plan, i) => ( {plan.popular && (
Most Popular
)} {plan.name}
{plan.price} {plan.period}

{plan.desc}

    {plan.features.map((f, j) => (
  • {f}
  • ))} {plan.missing.map((m, j) => (
  • {m}
  • ))}
))}
{/* ── FAQ ── */}

Frequently asked questions

Everything you need to know about the platform.

{[ { q: "How does the free plan work?", a: "The free plan includes up to 10 team members and 1,000 insights per month. No credit card required to get started." }, { q: "Can I change plans later?", a: "Absolutely. You can upgrade, downgrade, or cancel your plan at any time. Changes take effect at the start of your next billing cycle." }, { q: "What integrations do you support?", a: "We integrate with Slack, Jira, Linear, Notion, Intercom, Zendesk, and 50+ more tools. Custom integrations are available on Enterprise plans." }, { q: "Is my data secure?", a: "Yes. We are SOC 2 Type II certified, GDPR compliant, and all data is encrypted at rest and in transit. Enterprise plans include additional security features." }, { q: "Do you offer a trial period?", a: "Yes, all paid plans come with a 14-day free trial. You can explore all features before committing." }, { q: "How do I get support?", a: "Free plans get community support. Pro plans include priority email support with 4-hour response times. Enterprise gets dedicated account management and phone support." }, ].map((faq, i) => ( {faq.q} {faq.a} ))}

Still have questions?

{/* ── CTA ── */}

Ready to build products your customers love?

Join thousands of product teams who ship better, faster, and with more confidence.

setEmail(e.target.value)} placeholder="Enter your work email" className="h-12 rounded-full bg-white/95 text-foreground border-0 px-6 flex-1" />

Free for teams up to 10. No credit card required.

{/* ── FOOTER ── */}
); }