Skip to content

No.285 · CTAs· New

Next Issue

A newsletter sign-up that shows what you'd be signing up for: the last issues with their real subject lines and dates, and an empty dashed slot for the next one that fills with your name when you subscribe.

The prompt

Copy this text

Automatic copying is unavailable. Copy the selected text using your device’s copy command.

Written for the variant you picked above: Paper

Build a newsletter call to action whose evidence is the newsletter itself. No incentive, no "join 10,000 readers". Two columns above 44rem of container width (stacked below). Left: the newsletter's name in a display serif (clamp(2.25rem, 8cqi, 3.5rem), tight tracking, max 14ch), one honest sentence about what it is, how long and how often; then the form: a mono caps "Email" label, a borderless input on a 1px rule that darkens on focus, and a solid 44px pill button that says what it does ("Send me the next issue"), never "Submit". Right: a mono caps caption "Recent issues" and a ruled ordered list of three real issues. Each row is a grid of a mono number ("No. 024"), the subject line in a 21px serif, and a mono date ("1 OCT"). Above them sits the next issue as a dashed-bottom slot with the number and send date, and the italic muted words "Not written yet. Yours, if you sign up." On subscribe: validate the address first (pattern; error text under the field as role=alert, rule turns danger, aria-invalid). Show "Adding" with aria-busy while the promise runs; on failure keep the address and say nothing was saved. On success the form is replaced by a line with a drawn tick: "No. 025 will reach priya@company.com on Thursday 15 October." and a "Use another address" link; at the same time the slot fills with a wash from left to right (scaleX 0 to 1, 520ms cubic-bezier(.2,.8,.2,1)) and its italic text cross-fades to "On its way to you". A role=status line announces it. Paper and Night themes. Selected variant — Paper (paper): Palette for this theme (Paper): --ni-accent #2f6bff; --ni-danger #b42318; --ni-ink #1b1a17; --ni-line rgb(27 26 23 / 0.14); --ni-muted #6b6861; --ni-wash rgb(27 26 23 / 0.05). Treat these as the root colour tokens, one value per role, and name them to suit your code. Select it with the theme option set to "paper". Keep every dimension, spacing value, state and motion from the brief unchanged, and keep text at 4.5:1 contrast or better on these surfaces. This selection takes precedence over references to other themes or options in the general brief. Implement this selected appearance; do not add a variant picker or alternative appearances unless requested. Implementation requirements: Use React and TypeScript. Keep the component self-contained, with uniquely scoped CSS and no animation libraries. Include required imports, styles and font setup in the result. Interaction: Enter an address and subscribe; the empty issue at the head of the list fills in. Try an invalid address first. Motion: Slot wash 520ms, its words cross-fade over 240ms after a 260ms delay; the confirmation rises in 320ms and its tick draws in 360ms. Accessibility: A labelled email input, errors as role=alert with aria-describedby, a busy button, and a status region announcing the result. The recent issues are a real ordered list with <time> elements. Reduced motion makes the wash and tick instant. Responsive behavior: Two columns above 44rem of container width; below it the list rows put the issue number on its own line under 26rem. Touch: Plain form controls; nothing depends on hover. Preserve keyboard access, visible focus and reduced-motion behavior. Keep fictional demo data and simulated service calls in a separate usage example; expose callbacks for real actions and recover from rejected requests. Keep usage-example links inside the demo: use local buttons or prevent navigation. Demonstration links must not navigate to Vitrine routes or open other pages; preserve real URL support in the reusable component itself. Verify the result at narrow and wide viewport sizes, with keyboard input and reduced motion enabled.

Notes

Interaction
Enter an address and subscribe; the empty issue at the head of the list fills in. Try an invalid address first.
Motion
Slot wash 520ms, its words cross-fade over 240ms after a 260ms delay; the confirmation rises in 320ms and its tick draws in 360ms.
Accessibility
A labelled email input, errors as role=alert with aria-describedby, a busy button, and a status region announcing the result. The recent issues are a real ordered list with <time> elements. Reduced motion makes the wash and tick instant.
Responsive
Two columns above 44rem of container width; below it the list rows put the issue number on its own line under 26rem.
On touch
Plain form controls; nothing depends on hover.

Featured

425 components