forked from Mike/freno-dev
nessa.freno.me/terms was a live 404 although AppSettings.termsOfServiceURL
links it from Settings > Legal and the paywall. The document existed only on
an unmerged branch and had no host-dispatch route, so it could not serve on
the subdomain. Carry the Terms of Use page, add the /terms dispatcher, and
publish nessa-support@freno.me on terms, privacy, contact and deletion.
- src/routes/terms.tsx: host-aware dispatch for nessa; other sites 404.
- src/routes/nessa/terms.tsx: the Terms page; its contact section names the
support address.
- privacy: add the controller clause and the support address.
- contact/deletion: show the support address; deletion also accepts a
request by email.
- subdomain-dispatch.test.ts: list directories before filtering to .tsx
files. The old predicate only ever received file names, so it asserted
over an empty list and missed the missing /terms dispatch.
- support-contact.test.ts: guard that every contact route renders the one
address the app shows.
App side unchanged: termsOfServiceURL stays https://nessa.freno.me/terms.
(cherry picked from commit 71bb9ec5df)
44 lines
1.5 KiB
TypeScript
44 lines
1.5 KiB
TypeScript
import { ContactForm } from "~/components/ContactForm";
|
|
import { EdgeCacheHeaders } from "~/components/EdgeCacheHeaders";
|
|
import SubdomainHeader from "~/components/SubdomainHeader";
|
|
import { SUPPORT_EMAIL } from "./content";
|
|
|
|
/**
|
|
* Nessa contact page (`nessa.freno.me/contact`).
|
|
*
|
|
* Thin wrapper over the shared `<ContactForm>`. Site awareness —
|
|
* subject prefix `[Nessa]`, recipient label, heading, and PageHead metadata —
|
|
* is derived from `useSite()` inside the component via
|
|
* `CONTACT_CONTEXT.nessa`, so this route needs no explicit props.
|
|
*
|
|
* vercel.json rewrites `nessa.freno.me/*` → the internal `/nessa/*` route
|
|
* prefix; the browser URL stays `nessa.freno.me/contact` so the canonical and
|
|
* Turnstile origin resolve correctly.
|
|
*
|
|
* Acceptance: `nessa.localhost:3000/contact` renders the contact form with
|
|
* Nessa branding; submissions email `michael@freno.me` with subject
|
|
* `[Nessa] Contact Request`. The support address shown by the app is also
|
|
* published here, so the contact route does not depend on the form alone
|
|
* (FRE-1670).
|
|
*/
|
|
export default function NessaContactPage() {
|
|
return (
|
|
<>
|
|
<EdgeCacheHeaders maxAge={60} staleSeconds={3600} />
|
|
<SubdomainHeader />
|
|
<ContactForm>
|
|
<p class="mt-8 text-center text-sm opacity-80">
|
|
You can also email us directly at{" "}
|
|
<a
|
|
href={`mailto:${SUPPORT_EMAIL}`}
|
|
class="text-blue hover-underline-animation"
|
|
>
|
|
{SUPPORT_EMAIL}
|
|
</a>
|
|
.
|
|
</p>
|
|
</ContactForm>
|
|
</>
|
|
);
|
|
}
|