pastetaste
Reply Burst
A cloud of incoming questions around a hub. A short streak fires from the hub at each one in turn; where it lands the chip turns from waiting to answered, the avatar flips to a check and the text rolls over to the reply.
Paste it into Claude Code: it installs the component, asks for your brand and content, and places it on the page you name.
Live demo. Move the mouse and scroll inside it.
Install
Or by hand, in a Next.js project with shadcn set up. It writes components/pastetaste/reply-burst.tsx.
npx shadcn@latest add https://pastetaste.com/r/reply-burst.jsonPrompt
Install the pastetaste component "Reply Burst" (reply-burst) into this Next.js project and use it.
What it is: A cloud of incoming questions around a hub. A short streak fires from the hub at each one in turn; where it lands the chip turns from waiting to answered, the avatar flips to a check and the text rolls over to the reply.
Before you place it, ask me (one short message, in my language; "skip" = sensible default): which page and section it goes in, my brand colour (hex), the text, labels or images it should show, and whether I want my logo or my own copy in the demo content. Then:
Steps:
1. If the project has no components.json, run: npx shadcn@latest init -y -d. Then run: npx shadcn@latest add https://pastetaste.com/r/reply-burst.json
(it writes components/pastetaste/reply-burst.tsx; install any npm packages it reports).
2. Import it: import { ReplyBurst } from "@/components/pastetaste/reply-burst" (check the file for the exact named export).
3. Put it where it fits on the page I name, keep the rest of the page untouched, and pass props for my colours instead of editing the installed file.
4. It does not depend on Tailwind; colours come from CSS variables (--pt-*) or props.
5. It supports prefers-reduced-motion with a still state; do not remove it.
Props (all optional unless the type has no default):
- items: ReplyBurstItem[] = 8 support questions — The questions: { text, reply?, avatar?, name?, at?, depth? }. Chips never wrap, keep text under ~34 characters. 6 to 14 read best on desktop, 5 to 8 on a phone.
- hub: ReactNode = 'instantly' — Content in the centre that the streaks fire from.
- status / statusText: boolean / (open, total) => string = true / '{open} waiting' then 'All {total} answered' — Small live count under the hub.
- doneLabel: string = 'Answered' — Reply shown on chips that have no reply of their own.
- autoPlay: boolean = true — Fire the replies by themselves once the field is a quarter on screen. Off: the chips pop in and wait to be pressed.
- loop / hold: boolean / number = false / 2.8 — Clear the answered cloud and play again after hold seconds (only while on screen).
- pace: number = 0.22 — Seconds between two replies. Streak flight time follows the distance (0.22 to 0.56 s).
- order: 'nearest' | 'list' | 'shuffle' = 'nearest' — Who gets answered first: a ripple outwards from the hub, list order, or a seeded shuffle.
- seed: number = 7 — Changes the scatter, the chip depths and the shuffle.
- interactive: boolean = true — Waiting chips are buttons; pressing one fires its reply now.
- dolly: boolean = true — The field pulls back 3.5% while the replies go out.
- colors: Partial<{ pending, pendingText, mid, done, doneText, check, line, hub }> = warm orange to white, ink check and streaks — Chip fills and text for both states, the tone a chip passes through while it turns, check disc, streak and hub colour.
- onProgress / onResolve / onComplete: (answered, total) => void / (index, item) => void / () => void — Progress after every reply and on a loop restart (answered 0), the chip just answered, and the end of a run.
- label: string = 'Incoming questions' — Accessible name of the group.
Live preview: https://pastetaste.com/c/reply-burst
Then run the dev server, check it in the browser at desktop and mobile width, and tell me the page URL.Props 14
| Prop | Type | Default | Description |
|---|---|---|---|
| items | ReplyBurstItem[] | 8 support questions | The questions: { text, reply?, avatar?, name?, at?, depth? }. Chips never wrap, keep text under ~34 characters. 6 to 14 read best on desktop, 5 to 8 on a phone. |
| hub | ReactNode | 'instantly' | Content in the centre that the streaks fire from. |
| status / statusText | boolean / (open, total) => string | true / '{open} waiting' then 'All {total} answered' | Small live count under the hub. |
| doneLabel | string | 'Answered' | Reply shown on chips that have no reply of their own. |
| autoPlay | boolean | true | Fire the replies by themselves once the field is a quarter on screen. Off: the chips pop in and wait to be pressed. |
| loop / hold | boolean / number | false / 2.8 | Clear the answered cloud and play again after hold seconds (only while on screen). |
| pace | number | 0.22 | Seconds between two replies. Streak flight time follows the distance (0.22 to 0.56 s). |
| order | 'nearest' | 'list' | 'shuffle' | 'nearest' | Who gets answered first: a ripple outwards from the hub, list order, or a seeded shuffle. |
| seed | number | 7 | Changes the scatter, the chip depths and the shuffle. |
| interactive | boolean | true | Waiting chips are buttons; pressing one fires its reply now. |
| dolly | boolean | true | The field pulls back 3.5% while the replies go out. |
| colors | Partial<{ pending, pendingText, mid, done, doneText, check, line, hub }> | warm orange to white, ink check and streaks | Chip fills and text for both states, the tone a chip passes through while it turns, check disc, streak and hub colour. |
| onProgress / onResolve / onComplete | (answered, total) => void / (index, item) => void / () => void | - | Progress after every reply and on a loop restart (answered 0), the chip just answered, and the end of a run. |
| label | string | 'Incoming questions' | Accessible name of the group. |