Experience / Application
Events
Your events — the ones you are going to, hosting, or speaking at.
Distinct from the public events index: this is a personal calendar, so it is ordered by what you have to do next rather than by what is popular, and every row says what you are to the event. Hosting a dinner and being in the audience are the same date and completely different weeks.
The next event is lifted out into a hero. On a list where every row looks alike, the one that matters this week is the one that should not — and it is the only place with room for the event's own picture, which is how you recognise it before you have read anything. The event after it rides along underneath, because "and then?" is the second question anyone asks.
The list can be read two ways. Rows are for scanning a calendar down its left edge; cards are for browsing when you are not sure what you are looking for. Search cuts across both, and past events keep their attendance badge — "I spoke at that" is the reason anyone scrolls back.
Not exported from @meetcard/deck — this is a composed screen, built from the components below rather than shipped as one.
Stories
Source
const Default = () => <Events />;Past events keep their attendance badge — "I spoke at that" is the reason anyone scrolls back — and read newest first.
Source
const Past = () => <Events defaultTab="past" />;Switching lists. The counts are on the control, so neither is a surprise.
Source
const SwitchingLists = () => <Events />;A new account. The empty list points at the next action rather than a void.
Source
const NoEvents = () => <Events events={[]} />;Everything is behind you — no featured card, because there is nothing coming to feature.
Source
const AllPast = () => <Events today="2028-01-01" />;The page in the shell it actually lives in.
Source
const InTheShell = () => (
<AppShell currentId="/events">
<Events />
</AppShell>
);Search cuts across the list you are in. It looks at the three things anyone remembers about an event they are trying to find again: what it was called, where it was held, and what town it was in.
Source
const Searching = () => <Events />;Nothing matched. The way out is the control that got you here.
Source
const SearchWithNoMatches = () => <Events />;The same events as cards. Rows are for scanning a calendar down its left edge; cards are for browsing when you are not sure what you are after.
Source
const CardView = () => <Events defaultView="cards" />;Switching between the two shapes without losing your place in the list.
Source
const SwitchingViews = () => <Events />;Past events carry what you came away with — the faces and the count. That is the only question anyone asks of an event a year later, and the reason the list is worth scrolling back through.
Source
const PastCarriesTheCards = () => <Events defaultTab="past" />;Phone. The cover thumbnails come off the rows — the name needs the width more than the picture does — and the toolbar wraps into stacked controls.
Source
const Mobile = () => <Events />;Props
| Prop | Type | Default | Description |
|---|---|---|---|
defaultTab | 'upcoming' | 'past' | 'upcoming' | Which list opens first. |
defaultView | 'list' | 'cards' | 'list' | Which shape the list opens in. |
events | AppEvent[] | [
{
slug: 'revops-summit',
name: 'RevOps Summit',
date: '2027-05-18',
time: '9:00 AM',
endTime: '4:30 PM',
venue: 'Austin Convention Center',
city: 'Austin, Texas',
address: '500 E Cesar Chavez St, Austin, Texas',
attendance: 'attending',
coverSrc: COVERS.revops,
host: { name: 'Hannah Davis', detail: 'Community Lead, RevOps Collective' },
going: ['Hannah Davis', 'Marcus Lee', 'Priya Shah'],
expected: 420,
about: [
'A full day of operators trading the unglamorous details: routing rules, attribution models, and the spreadsheets nobody admits to running the business on.',
'Bring cards — the hallway track is the real program.',
],
schedule: [
{ time: '9:00 AM', title: 'Doors and coffee' },
{ time: '10:00 AM', title: 'Keynote: Pipeline you can trust' },
{ time: '12:30 PM', title: 'Lunch and card exchange' },
{ time: '2:00 PM', title: 'Breakouts' },
{ time: '4:30 PM', title: 'Closing reception' },
],
},
{
slug: 'boulder-climate',
name: 'Boulder Climate Happy Hour',
date: '2027-06-16',
time: '5:30 PM',
venue: 'Rayback Collective',
city: 'Boulder, Colorado',
address: '2775 Valmont Rd, Boulder, Colorado',
attendance: 'hosting',
coverSrc: COVERS.climate,
host: { name: 'Alex Rivera', detail: 'Design Lead, Northwind Studio' },
going: ['Hannah Davis'],
expected: 60,
about: [
'Drinks on the patio with the people building climate tools in the Front Range. No panel, no slides.',
],
},
{
slug: 'saastr-annual',
name: 'SaaStr Annual',
date: '2027-09-09',
time: '10:00 AM',
endTime: '6:00 PM',
venue: 'Moscone West',
city: 'San Francisco, California',
address: '800 Howard St, San Francisco, California',
attendance: 'speaking',
coverSrc: COVERS.saastr,
host: { name: 'SaaStr', detail: 'Conference' },
expected: 12_000,
about: [
'The big one. Three halls, a thousand conversations, and a badge scanner you will want to leave in your bag.',
],
schedule: [
{ time: '10:00 AM', title: 'Opening remarks' },
{ time: '11:30 AM', title: 'Panel: What operators actually measure' },
{ time: '2:00 PM', title: 'Your session: Designing for the handshake' },
],
},
{
slug: 'founders-dinner',
name: 'Founders Dinner',
date: '2027-11-02',
time: '7:00 PM',
venue: 'The Wayfarer',
city: 'Denver, Colorado',
address: '1600 15th St, Denver, Colorado',
attendance: 'hosting',
host: { name: 'Alex Rivera', detail: 'Design Lead, Northwind Studio' },
expected: 12,
about: ['Six to a table, one long conversation, no name badges.'],
},
{
slug: 'frontend-denver',
name: 'Frontend Denver',
date: '2027-02-11',
time: '6:00 PM',
venue: 'Industry RiNo',
city: 'Denver, Colorado',
address: '3001 Brighton Blvd, Denver, Colorado',
attendance: 'attending',
host: { name: 'Mira Okafor', detail: 'Organiser' },
exchanged: ['Mira Okafor', 'Theo Marsh', 'June Park', 'Sam Ortiz'],
about: ['Two talks and a long hallway track.'],
},
{
slug: 'saas-north',
name: 'SaaS North',
date: '2026-11-19',
time: '9:30 AM',
endTime: '5:00 PM',
venue: 'Shaw Centre',
city: 'Ottawa, Ontario',
address: '55 Colonel By Dr, Ottawa, Ontario',
attendance: 'attending',
host: { name: 'SaaS North', detail: 'Conference' },
exchanged: [
'Ada Chen',
'Owen Hale',
'Nora Quinn',
'Arlo Bennett',
'Dev Patel',
],
about: ['Canada’s SaaS conference, in the cold.'],
},
] | — |
today | string | '2027-05-04' | ISO date the page reads "upcoming" from. Pinned in stories and tests. |