From 9229e61124ca3955cc2f98f51bb235e5bd4a1de2 Mon Sep 17 00:00:00 2001 From: anuphilipp3 Date: Sat, 4 Jul 2026 00:32:12 +0530 Subject: [PATCH] er --- apps/web/src/app/page.tsx | 73 +++++++++++++++++++ .../src/components/announcement-banner.tsx | 63 ++++++++++++++++ apps/web/src/components/header.tsx | 2 + apps/web/src/components/pricing-tiers.tsx | 25 ++++++- apps/web/src/lib/seo/platform-pages.ts | 14 +++- 5 files changed, 174 insertions(+), 3 deletions(-) create mode 100644 apps/web/src/components/announcement-banner.tsx diff --git a/apps/web/src/app/page.tsx b/apps/web/src/app/page.tsx index d5204294..6e82c835 100644 --- a/apps/web/src/app/page.tsx +++ b/apps/web/src/app/page.tsx @@ -30,6 +30,9 @@ import { CheckCircle2, Search, Cloud, + Users, + Building2, + Check, } from "lucide-react"; import { sidebarData } from "@/components/sidebar/data/sidebar-data"; import { homepageFaqItems } from "@/lib/seo/structured-data"; @@ -701,6 +704,76 @@ export default function Page() { + + {/* T4 โ€” Teams & Workspaces (full-width, NEW) */} + + +
+ +
+
+
+
+ +
+
+ + Built for Teams + + NEW +
+

+ One platform. Your whole team. +

+

+ Create organizations and shared workspaces, invite teammates, and control + exactly who can use what โ€” owners, admins, developers, and viewers each get + the right level of access. Switch between personal and team context in one + click; every tool follows. +

+
+ Set up your team workspace + +
+
+ + {/* Workspace + roles preview */} +
+
+
+ + Acme Engineering + + Team workspace + +
+
+ {[ + { name: "ada@acme.dev", role: "Owner" }, + { name: "grace@acme.dev", role: "Admin" }, + { name: "linus@acme.dev", role: "Developer" }, + { name: "margaret@acme.dev", role: "Viewer" }, + ].map((m) => ( +
+ + {m.name} + + {m.role} + +
+ ))} +
+
+
+ +
diff --git a/apps/web/src/components/announcement-banner.tsx b/apps/web/src/components/announcement-banner.tsx new file mode 100644 index 00000000..9ad515c2 --- /dev/null +++ b/apps/web/src/components/announcement-banner.tsx @@ -0,0 +1,63 @@ +"use client"; + +import { useEffect, useState } from "react"; +import Link from "next/link"; +import { ArrowRight, X } from "lucide-react"; + +const DISMISS_KEY = "mdt-launch-offer-dismissed"; + +/** + * Slim launch-offer strip above the marketing header. Dismissible per browser + * (localStorage). Rendered on marketing pages only via
. + */ +export function AnnouncementBanner() { + // Start hidden to avoid a flash for users who already dismissed it. + const [visible, setVisible] = useState(false); + + useEffect(() => { + try { + if (!localStorage.getItem(DISMISS_KEY)) setVisible(true); + } catch { + setVisible(true); + } + }, []); + + const dismiss = () => { + setVisible(false); + try { + localStorage.setItem(DISMISS_KEY, "1"); + } catch { + /* ignore */ + } + }; + + if (!visible) return null; + + return ( +
+
+ + Launch offer + +

+ First 250 accounts get every Pro & Team feature, + free. No card needed. +

+ + Claim yours + + +
+
+ ); +} diff --git a/apps/web/src/components/header.tsx b/apps/web/src/components/header.tsx index 43840659..29fe063d 100644 --- a/apps/web/src/components/header.tsx +++ b/apps/web/src/components/header.tsx @@ -5,6 +5,7 @@ import { Github, Menu, X, ArrowRight } from "lucide-react"; import { Button } from "@/components/ui/button"; import { ModeToggle } from "./modeToggle"; import { Logo } from "./logo"; +import { AnnouncementBanner } from "./announcement-banner"; import { Magnetic } from "@/components/mdt-magnetic"; import { motion, AnimatePresence } from "framer-motion"; import { cn } from "@/lib/utils"; @@ -77,6 +78,7 @@ export function Header({ showThemeToggle = true }: HeaderProps) { : "border-b border-transparent bg-transparent" )} > +
{/* Logo */} diff --git a/apps/web/src/components/pricing-tiers.tsx b/apps/web/src/components/pricing-tiers.tsx index fc06e1a4..e26a4be7 100644 --- a/apps/web/src/components/pricing-tiers.tsx +++ b/apps/web/src/components/pricing-tiers.tsx @@ -104,6 +104,9 @@ export function PricingTiers() {

Self-host for free, forever. Upgrade to cloud when you want the convenience.

+

+ ๐ŸŽ‰ Launch offer โ€” every plan is free for a limited time +

-
{big}
-
{sub}
+ {tier.monthly !== null && tier.monthly > 0 ? ( + // Launch offer: paid tiers are free for a limited time โ€” show + // the real price struck through so the value reads instantly. + <> +
+ + {big} + + Free +
+
+ for a limited time ยท normally {sub} +
+ + ) : ( + <> +
{big}
+
{sub}
+ + )}