Staaarter

Event Detail With Countdown

Opens on a full-bleed photo band with a real live countdown (days/hours/minutes/seconds) overlaid into the bottom of the photo. Below that: the event pitch and heading, two CTA buttons, a hairline table of practical facts (date, location, format), and a short speaker list with initials avatars. Perfect for a single event's detail/landing page.

By Staaarter Team
Event
Docs
Live preview

Docs

Installation

A real shadcn registry command, not a copy-paste stand-in: it fetches this block plus its button, avatar, avatar-initials, media-slot dependencies and any missing npm packages, and installs them straight into your project.

npx shadcn add https://staaarter.com/r/event-detail-with-countdown.json

Prefer not to use the CLI? Copy the source from the Code toggle above into src/components/blocks/event/event10.tsx instead.

Usage

The file also exports event10Demo, the exact props behind the preview above. Spread it to get a working section in one line, then replace it with your own data.

import { Event10, event10Demo } from "@/components/blocks/event/event10";

export default function Page() {
  return <Event10 {...event10Demo} />;
}

Props

PropTypeDefaultDescription
eyebrowstring"Join us"Small label above the heading.
headingstring"Two days of talks, workshops, and the best hallway track in tech"Event pitch heading.
descriptionstring"A single-track conference for builders who want less slideware and more shipped code."Supporting copy under the heading.
targetDatestringnoneISO date string the countdown counts down to.
photoMediaSlotImagenoneFull-bleed photo for the top band.
primaryCtaLabelstring"Get your ticket"Primary CTA button label.
primaryCtaHrefstring"#"Primary CTA link target.
secondaryCtaLabelstring"View schedule"Secondary CTA button label.
secondaryCtaHrefstring"#"Secondary CTA link target.
factsEventFact[]nonePractical facts rendered as a hairline-divided table (date, location, format, etc).
speakersEventSpeaker[]noneSpeakers rendered as a short list with initials avatars.
classNamestringnoneExtra classes for the outer section element.

Types

type MediaSlotImage = { src: string; alt: string };

interface EventFact {
  label: string;
  value: string;
}

interface EventSpeaker {
  name: string;
  role: string;
}

Behavior notes

  • The countdown uses the exact live-timer pattern from ComingSoon1: remaining starts at null and renders "--" placeholders on both server and first client render, then a useEffect seeds a setInterval tick every second from Date.now(), so server/client markup always matches and there is no hydration mismatch.
  • Both CTA buttons are decorative links (render={<Link href="#" />}), not real registration/checkout actions.
  • The facts table and speaker list are static, prop-driven content with no interactivity of their own.