Formal HR job posting with responsibilities, qualifications, benefits, and sidebar summary. Corporate-style position detail page with apply CTA.
A single-position detail layout: a header block with an eyebrow badge, heading, description, and an icon-tagged meta row, then a two-column body where the left column stacks Job Description, Key Responsibilities, Required Qualifications, Preferred Qualifications, and What We Offer lists, and the right column holds a sticky card summarizing the role with a stack of apply buttons.
Pro blocks install through the shadcn CLI with your license key and ship their full source. Docs and live previews stay open to everyone, so you can read every block's details first.
Swap YOUR_EMAIL and YOUR_KEY for the email and license key on your account. Find your license key on your account page.
Radix flavor
npx shadcn add "https://ui.beste.co/r/careers33?email=YOUR_EMAIL&license_key=YOUR_KEY"Base UI flavor
npx shadcn add "https://ui.beste.co/r-base/careers33?email=YOUR_EMAIL&license_key=YOUR_KEY"This installs the block to components/beste/block/careers33.tsx, plus the badge and button shadcn/ui primitives it uses for the eyebrow badge and the sidebar apply buttons.
The installed file exports careers33Demo alongside the block: the exact props behind the preview above. Spread it to get a working job posting detail in one line.
import { Careers33, careers33Demo } from "@/components/beste/block/careers33";
export default function JobDetailPage() {
return <Careers33 {...careers33Demo} />;
}Then replace the demo with your own props. Written out, a trimmed setup looks like this:
import { Careers33 } from "@/components/beste/block/careers33";
export default function JobDetailPage() {
return (
<Careers33
badge={{ label: "People & Culture", variant: "secondary" }}
heading="HR Manager"
description="Lead our people operations and drive talent, engagement, and org development initiatives."
meta={[
{ label: "Location", value: "New York, NY" },
{ label: "Type", value: "Full-time" },
]}
responsibilities={["Develop and implement HR strategies", "Lead full-cycle recruitment"]}
qualifications={["5+ years in HR management", "Strong knowledge of employment law"]}
offers={["Competitive salary", "Comprehensive health insurance"]}
sidebar={[
{ label: "Department", value: "People & Culture" },
{ label: "Employment Type", value: "Full-time" },
]}
buttons={[{ label: "Apply for This Position", href: "/apply" }]}
/>
);
}| Prop | Type | Default | Description |
|---|---|---|---|
badge | { label: string; variant?: "default" | "secondary" | "outline" } | – | Header eyebrow badge |
heading | string | – | Job title heading |
description | string | – | Intro text, shown both under the heading and again as the Job Description body |
meta | JobMeta[] | [] | Icon-tagged summary row under the header |
responsibilities | string[] | [] | Key Responsibilities list items |
qualifications | string[] | [] | Required Qualifications list items |
preferred | string[] | [] | Preferred Qualifications list items |
offers | string[] | [] | What We Offer list items |
sidebar | JobMeta[] | [] | Label/value rows in the sticky Job Summary card |
buttons | { label: string; href: string; variant?: "default" | "secondary" | "outline" }[] | [] | Apply buttons stacked in the sidebar card |
className | string | – | Extra classes for the outer <section> |
type JobMeta = {
label: string;
value: string;
};description is rendered twice: once as the header paragraph under the heading, and again as the body of the "Job Description" section. Both blocks only render when description is set, so passing it fills two spots at once.label to an icon through a fixed lookup keyed on the exact strings Location, Type, Experience, and Posted; any other label renders with no icon, and the match is case-sensitive.badge, heading, description, or a non-empty meta is present.Check icon bullet while the offers list uses a Gift icon; the icons are decorative and fixed, not configurable.Button with asChild wrapping a Next.js Link, so href values are routed through next/link; there is no click handler, the buttons are pure navigation.lg screens the layout is a three-column grid where the content spans two columns and the sidebar card is sticky at top-8; below lg the sidebar stacks under the content and loses its sticky behavior.careers8
Single job posting detail with responsibilities, requirements, nice-to-haves, and apply CTA. Full position description layout.
careers17
Job application form with input fields, file upload area, and position summary sidebar. Complete apply page layout for career sites.
careers27
Bottom-of-page careers CTA for general applications with email, action buttons, and company highlight badges. Captures candidates without matching roles.
careers19
Internship program section with highlights, mentorship details, program summary card, and apply CTA. For recruiting early-career talent.
careers1
Job listings section with role cards showing department, location, and employment type. Clean list layout with hover effects and apply buttons.
careers36
Team lead profiles with photos, bios, and department badges. Introduces future managers to candidates with detailed backgrounds.