A careers page in seven sections: a hiring hero with the open roles listed, a culture band with studio photographs, an icon grid of benefits, a roles table with published pay bands, the hiring process step by step, an open-application call to action and a CTA footer.
Composed from 8 blocks. Installing this page installs all of them, plus the pieces and primitives they use.
Built in the Polaris collection.
A careers page in seven sections: a hiring hero with the open roles listed, a culture band with studio photographs, an icon grid of benefits, a roles table with published pay bands, the hiring process step by step, an open-application call to action, and a CTA footer. Eight blocks, one install.
Upgrade to Pro
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.
npx shadcn add "https://ui.beste.co/page/r/jobs1?email=YOUR_EMAIL&license_key=YOUR_KEY"This installs the page to components/beste/page/jobs1.tsx and everything behind it: the eight blocks it composes (navbar44, careers48, careers42, careers41, careers40, careers43, cta66, footer104), the button1 and badge6 components they use, and the shadcn/ui button primitive. Eleven files, no follow-up installs.
The installed file exports jobs1Demo alongside the page: the exact props behind the preview above. Spread it to get a working page in one line.
import { Jobs1, jobs1Demo } from "@/components/beste/page/jobs1";
export default function Page() {
return <Jobs1 {...jobs1Demo} />;
}Each section is a separate prop, so the usual next step is to keep the demo and replace one section at a time. The roles table is the one that changes most often.
import { Jobs1, jobs1Demo } from "@/components/beste/page/jobs1";
export default function Page() {
return (
<Jobs1
{...jobs1Demo}
roles={{
label: "Open roles",
heading: "Three, and the band is published.",
roles: [
{ title: "Senior Brand Designer", team: "Design", location: "Lisbon or remote in CET", salary: "€62k to €74k" },
{ title: "Design Engineer", team: "Build", location: "Lisbon", salary: "€58k to €70k" },
{ title: "Studio Producer", team: "Operations", location: "Lisbon, three days on site", salary: "€48k to €56k" },
],
}}
/>
);
}Every prop is the full prop object of the block that renders that section, so anything the block accepts is accepted here.
| Prop | Type | Default | Description |
|---|---|---|---|
navbar | ComponentProps<typeof Navbar44> | – | Studio navbar |
hero | ComponentProps<typeof Careers48> | – | Hiring hero listing the open roles |
culture | ComponentProps<typeof Careers42> | – | Culture band with studio photographs |
benefits | ComponentProps<typeof Careers41> | – | Icon grid of benefits |
roles | ComponentProps<typeof Careers40> | – | Roles table with pay bands |
process | ComponentProps<typeof Careers43> | – | Hiring process, step by step |
cta | ComponentProps<typeof Cta66> | – | Open-application call to action |
footer | ComponentProps<typeof Footer104> | – | Footer leading with a CTA |
className | string | – | Extra classes for the page's outer wrapper |
| Section | Block | Notes |
|---|---|---|
| Navbar | navbar44 | Sticky for the whole document |
| Hero | careers48 | Lists the openings in the fold, so nobody scrolls to count them |
| Culture | careers42 | Photographs of the studio, not stock desks |
| Benefits | careers41 | Given bg-muted/50; an icon grid, so fill the rows |
| Roles | careers40 | A table; the pay band column is the point of it |
| Process | careers43 | Also given bg-muted/50, pairing it with the benefits band |
| Closing | cta66 | For people who fit no listed role |
| Footer | footer104 | Opens with a CTA of its own |
culture removes that section entirely rather than rendering an empty one.careers* variants doing different jobs, so the page holds up when a section is dropped; the hero and the roles table are the two worth keeping.sticky top-0 z-50 by the page, which works because the block carries its own opaque band.className="bg-muted/50" on both the benefits and process sections after spreading their props, so a className passed inside those props is overridden. Tint from the page, not through the prop.dark band on this page. A careers page reads as an invitation, and the two tinted bands supply enough rhythm without one section shouting.roles without changing hero is the easiest inconsistency to ship here.