No.239 · Time· New
Activity Timeline
A live activity feed grouped by day: round nodes on a rail (a triangle for deploys, a branch for merges, initials for comments, a red alert), status chips, filter tabs, relative times, and log excerpts or comments that expand in place. New events drop in at the top.
The prompt
Written for the variant you picked above: Light
Build an activity feed for a fictional product team, Inter 14.5px/1.5. Palette (light / dark): ink #18181b / #ececef, muted #6b6b73 / #a1a1aa, faint #a1a1aa / #6b6b73, card #ffffff / #111113, hairline #e6e6ea / #26262b, chip #f3f3f5 / #1c1c20, accent #2563eb / #6ea8fe, ok #15803d / #3fb950, failed #c81e1e / #ff6369, building #b45309 / #f5b14c. Dates: take a 'now' and a time zone (UTC by default) as props and read every date with Intl in that zone, so the server and the browser print the same words. Day labels are 'Today', 'Yesterday' or 'Sun 4 Oct'; every date is a <time datetime>. Relative times are 'just now', '4m ago', '3h ago', then the clock time. Header: 'Activity', a green 'Live' dot that pings, and a segmented filter row (All, Deploys, Comments, Code, Alerts, Team) on a chip background where the pressed one is a raised card (aria-pressed). Below, day groups ('TODAY' in small caps, muted) each holding an ordered list hung on a 1px rail: a 28px round node per event (a filled triangle for deploys, a branch for merges, initials for comments, a solid red circle with '!' for alerts, a person-plus for team, a tag for releases), then '<strong>Layla Haddad</strong> deployed <mono>main</mono> to Production' with an optional status chip (Ready green, Failed red, Building amber with a blinking dot) and the relative time on the right. Some events have 'Show details' (aria-expanded, aria-controls) revealing a mono block on the chip colour. A new event arrives every 7s in the demo and drops in at the top (a 0.35s fade and slide). The feed is a polite live region for additions. Show it on a #fafafa / #0b0b0c page. Selected variant — Light (light): Palette for this theme (Light): --actl-accent #2563eb; --actl-alert #dc2626; --actl-bad #c81e1e; --actl-card #ffffff; --actl-chip #f3f3f5; --actl-deploy #18181b; --actl-faint #a1a1aa; --actl-fixed #13703a; --actl-fixed-bg #e7f6ec; --actl-focus #2563eb; --actl-improved #6b2fd6; --actl-improved-bg #f2ecff; --actl-ink #18181b; --actl-invite #0e7490; --actl-line #e6e6ea; --actl-merge #7c3aed; --actl-new #1d4fd8; --actl-new-bg #e9f0ff; --actl-ok #15803d; --actl-release #2563eb; --actl-run #b45309; --actl-soft #6b6b73. 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 "light". 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: Filter buttons narrow the feed; 'Show details' buttons expand log excerpts and comments. Motion: New items drop in over 0.35s; the live dot pings; a building status blinks. Reduced motion removes all of it. Accessibility: A labelled section with real headings and ordered lists; statuses are words, not only colours; a polite live region announces additions. Responsive behavior: On narrow screens the filters scroll sideways and the times drop under the sentence. Touch: Every control is a tap target. 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
- Filter buttons narrow the feed; 'Show details' buttons expand log excerpts and comments.
- Motion
- New items drop in over 0.35s; the live dot pings; a building status blinks. Reduced motion removes all of it.
- Accessibility
- A labelled section with real headings and ordered lists; statuses are words, not only colours; a polite live region announces additions.
- Responsive
- On narrow screens the filters scroll sideways and the times drop under the sentence.
- On touch
- Every control is a tap target.