One offer in a quiet spot: brand on the tray, the offer in an inset card and one Primary Pill Button.
FreeWeb and MobileMotion
Preview
npx shadcn add @fetaui/promo-cardPlayground
fetaUIPro
$179
Limited Offer
300+ blocks and premium motion components for React and Next.js.
Default
fetaUIPro
$179
Limited Offer
300+ blocks and premium motion components for React and Next.js.
Hover: point at the Button and the arrow leans out
fetaUIPro
$179
Limited Offer
300+ blocks and premium motion components for React and Next.js.
Ending: Claim moves it to Claimed
fetaUIPro
Ends in 02:14:09
Limited Offer
300+ blocks and premium motion components for React and Next.js.
Claimed
fetaUIPro
Paid
You are on fetaUI Pro
Lifetime access unlocked. Your license key is waiting in your inbox.
State
Icons animation
Motion
Installation
Terminal· bash
npx shadcn add @fetaui/promo-card
Accessibility
- A region named by its title.
- The countdown has the timer role, so it is not announced every second.
- The later price is struck with a real s element, and the words beside it say what it means.
Motion
- The arrow moves 2 px up and right in 150 ms on hover and focus.
- Countdown digits roll each second, with no width change.
- Claim crossfades the offer in 240 ms and pops the mark, and the height stays locked.
- With reduced motion, the arrow stays still and digits swap.
Responsive behavior
- 320 px on Web and 358 px on Mobile.
- The Button grows from 44 to 52 px on Mobile.
Performance
- The countdown ticks only on ending, and the interval is cleared on expiry and unmount.
- It reads the clock each tick, so a throttled tab still lands on the right time.
- Only the digits that change roll.
Note for AI
Give your coding assistant the Markdown reference instead of screenshots.
- Import PromoCard from @/components/fetaui/promo-card. brand is required.
- Keep ending to the last 24 hours. endsIn is seconds. At zero onExpire fires and the card returns to default, unless state is controlled.
- On ending, the action moves the card to claimed unless state is controlled. No payment happens, so wire onAction.
- Composes Card, Badge and Button.
Related
CardComponentThe container most of fetaUI is built on: an inset card on a soft tray, with actions on the tray.Plan CardComponentOne plan: name, price, pitch, features and a full width Button.AlertComponentA callout that asks for attention without taking over the page. Card, Inline and Banner in six tones.Rail CardComponentA trip card for horizontal rails: a scene, a nights tag, a heart that saves, then title, place, rating and the total.Consent CardComponentAsks once whether analytics may run, then folds to a one line confirmation.