The identity of a record at a glance — a contact, a company, a product, an employee — with status, key facts, a stat row and quick actions. Four shapes: a grid card, a compact row for side panels, the header of a record page, and an inline chip that opens a hover card.
Jane Cooper
Head of Operations · Northwind Traders
- Owner
- Ayşe Kaya
- Last contact
- Nov 6, 2026 · Call
- Time zone
- Pacific (UTC−8)
Installation
The whole kit as one package — get updates by bumping the version. Add the styles to globals.css: @import "@vamos-ui/react/styles.css";
Usage
import { EntityCard } from "@vamos-ui/react";
<EntityCard
name="Jane Cooper"
subtitle="Head of Operations · Northwind Traders"
status={{ tone: "success", label: "Customer" }}
contact={{ email: "jane.cooper@northwind.com", phone: "+1 (415) 555-0136" }}
fields={[{ key: "owner", label: "Owner", value: "Ayşe Kaya" }]}
href="/contacts/jane-cooper"
/>The card is an <article> labelled by the name heading. With href, only the name is a link; actions stay separate buttons above the stretched link, each with a name that includes the record.
Initials are locale-correct ("ilker şahin" → "İŞ" in Turkish) via Avatar.
Examples
Company with stats
stats is a row of 2–3 numbers formatted with the current locale (currency, percent); they wrap instead of truncating.
Northwind Traders
northwind.com · Logistics · 240 employees
- Open deals
- 4
- Pipeline
- $182,400
- Win rate
- 38%
Bosphorus Dental Clinic
bosphorusdental.com · Healthcare
- Open deals
- 1
- Pipeline
- $24,000
- Win rate
- 50%
Product tiles (commerce admin)
kind="product" swaps the avatar for an image tile; without a photo it shows a package icon.
Record header (HR)
variant="header": larger media, an h1 (or headingAs), a stat band and a three-column fact grid.
Selin Arslan
Senior Product Designer · Design team · Istanbul office
Leads the design system and the mobile app redesign. Joined from Trendyol in 2023.
- Tenure
- 2 yrs 8 mo
- Leave balance
- 11 days
- Reviews
- 6
- Direct reports
- 3
- Manager
- Can Demir
- Start date
- Mar 6, 2023
- Location
- Istanbul, TR
- Employee ID
- EMP-00418
- Contract
- Permanent
- Salary band
- L5
Inline chip with hover card
variant="chip" fits inside text; the hover card is supplementary — the link carries everything.
Deal owner Daniel Brooks moved this deal to Negotiation with Northwind Traders.
Side-panel rows, archived, selected, loading
API
EntityCard
| Prop | Type | Default |
|---|---|---|
nameRecord name — the heading, the initials and the accessible name of the actions. | string | — |
kindDefaults only: avatar shape and fallback icon; product uses an image tile. | "person" | "organization" | "product" | "generic" | "person" |
variantGrid tile, side-panel row, record header or inline chip with hover card. | "card" | "compact" | "header" | "chip" | "card" |
subtitleRole · company, domain or SKU. | ReactNode | — |
mediaPhoto, logo or product image. Missing → initials or an icon. | { src?: string; alt?: string; fallback?: ReactNode } | — |
statusOne status pill ("Active", "Out of stock"). | { tone: "neutral" | "accent" | "success" | "warning" | "danger" | "info"; label: string } | — |
badgesExtra badges after the status. | ReactNode | — |
descriptionBio or summary (clamped to 3 lines on cards). | ReactNode | — |
fieldsKey facts rendered as a small Description list (copyable, formatted). | DescriptionEntry[] | — |
stats2–4 numbers in a row. | { label: string; value: number | string; format?: ValueFormat }[] | — |
contactBuilt-in labelled quick actions ("Email Jane Cooper"). | { email?: string; phone?: string; website?: string } | — |
actionsYour own quick actions (labelled IconButtons, a menu). | ReactNode | — |
hrefThe name becomes the one primary link, stretched over the card. | string | — |
headingAsHeading level of the name. | "h1" | "h2" | "h3" | "h4" | "p" | "h3" (header: "h1") |
archivedMuted, with an "Archived" badge. | boolean | false |
selectedPicker state: accent outline and aria-current. | boolean | false |
loadingSkeleton in the variant's shape (aria-busy). | boolean | false |
labelsemail, call, website, archived, selected. | Partial<EntityCardLabels> | — |