feat: add policy pages

This commit is contained in:
gosangam
2026-06-02 01:57:08 +05:30
parent 0352cb2003
commit 91d5d272d2
168 changed files with 1326 additions and 81 deletions
+274
View File
@@ -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"
>
&larr; 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 &mdash; 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 &mdash; 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>{" "}
&mdash; for example, in connection with a pending legal claim,
regulatory request, or tax/accounting requirement &mdash; 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>{" "}
&mdash; we acknowledge your request.
</li>
<li>
<strong className="text-foreground">
Within {SLA_DAYS} days
</strong>{" "}
&mdash; 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>{" "}
&mdash; 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 &ldquo;Prabhupāda Says&rdquo; app
connection in your provider settings:
</p>
<ul className="list-disc pl-6 space-y-1.5">
<li>
<strong className="text-foreground">Google:</strong>&nbsp;visit your
Google Account &rarr; <em>Security</em> &rarr;{" "}
<em>Third-party apps with account access</em> &rarr; select
&ldquo;Prabhupāda Says&rdquo; &rarr; <em>Remove access</em>.
</li>
<li>
<strong className="text-foreground">Facebook:</strong> visit{" "}
<em>Settings &amp; privacy</em> &rarr; <em>Settings</em> &rarr;{" "}
<em>Apps and websites</em> &rarr; select &ldquo;Prabhupāda
Says&rdquo; &rarr; <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>
);
}