webmail-bulk-email is a self-service webmail product for sending one message to many recipients at once and having those messages land in recipients' inboxes rather than spam or bulk folders. The product is built for senders — marketers, small operations teams, and community organisers — who judge the tool by what happens after they press send, and who want to see the delivery machinery (routing, authentication, queue, inbox placement) rather than a friendly marketing gloss.
The product's intent is trust through transparency: a composed message on one side, the machine that delivers it on the other. Senders enroll themselves, build and maintain recipient sets, author a bulk message with a subject and body, dispatch it in one operation, and then review delivery outcomes to confirm inbox placement.
This document is the System Requirements Document for the product; it specifies the current delivery, its actors, its pages, its functional requirements, and its design direction.
webmail-bulk-email is delivered as a first-party web application with a custom React front end, a shared FastAPI backend, and a MariaDB database for application-owned persistent data. All product surfaces — Landing, Sign Up, Login, Compose, Recipients, and Delivery Reports — are owned and rendered by the application.
Identity is application-owned. A sender establishes identity through self-service Sign Up and verifies returning identity through Login. Landing, Sign Up, and Login are anonymously reachable; Compose, Recipients, and Delivery Reports require a logged-in sender and are protected. There is no differentiated permission model: every authenticated sender sees and works with their own recipient sets, sends, and delivery reports.
Recipients are external actors. They receive bulk-sent messages in their own inboxes through the delivery machinery; they do not use the product's interface. The product's promise — inbox, not spam — is realized by the delivery pipeline and made observable to the sender through Delivery Reports.
Current scope is limited to: self-service enrollment and login, recipient-set management, bulk message composition and dispatch, and delivery-outcome review. No adjacent capabilities (campaign scheduling, template libraries, analytics beyond delivery outcomes, team collaboration, billing) are part of the current product.
FR-1 — Bulk send from webmail interface (explicit) As a Bulk Email Sender, I should send one email to many recipients at once from a webmail interface, so that I can reach my audience in a single operation.
FR-2 — Inbox delivery intent (explicit) As a Bulk Email Sender, I should have bulk-sent email delivered to recipients' inboxes rather than spam or bulk folders, so that my messages are actually seen.
FR-3 — Self-service enrollment (required_inference) As a Bulk Email Sender, I should complete self-service enrollment via Sign Up, so that I can begin using the product independently.
FR-4 — Returning identity verification (required_inference) As a Bulk Email Sender, I should verify my returning identity via Login, so that I can reach my protected recipient lists, sends, and delivery reports.
FR-5 — Recipient set management (required_inference) As a Bulk Email Sender, I should specify and manage the recipient set used in bulk sends, so that a send has a defined audience.
FR-6 — Dispatch before outcome review (required_inference) As a Bulk Email Sender, I should dispatch a bulk send before delivery outcomes can be reviewed, so that Delivery Reports reflect actual sends.
FR-7 — Recipient receives in inbox (required_inference) As an Email Recipient, I should receive bulk-sent messages in my inbox rather than spam or bulk folders, so that the sender's message reaches me.
Muse: Adham Dannaway. Headline: "Send to many. Land in the inbox."
Palette (light mode):
#F7F5F0 (warm paper ground)#FFFFFF (cards, message editor)#14161A (deep ink)#E4572E (burnt orange — the only hot colour)#6B6F76 (metadata, helper text)Dark technical panel: ink #14161A ground with #F7F5F0 text and #E4572E signal accents for queue states, verification ticks, and the send CTA.
Contrast: ink on paper ≈ 15:1; orange on ink ≈ 5.1:1 at large sizes, reserved for labels ≥16px semibold; body copy never orange on paper.
Typography:
clamp(56px, 8vw, 104px); h2 32/44; h3 22/28; body 16/18; micro-label 11/12 uppercase +0.12em; mono data 13/14. Line-height 1.05 on display, 1.6 on body.Shape language: Precise 8-pt geometry with a hard vertical split as the organising motif. Sharp 2px corners on panels and inputs (no pill buttons); 1px hairlines in #14161A at 12% opacity; a single 2px orange rule down the split seam on the hero. Small details: a tiny wireframe-to-solid toggle, a caret-style cursor block in the mono panel, dashed outlines on drop targets.
Layout: Split-screen primary structure — left warm paper with composed message and human copy, right ink-dark with delivery machinery. Asymmetric 7/5 column split on desktop, stacking to a single column under 768px with the dark technical panel becoming a bordered inset card. Sparse chrome, 96px section padding on desktop, 24px on mobile. Protected app pages keep the split as a persistent left rail (compose/recipients/reports) against a wide working canvas.
Imagery: Diagrams over photography — envelope-to-inbox path drawings, wireframe message wireframes resolving into solid rendered cards, domain-authentication schematics, a half-wireframe/half-solid envelope in CSS and SVG. No stock people, no gradient blobs. The product's own interface is the hero imagery.
The public entry is a full-viewport horizontal split (7/5 on desktop): the left half is warm paper #F7F5F0 with an oversized Space Grotesk headline "Send to many. Land in the inbox." set at clamp(56px, 8vw, 104px), flush left, broken across three lines, with a single burnt-orange text link "Start sending" beneath it and an 11px uppercase micro-label "BULK WEBMAIL / INBOX DELIVERY" pinned top-left. The right half is ink #14161A carrying a live delivery panel: a stacked queue of recipient rows in IBM Plex Mono with orange status dots, a large "99.2% inbox placement" numeral, and a wireframe envelope SVG that resolves to solid on hover. A 2px orange rule runs the seam between halves and extends past the top and bottom edges. No centred headline, no subtext paragraph, no blue button, no gradient.
Signature moves: the 50/50 split hero with a 2px orange seam rule running off both top and bottom edges; a wireframe-to-solid hover toggle on the seam or envelope SVG; the dark technical panel as a persistent component reused on Compose and Delivery Reports; oversized flush-left display headline stacked over the light half only; sharp 2px-corner inputs and panels with 1px hairline borders plus a monospace metadata strip ("FROM / DOMAIN / RECIPIENTS / QUEUE") under every form.
Interaction Model: Animated Motion Tempo: expressive Hero Dimensionality: layered_2d
Landing Hero Motion Brief
prefers-reduced-motion, provide a usable static arrangement; the seam rule stays put and all motion is disabled.No completed page designs yet.
Completed design pages will appear here when they are ready to preview.
No completed page designs yet.
Completed design pages will appear here when they are ready to preview.
No comments yet. Be the first!