Skip to content

No.284 · Sections· New

Product Atelier

A complete product configuration spread with finish, size, availability and purchase feedback.

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: Light surface

Build a two-column product atelier. An original adjustable desk-lamp SVG occupies a tinted plinth on the left; the right has maker in mono, large serif title, restrained description, ruled option groups and a purchase summary. Use native labelled radios for finish and height. Explicit variant records supply imagery, integer minor-unit prices and availability: choosing either dimension updates the image, price and availability together. Unsupported combinations explain why the purchase action is disabled. Call onAdd with the selected variant ID; pending prevents duplicate purchase, success appears only on resolution, rejected calls expose an error and allow retry. No animated product spin. Stack the image above the choices below 700px. Reduced motion keeps all state changes immediate. Selected variant — Light surface (light): Use surface="light": warm off-white ground, ink text, deep green accents, hairline grey-green rules and restrained contact shadows. Preserve the specified geometry and behaviour. 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: Choose finish and height, then add the available variant to the basket. Motion: User-triggered transitions only, 180–240ms. Reduced motion removes transitions. Accessibility: Native radio fieldsets with legends; labelled product image, availability live text, pending disabled actions and announced recoverable errors. Responsive behavior: Fluid layout at 320px and above. Columns stack on narrow containers; text wraps without clipping. Touch: All actions use direct tap targets of at least 44px; no hover-only information. 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
Choose finish and height, then add the available variant to the basket.
Motion
User-triggered transitions only, 180–240ms. Reduced motion removes transitions.
Accessibility
Native radio fieldsets with legends; labelled product image, availability live text, pending disabled actions and announced recoverable errors.
Responsive
Fluid layout at 320px and above. Columns stack on narrow containers; text wraps without clipping.
On touch
All actions use direct tap targets of at least 44px; no hover-only information.

Featured

310 components