Skip to content

Commit 2e28f99

Browse files
committed
docs: refine mailroom routing decisions
1 parent c8bb951 commit 2e28f99

1 file changed

Lines changed: 13 additions & 5 deletions

File tree

docs/prd.md

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ Mailroom is the current project name. Public URLs and page labels should use nam
1010

1111
Every operator needs predictable, trustworthy forms to receive ad hoc information related to abuse, security vulnerabilities, privacy requests, accessibility, internationalization, website feedback, meeting requests, and similar operational workflows.
1212

13-
Form intake is a different operational surface than redirects. It needs validation, spam controls, rate limits, delivery integrations, secrets, and possibly attachment or evidence handling. Mailroom should follow the same general operational philosophy as vanityURLs: each operator runs their own instance, owns its configuration, and deploys it on their own hostname. A typical hostname is `notification.<operator-domain>`, for example `notification.dicaire.com`.
13+
Form intake is a different operational surface than redirects. It needs validation, spam controls, rate limits, delivery integrations, secrets, and possibly attachment or evidence handling. Mailroom should follow the same general operational philosophy as vanityURLs: each operator runs their own instance, owns its configuration, and deploys it on their own hostname. The initial documentation should use `notification.<operator-domain>` as the working hostname pattern, for example `notification.dicaire.com`, while treating the final URL naming strategy as unresolved.
1414

1515
Mailroom is not a public marketing website. It is a form handler with a minimal web surface, server-rendered HTML, and no client-side JavaScript in the core experience.
1616

@@ -140,9 +140,11 @@ Suggested fields:
140140
- Electronic signature.
141141
- Optional evidence URL.
142142

143+
The first DMCA takedown form should be generic enough for early implementation. A future form library should support jurisdiction-specific variants and legal requirements.
144+
143145
## Delivery Integrations
144146

145-
One primary destination is selected per deployment. First-class destination candidates:
147+
One global primary destination is selected per deployment, and each form type can override it when needed. First-class destination candidates:
146148

147149
- Slack incoming webhook.
148150
- Email provider.
@@ -185,6 +187,7 @@ Future destination candidates:
185187
- `PRIVACY_NOTICE_URL`
186188
- `TRUST_SAFETY_URL`
187189
- `PRIMARY_DESTINATION`
190+
- `REPORT_TYPE_DESTINATION_OVERRIDES`
188191
- `TURNSTILE_POLICY`
189192

190193
## Security And Privacy Guardrails
@@ -248,7 +251,8 @@ Mailroom accepts untrusted input from the open internet and must be designed as
248251
- Version 1 starts as no-storage delivery only to accelerate development and testing.
249252
- Encrypted storage in KV, D1, or R2 is a priority roadmap item.
250253
- Slack webhook and email delivery are first-class destinations.
251-
- One primary delivery destination is configured per deployment.
254+
- One global primary delivery destination is configured per deployment.
255+
- Each form type may override the global primary delivery destination.
252256
- Turnstile is configurable per deployment or through a global instance policy.
253257
- Generated reports are sanitized, size-limited, and treated as untrusted.
254258
- Each Worker serves one operator; multi-tenant routing is not part of version 1.
@@ -261,6 +265,7 @@ Mailroom accepts untrusted input from the open internet and must be designed as
261265
- Should the redirector add `/report-abuse` and `/report-security` helper aliases, or should links live only inside Trust & Safety content?
262266
- Should the v1 launch include privacy, accessibility, internationalization, feedback, and meeting forms, or should those follow after abuse, security, and DMCA prove the engine?
263267
- What exact report reference format should be treated as canonical?
268+
- What public hostname pattern is most understandable and trustworthy for visitors, given that `notification.<operator-domain>` is only the working default?
264269

265270
## Suggested Implementation Phases
266271

@@ -284,7 +289,8 @@ The first useful implementation should include:
284289
- Server-side validation.
285290
- Turnstile verification hook.
286291
- Slack webhook delivery.
287-
- Configurable primary delivery destination.
292+
- Configurable global primary delivery destination.
293+
- Per-form delivery destination overrides.
288294
- Local tests.
289295
- Deployment documentation.
290296

@@ -321,4 +327,6 @@ The Mailroom marketing and documentation website should be similar to `www.vanit
321327
- 2026-05-23: Version 1 supports one operator per Worker.
322328
- 2026-05-23: Recommended report reference format is a human-friendly opaque ID with date prefix, for example `MR-20260523-8X4K2P`.
323329
- 2026-05-23: Version 1 should support multiple form types to prove the intake engine, starting with abuse, security, and DMCA takedown.
324-
- 2026-05-23: Each deployment should use one primary delivery destination.
330+
- 2026-05-23: Initial documentation should use `notification.<operator-domain>` as the working hostname pattern, but this is not believed to be the final best URL strategy.
331+
- 2026-05-23: DMCA takedown should start generic, with a future form library for jurisdiction-specific requirements.
332+
- 2026-05-23: Each deployment should use one global primary delivery destination, and each form type can override it.

0 commit comments

Comments
 (0)