feat: add policy pages
This commit is contained in:
@@ -0,0 +1,274 @@
|
||||
import type { Metadata } from "next";
|
||||
import Link from "next/link";
|
||||
import { PageHeader } from "@/components/page-header";
|
||||
import { buildOgMeta } from "@/lib/og";
|
||||
|
||||
const EFFECTIVE_DATE = "June 1, 2026";
|
||||
const CONTACT_EMAIL = "support@prabhupadasays.org";
|
||||
const OPERATOR = "Krispire Solutions LLP";
|
||||
const SERVICE = "Prabhupāda Says";
|
||||
const SLA_DAYS = 30;
|
||||
|
||||
export function generateMetadata(): Metadata {
|
||||
return buildOgMeta({
|
||||
title: "Data Deletion — Prabhupāda Says",
|
||||
quote: "How to delete your account and personal data from Prabhupāda Says.",
|
||||
});
|
||||
}
|
||||
|
||||
export default function DataDeletionPage() {
|
||||
const subject = "Delete my account";
|
||||
const body = `Hello,\n\nI would like to delete my Prabhupāda Says account and all associated personal data.\n\n— Email address registered with the account: \n— Account handle (if known): \n— Reason for deletion (optional): \n\nThank you.`;
|
||||
const mailto = `mailto:${CONTACT_EMAIL}?subject=${encodeURIComponent(subject)}&body=${encodeURIComponent(body)}`;
|
||||
|
||||
return (
|
||||
<div className="min-h-screen bg-background">
|
||||
<PageHeader>
|
||||
<Link
|
||||
href="/"
|
||||
className="text-sm text-muted-foreground hover:text-foreground transition-colors"
|
||||
>
|
||||
← Home
|
||||
</Link>
|
||||
<h1 className="mt-3 text-3xl font-bold text-foreground">
|
||||
Data Deletion
|
||||
</h1>
|
||||
<p className="mt-1 text-muted-foreground">Effective {EFFECTIVE_DATE}</p>
|
||||
</PageHeader>
|
||||
|
||||
<main className="max-w-3xl mx-auto px-6 py-10 space-y-10 text-[15px] leading-relaxed text-muted-foreground">
|
||||
<section className="space-y-3">
|
||||
<p>
|
||||
You can delete your {SERVICE} account and the personal data
|
||||
associated with it at any time. This page explains exactly how to
|
||||
request deletion, what we delete, what we keep, and how long the
|
||||
process takes.
|
||||
</p>
|
||||
<p>
|
||||
Self-service deletion from within your profile settings is planned
|
||||
and will be added in a future release. Until then, please use the
|
||||
email process below — we will process every valid request
|
||||
within {SLA_DAYS} days.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<Section title="How to request deletion">
|
||||
<ol className="list-decimal pl-6 space-y-3">
|
||||
<li>
|
||||
<p>
|
||||
Send an email from the email address registered with your
|
||||
account to{" "}
|
||||
<a
|
||||
href={`mailto:${CONTACT_EMAIL}`}
|
||||
className="text-primary underline-offset-4 hover:underline"
|
||||
>
|
||||
{CONTACT_EMAIL}
|
||||
</a>
|
||||
.
|
||||
</p>
|
||||
<p>
|
||||
Sending from your registered email helps us verify the request
|
||||
is genuinely yours. If you signed up through Google or Facebook,
|
||||
send the email from the address linked to that provider.
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
Use the subject line:{" "}
|
||||
<code className="px-1 py-0.5 rounded bg-muted text-foreground font-mono text-xs">
|
||||
Delete my account
|
||||
</code>
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>In the body of the email, include:</p>
|
||||
<ul className="mt-2 list-disc pl-6 space-y-1.5">
|
||||
<li>The email address registered with your account.</li>
|
||||
<li>Your account handle, if you remember it.</li>
|
||||
<li>
|
||||
(Optional) The reason for deletion — this helps us
|
||||
improve the Service, but you do not need to share it.
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
We will reply to confirm we have received your request,
|
||||
typically within 2 business days, and again once the deletion is
|
||||
complete.
|
||||
</p>
|
||||
</li>
|
||||
</ol>
|
||||
|
||||
<div className="mt-6 rounded-lg border border-border bg-card p-4 sm:p-5">
|
||||
<p className="text-sm text-foreground">
|
||||
Prefer to skip the typing? Click the button below to open a
|
||||
pre-filled email in your mail client.
|
||||
</p>
|
||||
<a
|
||||
href={mailto}
|
||||
className="mt-4 inline-flex items-center justify-center h-10 rounded-md bg-primary px-5 text-sm font-medium text-primary-foreground hover:bg-primary/90 transition-colors"
|
||||
>
|
||||
Open pre-filled email
|
||||
</a>
|
||||
</div>
|
||||
</Section>
|
||||
|
||||
<Section title="What we delete">
|
||||
<p>
|
||||
Once we verify your request, we permanently delete the following
|
||||
within {SLA_DAYS} days:
|
||||
</p>
|
||||
<ul className="list-disc pl-6 space-y-1.5">
|
||||
<li>
|
||||
Your user account (email address, name, handle, password hash,
|
||||
avatar URL, role, reading preferences, and account timestamps).
|
||||
</li>
|
||||
<li>
|
||||
Any linked third-party sign-in identities (Google, Facebook). The
|
||||
provider is the source of truth for your account with them; you
|
||||
can revoke that link from the provider as well.
|
||||
</li>
|
||||
<li>Your avatar image stored in our object storage.</li>
|
||||
<li>Your posts, bookmarks, collections, and short share links.</li>
|
||||
<li>
|
||||
Any outstanding password-reset or email-verification tokens.
|
||||
</li>
|
||||
</ul>
|
||||
<p>
|
||||
Records linked to your user identifier via foreign keys are removed
|
||||
via cascade or set to a deleted-user placeholder at the same time.
|
||||
</p>
|
||||
</Section>
|
||||
|
||||
<Section title="What we may retain (and why)">
|
||||
<p>
|
||||
A small amount of information may be retained after account
|
||||
deletion, in line with the law and the legitimate operation of the
|
||||
Service:
|
||||
</p>
|
||||
<ul className="list-disc pl-6 space-y-1.5">
|
||||
<li>
|
||||
<strong className="text-foreground">Feedback messages</strong> you
|
||||
submitted are retained after deletion, but the link to your user
|
||||
identifier is removed (so the message remains as anonymous product
|
||||
feedback).
|
||||
</li>
|
||||
<li>
|
||||
<strong className="text-foreground">
|
||||
Server and security logs
|
||||
</strong>{" "}
|
||||
may contain references to your activity for a short operational
|
||||
window (typically 30 days) before they are deleted or anonymised.
|
||||
These logs are not used to reconstruct your account.
|
||||
</li>
|
||||
<li>
|
||||
<strong className="text-foreground">
|
||||
Records we are legally required to retain
|
||||
</strong>{" "}
|
||||
— for example, in connection with a pending legal claim,
|
||||
regulatory request, or tax/accounting requirement — will be
|
||||
kept only for as long as the law requires and then deleted.
|
||||
</li>
|
||||
<li>
|
||||
<strong className="text-foreground">Backups</strong> taken before
|
||||
your deletion request are encrypted and rotate out on a regular
|
||||
schedule. Your data will be overwritten as backups roll, typically
|
||||
within 30 days.
|
||||
</li>
|
||||
</ul>
|
||||
</Section>
|
||||
|
||||
<Section title="Timeline">
|
||||
<ul className="list-disc pl-6 space-y-1.5">
|
||||
<li>
|
||||
<strong className="text-foreground">
|
||||
Within 2 business days
|
||||
</strong>{" "}
|
||||
— we acknowledge your request.
|
||||
</li>
|
||||
<li>
|
||||
<strong className="text-foreground">
|
||||
Within {SLA_DAYS} days
|
||||
</strong>{" "}
|
||||
— we complete the deletion in our active systems and send
|
||||
you a confirmation email.
|
||||
</li>
|
||||
<li>
|
||||
<strong className="text-foreground">Up to 30 days after</strong>{" "}
|
||||
— residual copies in encrypted backups roll out as part of
|
||||
our normal backup retention schedule.
|
||||
</li>
|
||||
</ul>
|
||||
</Section>
|
||||
|
||||
<Section title="If you signed in via Google or Facebook">
|
||||
<p>
|
||||
Deleting your {SERVICE} account does not automatically remove your
|
||||
account with Google or Facebook. To remove your data entirely from
|
||||
those providers, also revoke the “Prabhupāda Says” app
|
||||
connection in your provider settings:
|
||||
</p>
|
||||
<ul className="list-disc pl-6 space-y-1.5">
|
||||
<li>
|
||||
<strong className="text-foreground">Google:</strong> visit your
|
||||
Google Account → <em>Security</em> →{" "}
|
||||
<em>Third-party apps with account access</em> → select
|
||||
“Prabhupāda Says” → <em>Remove access</em>.
|
||||
</li>
|
||||
<li>
|
||||
<strong className="text-foreground">Facebook:</strong> visit{" "}
|
||||
<em>Settings & privacy</em> → <em>Settings</em> →{" "}
|
||||
<em>Apps and websites</em> → select “Prabhupāda
|
||||
Says” → <em>Remove</em>.
|
||||
</li>
|
||||
</ul>
|
||||
</Section>
|
||||
|
||||
<Section title="Other rights">
|
||||
<p>
|
||||
Besides deletion, you can also ask us to provide a copy of the
|
||||
personal information we hold about you, or to correct information
|
||||
that is inaccurate. See our{" "}
|
||||
<Link
|
||||
href="/privacy"
|
||||
className="text-primary underline-offset-4 hover:underline"
|
||||
>
|
||||
Privacy Policy
|
||||
</Link>{" "}
|
||||
for the full list of rights available to you.
|
||||
</p>
|
||||
</Section>
|
||||
|
||||
<Section title="Need help?">
|
||||
<p>
|
||||
If you have any trouble with the deletion process or want to verify
|
||||
the status of a previous request, write to{" "}
|
||||
<a
|
||||
href={`mailto:${CONTACT_EMAIL}`}
|
||||
className="text-primary underline-offset-4 hover:underline"
|
||||
>
|
||||
{CONTACT_EMAIL}
|
||||
</a>
|
||||
. The Service is operated by {OPERATOR}.
|
||||
</p>
|
||||
</Section>
|
||||
</main>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
function Section({
|
||||
title,
|
||||
children,
|
||||
}: {
|
||||
title: string;
|
||||
children: React.ReactNode;
|
||||
}) {
|
||||
return (
|
||||
<section className="space-y-3">
|
||||
<h2 className="text-xl font-bold text-foreground">{title}</h2>
|
||||
{children}
|
||||
</section>
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user