Files
freno-dev/src/routes/deletion/life-and-lineage.tsx
Michael Freno 59d129b46b feat: add product-aware deletion emails and subdomain deletion/downloads routes
- Extend DeletionForm with product discriminator and configurable cooldown cookie
- Extract env-free deletion email helpers into deletion-email.ts with Lineage/Nessa branding
- Make misc.sendDeletionRequestEmail mutation product-aware (subject, html content, cookie)
- Replace legacy /deletion/life-and-lineage page with 308 redirect to lineage subdomain
- Add Lineage and Nessa subdomain deletion route modules with shared content components
- Add Lineage downloads route modules with shared content
- Update privacy policy deletion link to lineage subdomain
2026-07-23 12:32:14 -04:00

30 lines
1.2 KiB
TypeScript

/**
* Legacy Life and Lineage account-deletion route — now a 308 permanent
* redirect to the Lineage subdomain (task 11).
*
* The deletion form has been migrated to `src/routes/lineage/deletion.tsx`
* served at `lineage.freno.me/deletion` (vercel.json host rewrites map the
* subdomain to the `/lineage/*` internal prefix). Keeping this route as a
* permanent (308) server-side redirect — rather than a client `<Navigate>` —
* preserves SEO equity and gives installed / linked / support-emailed URLs a
* stable resolution path to the new home.
*
* Implemented as a SolidStart API route (`GET` handler returning a Response)
* so the redirect happens before any rendering; the route no longer ships a
* page component. The redirect target is centralized in
* `~/routes/lineage/deletion-content.ts` (`LEGACY_DELETION_REDIRECT_TARGET`)
* so the unit test can assert the destination without importing this server
* module.
*/
import { LEGACY_DELETION_REDIRECT_TARGET } from "~/routes/lineage/deletion-content";
export function GET() {
return new Response(null, {
status: 308,
headers: {
Location: LEGACY_DELETION_REDIRECT_TARGET,
"Cache-Control": "public, max-age=0, must-revalidate"
}
});
}