Skip to content

shadcn.io is an independent project built on shadcn/ui

Virtual Event Product Card Block for React Aria

An online conference start time that rewrites itself for seven cities from a typed offset table, shifts the day when it passes midnight, offers Free, Standard and VIP tickets, and saves a real calendar file.

Preview

Preview width

Installation

Part of Pro
Pro unlocks the code and one-line install of every Pro button and text effect, plus the MCP for your AI editor.
Have Pro already? Sign in to open it.Opens here as soon as you're Pro.

Overview

Answer "what time is that for me?" before anyone asks with this virtual event card for React with React Aria. A hairline frame holds a drawn video call at the start and a Select of seven cities (Los Angeles, New York, London, Paris, Mumbai, Tokyo, Sydney). Choosing one rewrites the start in that city's own time, "Thu 12 Nov, 08:00 to 11:00", and when the local time falls past midnight it says so in words and moves the date to Friday 13 Nov. The offsets are one typed table, valid on that date. At the end a Free, Standard and VIP choice sets the price, and one Shine Button reserves the seat. A ghost button really saves a .ics calendar file, built in the browser. For online conferences, webinars and launches with a worldwide audience.

FAQ

How do I add a city or change the date?

Add an entry to CITIES with its offset in minutes from UTC on the event date, and the same entry to the select's collection. The start is START_UTC in minutes, the length is HOURS, and BASE_DAY and BASE_WEEKDAY give the date that the day shift counts from.

Why a typed table and not Intl time zones?

Offsets change with daylight saving, and the output of Intl differs between the server and the browser. A typed table valid for one date is the same everywhere and is easy to check. For a series of events, compute the offsets on the server for each date and pass them in.

Does Add to calendar really work?

Yes. It builds a small calendar file from the lines in CALENDAR_LINES, in UTC so every calendar converts it, and saves it with a download link made in the click handler. Nothing is uploaded.

What stays local, and how do I wire it for real?

The seat, the choice of tier and the city are page state, and nothing is sent. Replace the body of reserve with a call to your registration service, and the platform line with your own streaming details.

How does it look on a phone?

The drawing, the select and the start time stack first, then the tiers and the button, with the same copy at every width. The reserved lines under the time keep the card from jumping when the city changes.

Is it accessible?

The select is named "Your time zone", the tiers are a fieldset of native radios with arrow-key movement, and the start time is plain text that the polite status line repeats after each change.