# Image card 02

> A heading with actions beside it, over eight people with square photos.

URL: https://apogee.avaui.dev/docs/team-sections/image-card-02
Last updated: 2026-10-20

A heading with actions beside it, over eight people with square photos.

Last updated October 20, 2026

Live example: https://apogee.avaui.dev/examples/team/image-card-02

```astro
---
/**
 * Image card 02: A heading with actions beside it, over eight people with square photos.
 *
 * @block team
 * @order 6
 */
import Section from '@/components/apogee/Section/Section.astro'
import SectionHeader from '@/components/apogee/SectionHeader/SectionHeader.astro'
import Heading from '@/components/apogee/Heading/Heading.astro'
import Image from '@/components/apogee/Image/Image.astro'
import Button from '@/components/apogee/Button/Button.astro'
import { plain } from '@/components/apogee/sections/_shared/spine.ts'
import type { TeamContent } from '@/components/apogee/sections/_shared/team.ts'

/** @composable */
interface Props extends TeamContent {}

const {
  eyebrow = 'Our team',
  heading = "Some of the people you'll work with",
  description = "We're a fully remote team spread across the world. Join us!",
  primaryAction = { label: 'Open positions', href: '#' },
  secondaryAction = { label: 'About us', href: '#' },
  items = [
    { name: 'Maya Okafor', role: 'Founder and CEO', avatar: 'https://picsum.photos/id/1027/600/600' },
    { name: 'Tomas Lindqvist', role: 'Engineering Manager', avatar: 'https://picsum.photos/id/856/600/600' },
    { name: 'Priya Raman', role: 'Product Manager', avatar: 'https://picsum.photos/id/832/600/600' },
    { name: 'Jonah Weiss', role: 'Frontend Developer', avatar: 'https://picsum.photos/id/91/600/600' },
    { name: 'Lucía Ortega', role: 'Backend Developer', avatar: 'https://picsum.photos/id/64/600/600' },
    { name: 'Samir Haddad', role: 'Product Designer', avatar: 'https://picsum.photos/id/375/600/600' },
    { name: 'Hana Kobayashi', role: 'UX Researcher', avatar: 'https://picsum.photos/id/823/600/600' },
    { name: 'Eli Brennan', role: 'Customer Success', avatar: 'https://picsum.photos/id/836/600/600' },
  ],
} = Astro.props
---

<Section spacing="large">
  <div class="flex flex-col gap-12 md:gap-16">
    <SectionHeader eyebrow={eyebrow ?? undefined} heading={plain(heading)} description={description ?? undefined} size="large">
      {(primaryAction || secondaryAction) && <Fragment slot="actions"><div class="flex flex-col gap-3 sm:flex-row-reverse sm:justify-end">
        {primaryAction && <Button href={primaryAction.href} size="large">{primaryAction.label}</Button>}
        {secondaryAction && <Button href={secondaryAction.href} size="large" variant="outline" color="neutral">{secondaryAction.label}</Button>}
      </div></Fragment>}
    </SectionHeader>
    <ul class="grid list-none p-0 gap-x-8 gap-y-12 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4">
      {items.map((p) => (
        <li><div class="flex flex-col gap-5">{p.avatar && <Image src={p.avatar} alt="" width={600} height={600} fit="cover" class="aspect-square w-full" />}<div class="flex flex-col"><Heading as="h3" size="h6">{p.name}</Heading><p class="text-primary">{p.role}</p>{p.bio && <p class="mt-2 text-neutral-faded">{p.bio}</p>}</div></div></li>
      ))}
    </ul>
  </div>
</Section>
```

## Add

```sh
npx @ava-ui/apogee add team/image-card-02
```

This copies the block to `src/components/apogee/blocks/team/` with everything it uses: Button, Heading, Image, Section, SectionHeader. Every piece of copy is a prop, with the sample copy as its default. Pass yours, or `null` to hide a part; see [copy is props](https://apogee.avaui.dev/docs/team-sections#copy-is-props).

## Accessibility

-   The heading is an `h2` by default, so the block slots into a page under its `h1`; item titles are one level down.
-   Photos that only decorate have an empty `alt`; give yours one when it carries meaning.

## Related

[

TeamPeople as a grid of cards or a list with bios.

](https://apogee.avaui.dev/docs/sections/team)[

ImageA responsive, lazy-loaded image — wraps astro:assets Image with sensible defaults.

](https://apogee.avaui.dev/docs/image)[

CarouselA horizontal scroll-snap track for browsing slides. Native scroll and swipe work with zero JS; arrows, dots, and autoplay are progressive enhancement.

](https://apogee.avaui.dev/docs/carousel)
