← back to Trademarks Copyright
src/app/layout.tsx
98 lines
import "./globals.css";
import Link from "next/link";
import type { Metadata } from "next";
const APP_BASE = process.env.APP_BASE_URL || "http://localhost:9770";
export const metadata: Metadata = {
metadataBase: new URL(APP_BASE),
title: {
default: "Drops — Daily trademark & domain opportunities",
template: "%s | Drops",
},
description: "A daily newsletter of abandoned US trademarks, public-domain works, and expiring domains — curated, scored, and ready to build on.",
openGraph: {
type: "website",
url: APP_BASE,
title: "Drops — Daily trademark & domain opportunities",
description: "Curated daily brief of abandoned trademarks, public-domain works, and expiring domains.",
siteName: "Drops",
},
twitter: {
card: "summary_large_image",
title: "Drops — Daily trademark & domain opportunities",
description: "Daily brief of abandoned trademarks, PD works, and expiring domains.",
},
robots: { index: true, follow: true },
};
const JSONLD_ORG = {
"@context": "https://schema.org",
"@type": "Organization",
name: "Drops",
url: APP_BASE,
email: "drops@agentabrams.com",
description: "Daily newsletter of abandoned US trademarks, public-domain works, and expiring domains.",
};
const JSONLD_WEBAPP = {
"@context": "https://schema.org",
"@type": "WebApplication",
name: "Drops",
applicationCategory: "BusinessApplication",
offers: [
{ "@type": "Offer", name: "Trial", price: "0", priceCurrency: "USD" },
{ "@type": "Offer", name: "Standard", price: "29", priceCurrency: "USD", priceSpecification: { "@type": "UnitPriceSpecification", billingIncrement: 1, unitText: "MON" } },
{ "@type": "Offer", name: "Pro", price: "99", priceCurrency: "USD", priceSpecification: { "@type": "UnitPriceSpecification", billingIncrement: 1, unitText: "MON" } },
],
};
export default function RootLayout({ children }: { children: React.ReactNode }) {
return (
<html lang="en">
<head>
<script type="application/ld+json" dangerouslySetInnerHTML={{ __html: JSON.stringify(JSONLD_ORG) }} />
<script type="application/ld+json" dangerouslySetInnerHTML={{ __html: JSON.stringify(JSONLD_WEBAPP) }} />
</head>
<body>
<header className="border-b border-ink/10 bg-ledger text-parchment">
<div className="mx-auto flex max-w-[1600px] items-center gap-6 px-6 py-4">
<Link href="/" className="text-xl font-semibold tracking-tight">
Trademarks <span className="text-brass">&</span> Copyright
</Link>
<nav className="ml-auto flex gap-4 text-sm">
<Link href="/drops" className="hover:text-brass">Drops</Link>
<Link href="/drops/archive" className="hover:text-brass">Archive</Link>
<Link href="/pricing" className="hover:text-brass">Pricing</Link>
<Link href="/faq" className="hover:text-brass">FAQ</Link>
<Link href="/about" className="hover:text-brass">About</Link>
<span className="mx-1 text-ink/20">·</span>
<Link href="/alerts" className="hover:text-brass opacity-60">Alerts</Link>
<Link href="/" className="hover:text-brass opacity-60">Index</Link>
<Link href="/unregistered" className="hover:text-brass opacity-60">Hunter</Link>
<Link href="/canvas" className="hover:text-brass opacity-60">Canvas</Link>
<Link href="/admin/drops" className="hover:text-brass opacity-40">Admin</Link>
<Link href="/admin/subscribers" className="hover:text-brass opacity-40">Subs</Link>
</nav>
</div>
</header>
<main className="mx-auto max-w-[1600px] px-6 py-6">{children}</main>
<footer className="mx-auto max-w-[1600px] px-6 py-8 text-xs text-ink/60">
<div className="flex flex-wrap gap-x-4 gap-y-2 mb-2">
<Link href="/about" className="hover:text-brass">About</Link>
<Link href="/pricing" className="hover:text-brass">Pricing</Link>
<Link href="/faq" className="hover:text-brass">FAQ</Link>
<Link href="/changelog" className="hover:text-brass">Changelog</Link>
<Link href="/legal/terms" className="hover:text-brass">Terms</Link>
<Link href="/legal/privacy" className="hover:text-brass">Privacy</Link>
<Link href="/legal/refund" className="hover:text-brass">Refunds</Link>
<a href="mailto:drops@agentabrams.com" className="hover:text-brass">Contact</a>
</div>
<strong>Not legal advice.</strong> Abandoned marks can carry common-law rights. Public-domain works may still have derivative-work protections.
Consult a USPTO-registered attorney before use.
</footer>
</body>
</html>
);
}