MediaCard
High-level card combining media (image/video) with positioned content
Flattens Surface + MediaFrame + Layer into a single ergonomic component
Two layouts: overlay (content on image) and stacked (content below image)
import { MediaCard } from "@everydayos/ui";Usage
Product image card with bottom-left text overlay

Climate System
Air^ 1.0

Wellness
The quiet comfort of clean air
Why air quality matters for daily focus.
API
overlaynoneaspectradiussmcontentPositionbottom-leftlayoutoverlaytonemuted| Prop | Type | Default |
|---|---|---|
media | React.ReactNode | — |
interactive | boolean | false |
className | string | — |
children | React.ReactNode | — |
Examples
Wide Hero Card
Cinematic wide card with overlay content and CTA

A beautiful take on home climate
One seamless solution for heating, cooling, and purification.
Stacked Card
Image on top, content below — for blog posts and listings
<MediaCard
layout="stacked"
aspect="3/2"
tone="muted"
interactive
className="w-full"
media={<Image src="/blog.jpg" fill className="object-cover" alt="" />}
>
<Stack spacing="xs">
<Text size="s" className="opacity-40">Category</Text>
<Heading as="h3" size="s">Article title goes here</Heading>
<Text size="s" variant="muted">Brief description of the article content.</Text>
</Stack>
</MediaCard>Interactive Feature Card
Clickable card with hover lift for feature grids
<MediaCard
aspect="4/3"
overlay="bottomFade"
contentPosition="bottom-left"
interactive
className="w-full"
media={<Image src="/feature.jpg" fill className="object-cover" alt="" />}
>
<Stack spacing="xs">
<Text size="s" className="text-white/40 uppercase tracking-wider">Step 1</Text>
<Heading as="h4" size="s" className="text-white">Explore</Heading>
</Stack>
</MediaCard>Composition
Pairs well with
When to avoid
- Need complex multi-layer composition — use MediaFrame + Layer directly
- No media — use Card or Surface instead
- Need custom overlay positioning — use MediaFrame + Layer
Patterns
Feature Grid
Grid of media cards for feature showcases or product categories
<Section>
<Stack spacing="lg">
<Heading as="h2" size="xl">Features</Heading>
<Grid cols={3} gap="md">
<MediaCard
aspect="4/3"
overlay="bottomFade"
contentPosition="bottom-left"
interactive
media={<Image src="/feature-1.jpg" fill className="object-cover" alt="" />}
>
<Heading as="h3" size="s" className="text-white">Heating</Heading>
</MediaCard>
<MediaCard
aspect="4/3"
overlay="bottomFade"
contentPosition="bottom-left"
interactive
media={<Image src="/feature-2.jpg" fill className="object-cover" alt="" />}
>
<Heading as="h3" size="s" className="text-white">Cooling</Heading>
</MediaCard>
<MediaCard
aspect="4/3"
overlay="bottomFade"
contentPosition="bottom-left"
interactive
media={<Image src="/feature-3.jpg" fill className="object-cover" alt="" />}
>
<Heading as="h3" size="s" className="text-white">Purification</Heading>
</MediaCard>
</Grid>
</Stack>
</Section>Blog / Article Listing
Grid of stacked media cards for content listings
<Grid cols={3} gap="md">
<MediaCard layout="stacked" aspect="3/2" tone="muted" interactive
media={<Image src="/blog-1.jpg" fill className="object-cover" alt="" />}>
<Stack spacing="xs">
<Text size="s" variant="muted">Design</Text>
<Heading as="h3" size="s">Article Title</Heading>
</Stack>
</MediaCard>
<MediaCard layout="stacked" aspect="3/2" tone="muted" interactive
media={<Image src="/blog-2.jpg" fill className="object-cover" alt="" />}>
<Stack spacing="xs">
<Text size="s" variant="muted">Engineering</Text>
<Heading as="h3" size="s">Another Article</Heading>
</Stack>
</MediaCard>
</Grid>Video Hero Card
Full-width hero with autoplay video background and CTA
<Section spacing="none">
<MediaCard
overlay="darkVignette"
contentPosition="bottom-left"
radius="sm"
className="h-[80vh]"
media={
<video autoPlay muted loop playsInline
className="absolute inset-0 w-full h-full object-cover"
src="/hero.mp4"
/>
}
>
<Stack spacing="md" className="max-w-xl">
<Heading as="h1" size="display" className="text-white">
Air 1
</Heading>
<Text size="l" className="text-white/80">
Designed to belong in your home.
</Text>
<Inline spacing="md">
<Button size="xl">Get Started</Button>
<Button size="xl" variant="outline" className="text-white border-white/30">
Learn More
</Button>
</Inline>
</Stack>
</MediaCard>
</Section>