← back to Stayclaim
add AdSense-compliant privacy policy (/privacy) + footer link — account-ban prevention
6449ef37998d48405c3d7821b72788704b4e4779 · 2026-08-05 08:21:35 -0700 · Steve Abrams
Files touched
M src/app/layout.tsxA src/app/privacy/page.tsx
Diff
commit 6449ef37998d48405c3d7821b72788704b4e4779
Author: Steve Abrams <steve@designerwallcoverings.com>
Date: Wed Aug 5 08:21:35 2026 -0700
add AdSense-compliant privacy policy (/privacy) + footer link — account-ban prevention
---
src/app/layout.tsx | 1 +
src/app/privacy/page.tsx | 124 +++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 125 insertions(+)
diff --git a/src/app/layout.tsx b/src/app/layout.tsx
index 5dc96c0..dfa285e 100644
--- a/src/app/layout.tsx
+++ b/src/app/layout.tsx
@@ -131,6 +131,7 @@ export default async function RootLayout({ children }: { children: React.ReactNo
<span className="text-ink/40">
Public record. Historical associations only. Living persons protected by design.
{FREE_FOREVER && ' Free forever.'}
+ {' '}<Link href="/privacy" className="underline hover:text-ink/70">Privacy</Link>
</span>
</div>
</footer>
diff --git a/src/app/privacy/page.tsx b/src/app/privacy/page.tsx
new file mode 100644
index 0000000..efd645b
--- /dev/null
+++ b/src/app/privacy/page.tsx
@@ -0,0 +1,124 @@
+import type { Metadata } from 'next';
+import { headers } from 'next/headers';
+import { siteForHost } from '@/lib/site';
+
+export async function generateMetadata(): Promise<Metadata> {
+ const h = await headers();
+ const surface = siteForHost(h.get('x-pastdoor-host') || h.get('host'));
+ return {
+ title: 'Privacy Policy',
+ description: `How ${surface.brandName} handles data, cookies, and advertising.`,
+ alternates: { canonical: '/privacy' },
+ robots: { index: true, follow: true },
+ };
+}
+
+/**
+ * Privacy Policy — AdSense program-policy requirement. Must be reachable and must
+ * disclose (1) that we use cookies, (2) that Google, as a third-party vendor, uses
+ * cookies (incl. the DoubleClick/AdSense cookie) to serve ads based on prior visits,
+ * and (3) how users opt out. Host-routed: one page covers every pastdoor surface,
+ * branded per host via siteForHost. Keep this URL stable — Google re-crawls it.
+ */
+export default async function PrivacyPage() {
+ const h = await headers();
+ const surface = siteForHost(h.get('x-pastdoor-host') || h.get('host'));
+ const updated = 'August 5, 2026';
+
+ return (
+ <div className="max-w-3xl mx-auto px-6 py-16 prose prose-neutral">
+ <h1 className="text-3xl font-semibold mb-2">Privacy Policy</h1>
+ <p className="text-sm text-ink/50 mb-8">
+ {surface.brandName} ({surface.domain}) · Last updated {updated}
+ </p>
+
+ <p>
+ This Privacy Policy explains what information {surface.brandName} collects when you
+ visit {surface.domain}, how we use it, and the choices you have. By using this site
+ you agree to the practices described here.
+ </p>
+
+ <h2 className="text-xl font-semibold mt-8 mb-2">Information we collect</h2>
+ <p>
+ We collect standard server log information (your IP address, browser type, referring
+ pages, and the time of your visit) and information stored in cookies or similar
+ technologies. We do not require you to create an account to browse public records
+ content, and we do not sell your personal information.
+ </p>
+
+ <h2 className="text-xl font-semibold mt-8 mb-2">Cookies and advertising</h2>
+ <p>
+ We use cookies to operate the site and to display advertising. Specifically:
+ </p>
+ <ul>
+ <li>
+ <strong>Third-party vendors, including Google, use cookies to serve ads</strong>{' '}
+ based on your prior visits to this website and other websites.
+ </li>
+ <li>
+ Google’s use of advertising cookies (including the DoubleClick cookie)
+ enables it and its partners to serve ads to you based on your visits to this and/or
+ other sites on the Internet.
+ </li>
+ <li>
+ You may opt out of personalized advertising by visiting{' '}
+ <a href="https://www.google.com/settings/ads" target="_blank" rel="noopener noreferrer">
+ Google Ads Settings
+ </a>
+ . You can opt out of a third-party vendor’s use of cookies for personalized
+ advertising by visiting{' '}
+ <a href="https://www.aboutads.info/choices/" target="_blank" rel="noopener noreferrer">
+ aboutads.info
+ </a>{' '}
+ or{' '}
+ <a href="https://www.youronlinechoices.eu/" target="_blank" rel="noopener noreferrer">
+ youronlinechoices.eu
+ </a>{' '}
+ (EEA/UK).
+ </li>
+ <li>
+ Where required by law (including the EEA, UK, and Switzerland), we request consent
+ before setting non-essential advertising cookies.
+ </li>
+ </ul>
+ <p>
+ For more information about how Google uses data when you use our partners’ sites
+ or apps, see{' '}
+ <a href="https://policies.google.com/technologies/partner-sites" target="_blank" rel="noopener noreferrer">
+ Google’s Privacy & Terms
+ </a>
+ .
+ </p>
+
+ <h2 className="text-xl font-semibold mt-8 mb-2">Analytics</h2>
+ <p>
+ We use Google Analytics to understand how visitors use the site. Google Analytics sets
+ cookies to measure pageviews and sessions in aggregate. You can opt out using the{' '}
+ <a href="https://tools.google.com/dlpage/gaoptout" target="_blank" rel="noopener noreferrer">
+ Google Analytics Opt-out Browser Add-on
+ </a>
+ .
+ </p>
+
+ <h2 className="text-xl font-semibold mt-8 mb-2">Your choices</h2>
+ <p>
+ Most browsers let you block or delete cookies through their settings. Blocking cookies
+ may affect how the site functions. You can also use the opt-out links above to limit
+ personalized advertising.
+ </p>
+
+ <h2 className="text-xl font-semibold mt-8 mb-2">Public records & living persons</h2>
+ <p>
+ {surface.brandName} presents historical, public-record information about addresses and
+ their past associations. Content is limited to historical associations; living persons
+ are protected by design. To request removal or correction, contact us below.
+ </p>
+
+ <h2 className="text-xl font-semibold mt-8 mb-2">Contact</h2>
+ <p>
+ Questions about this policy or a removal request? Email{' '}
+ <a href={`mailto:privacy@${surface.domain}`}>privacy@{surface.domain}</a>.
+ </p>
+ </div>
+ );
+}
← 3d9c885 AdSense: inject Auto-ads loader into root layout + add publi
·
back to Stayclaim
·
Verify historic monument layer identity before importing 3881fa9 →