Study Abroad Hero
Hero section for a study-abroad program pitching a set of destination cards, each with a photo, city/country, and a program-duration badge, plus a row of key highlights and CTA buttons.
Docs
Installation
A real shadcn registry command, not a copy-paste stand-in: it fetches this block plus its badge, button, media-slot dependencies and any missing npm packages, and installs them straight into your project.
npx shadcn add https://staaarter.com/r/study-abroad-hero.jsonPrefer not to use the CLI? Copy the source from the Code toggle above into src/components/blocks/education/education9.tsx instead.
Usage
The file also exports education9Demo, the exact props behind the preview above. Spread it to get a working section in one line, then replace it with your own data.
import { Education9, education9Demo } from "@/components/blocks/education/education9"; export default function Page() { return <Education9 {...education9Demo} />; }
Props
| Prop | Type | Default | Description |
|---|---|---|---|
| badge | { label: string; variant?: BadgeVariant } | none | Pill above the heading; only rendered when badge is truthy. |
| heading | ReactNode | none | Hero heading. |
| description | string | undefined | Supporting copy under the heading. |
| highlights | HighlightItem[] | [] | Icon + label row rendered below the destination cards. |
| destinations | DestinationCard[] | none | Destination cards, each with a photo, city/country, and duration badge. |
| buttons | ButtonItem[] | [] | CTA buttons under the heading. |
| className | string | none | Extra classes for the outer section element. |
Types
type HighlightItem = { icon: LucideIcon; label: string }; type DestinationCard = { city: string; country: string; duration: string; image: { src: string; alt: string }; }; type ButtonItem = { label: string; href?: string; variant?: "default" | "secondary" | "outline" | "ghost" | "link" | "destructive"; };
Behavior notes
- Purely presentational: there is no client state, no carousel, and no filtering. Every destination card and highlight renders unconditionally from props.
- The duration badge is absolutely positioned over the top-left corner of each destination photo.
- The destinations grid is a fixed responsive 1/2/4-column layout regardless of item count; 3 items leaves a gap in the last row on large screens rather than reflowing to 3 columns.
- Each highlight's icon is passed directly as a prop (a LucideIcon component reference) since this is a Server Component with no client boundary to cross.
- CTA buttons render as real next/link anchors via Button's render prop when href is set, but they don't perform any real navigation logic beyond that.
More Education Blocks
View all →academy-course-cards
Academy Course Cards
Academy section with an eyebrow, a two-column heading, and three course cards that float a lesson checklist above a category label, title, and lesson count.
institutional-quick-facts
Institutional Quick Facts
Quick facts grid displaying key institutional statistics with a large value, label, and short description per tile.
global-partnerships-grid
Global Partnerships Grid
Global partnerships section showcasing partner institutions with location details and yearly exchange statistics.
mission-and-vision-statement
Mission and Vision Statement
Side-by-side mission and vision text blocks with an inspirational leadership quote below.
social-media-links-grid
Social Media Links Grid
Social media connection section with platform cards showing handle and follower count.
education-social-proof
Education Social Proof
Social proof section pairing key stats (rating, enrollment, completion rate) with a featured student testimonial.