You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: docs/prd.md
+13-5Lines changed: 13 additions & 5 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -10,7 +10,7 @@ Mailroom is the current project name. Public URLs and page labels should use nam
10
10
11
11
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.
12
12
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.
14
14
15
15
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.
16
16
@@ -140,9 +140,11 @@ Suggested fields:
140
140
- Electronic signature.
141
141
- Optional evidence URL.
142
142
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
+
143
145
## Delivery Integrations
144
146
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:
@@ -248,7 +251,8 @@ Mailroom accepts untrusted input from the open internet and must be designed as
248
251
- Version 1 starts as no-storage delivery only to accelerate development and testing.
249
252
- Encrypted storage in KV, D1, or R2 is a priority roadmap item.
250
253
- 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.
252
256
- Turnstile is configurable per deployment or through a global instance policy.
253
257
- Generated reports are sanitized, size-limited, and treated as untrusted.
254
258
- 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
261
265
- Should the redirector add `/report-abuse` and `/report-security` helper aliases, or should links live only inside Trust & Safety content?
262
266
- Should the v1 launch include privacy, accessibility, internationalization, feedback, and meeting forms, or should those follow after abuse, security, and DMCA prove the engine?
263
267
- 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?
264
269
265
270
## Suggested Implementation Phases
266
271
@@ -284,7 +289,8 @@ The first useful implementation should include:
284
289
- Server-side validation.
285
290
- Turnstile verification hook.
286
291
- Slack webhook delivery.
287
-
- Configurable primary delivery destination.
292
+
- Configurable global primary delivery destination.
293
+
- Per-form delivery destination overrides.
288
294
- Local tests.
289
295
- Deployment documentation.
290
296
@@ -321,4 +327,6 @@ The Mailroom marketing and documentation website should be similar to `www.vanit
321
327
- 2026-05-23: Version 1 supports one operator per Worker.
322
328
- 2026-05-23: Recommended report reference format is a human-friendly opaque ID with date prefix, for example `MR-20260523-8X4K2P`.
323
329
- 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