AppCard
Tenant dashboard grid card composing the status vocabulary.
AppCard is the dashboard grid card on MetricCard’s shell: hairline border warming on hover, color-only feedback, no motion. The mono name sits up top with a quiet corner arrow that inks in on hover, StatusBadge and PlanBadge anchor the foot with the timestamp opposite, and the whole card is one link.
book-tracker
Track your reading list with an add-book form and read/unread toggles.
invoice-search
Search invoices by vendor, amount, and line items.
standup-notes
Summarize the team's standup notes into weekly digests.
recipe-box
Store and scale family recipes with unit conversion.
Install
npx shadcn@latest add https://ui.neon.com/r/app-card.json
Usage
import { AppCard } from "@/components/neon-ui/app-card";
<AppCard
href="/apps/book-tracker"
name="book-tracker"
status="ready"
plan="paid"
updatedAt="2h ago"
/>;
Wiring to Neon
The typed example maps GET /projects onto a grid: project name, a status derived from the default endpoint state, and a relative timestamp from updated_at.
Props
Extends ComponentProps<"a"> — pass href and any anchor props.
namestring
App name, shown in mono.
stringstatus"ready" | "provisioning" | "error" | "stopped"
Lifecycle state, rendered as a StatusBadge.
"ready" | "provisioning" | "error" | "stopped"plan?"free" | "paid"
Billing plan, rendered as a PlanBadge.
"free" | "paid"description?string
One-line summary, clamped to two lines.
stringupdatedAt?string
Last activity, already formatted, e.g. "2h ago".
stringwash?boolean | ReactNode
Status-colored grain rising from the bottom edge; brightens and drifts up on hover. Pass a ReactNode to replace the built-in grain.
boolean | ReactNodetrueAnimated wash
The default wash is pure CSS — the same fractal grain MetricCard draws, faded from the foot, brightening and drifting up on hover. For a live animated wash, pass any ReactNode to wash; it renders inside the same positioned, status-tinted slot. AnimatedWash is the registry’s own WebGL grain gradient (adapted from paper-design/shaders, Apache-2.0): it reads currentColor from the slot, so the status vocabulary colors it automatically, and it freezes under reduced motion:
Accessibility
The card is a single anchor: one tab stop, the name as its accessible text along with the badge labels. The corner arrow is decorative; focus renders a primary border with no layout shift.