From 07ece87de5124bda6483bd5d0b624c843fcfa0ca Mon Sep 17 00:00:00 2001 From: Dave Date: Mon, 21 Sep 2026 02:23:04 +0200 Subject: [PATCH] feat(intake): post-submit thanks page MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Phase 8a Task 12. Static page; no card read, no brief shown, no link to the signed-in board. Resolves the token only to confirm it is still alive — a revoked token landing here still shows 'Thanks' so the submission cannot be probed. --- src/app/intake/[token]/sent/[cardId]/page.tsx | 61 +++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 src/app/intake/[token]/sent/[cardId]/page.tsx diff --git a/src/app/intake/[token]/sent/[cardId]/page.tsx b/src/app/intake/[token]/sent/[cardId]/page.tsx new file mode 100644 index 0000000..2429b6e --- /dev/null +++ b/src/app/intake/[token]/sent/[cardId]/page.tsx @@ -0,0 +1,61 @@ +import Link from "next/link"; + +import { resolveIntakeLink } from "@/lib/intake-links"; + +/** + * The "thanks" page after a public submission. + * + * Intentionally static: it does not read the card, does not show the brief, + * does not link to the board. An anonymous submitter should see a clear + * acknowledgement and a way to file another request; nothing more. The card + * detail page is signed-in only, and linking to it from here would either + * 404 or force a session we deliberately do not require. + */ +export default async function IntakeSentPage({ + params, +}: { + params: Promise<{ token: string; cardId: string }>; +}) { + const { token } = await params; + + // We don't actually need the card or the link to render this page; we + // resolve the link only to confirm the token is still alive. A revoked + // token landing on /sent/ would otherwise confirm the submission + // happened — same "doesn't shout" property as the intake page. + const link = await resolveIntakeLink(token); + if (!link || !link.active) { + return ( +
+

Thanks

+

+ Your message was sent. +

+
+ ); + } + + return ( +
+
+

Thanks

+

+ Your request has been sent to the developer. +

+
+ +

+ They will see it on their board and get back to you about what + happens next. There is no notification for you to wait on here. +

+ +
+ + Send another request + +
+
+ ); +}