Job application form with input fields, file upload area, and position summary sidebar. Complete apply page layout for career sites.
A two-column apply page that renders a badge, <strong>-aware heading, and description above a submit form built from a fields array (text inputs plus one textarea type), a fixed drag-and-drop resume dropzone, and a full-width submit button, alongside a sidebar card summarizing the open position with department, location, and type rows plus a "Back to all positions" link.
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/careers17?email=YOUR_EMAIL&license_key=YOUR_KEY"Base UI flavor
npx shadcn add "https://ui.beste.co/r-base/careers17?email=YOUR_EMAIL&license_key=YOUR_KEY"This installs the block to components/beste/block/careers17.tsx, plus the badge, button, input, label, and textarea shadcn/ui primitives it uses for the section eyebrow, submit and sidebar buttons, form inputs, field labels, and the multiline cover-letter field.
The installed file exports careers17Demo alongside the block: the exact props behind the preview above. Spread it to get a working application form in one line.
import { Careers17, careers17Demo } from "@/components/beste/block/careers17";
export default function Page() {
return <Careers17 {...careers17Demo} />;
}Then replace the demo with your own props. Written out, a trimmed setup looks like this:
import { Careers17 } from "@/components/beste/block/careers17";
export default function Page() {
return (
<Careers17
badge={{ label: "Apply Now", variant: "secondary" }}
heading="Join our <strong>engineering team</strong>"
description="Fill out the form below and we'll get back to you shortly."
job={{
title: "Senior Frontend Engineer",
department: "Engineering",
location: "Remote",
type: "Full-time",
href: "/careers",
}}
fields={[
{ label: "Full Name", type: "text", placeholder: "John Doe" },
{ label: "Email Address", type: "email", placeholder: "john@example.com" },
{ label: "Cover Letter", type: "textarea", placeholder: "Tell us why you're a great fit..." },
]}
submitLabel="Submit Application"
/>
);
}| Prop | Type | Default | Description |
|---|---|---|---|
badge | { label: string; variant?: "default" | "secondary" | "outline" } | – | Eyebrow badge above the heading |
heading | string | – | Section heading, supports inline <strong> |
description | string | – | Intro paragraph under the heading |
job | JobSummary | – | Sidebar position summary card |
fields | FormField[] | [] | Form rows rendered above the resume dropzone |
submitLabel | string | "Submit Application" | Text on the full-width submit button |
className | string | – | Extra classes for the outer <section> |
type JobSummary = {
title: string;
department?: string;
location?: string;
type?: string;
href?: string;
};
type FormField = {
label: string;
type: string;
placeholder?: string;
};heading is injected via dangerouslySetInnerHTML, so inline <strong> is honored and styled with the primary color; pass only trusted markup.field renders a Textarea (fixed at rows={5}) when its type is exactly "textarea", and a standard Input with that type otherwise; the type string is passed straight through to the input.onSubmit calls e.preventDefault() and nothing else, so there is no submit callback, form state, or validation; the block collects no values and the integrator must wire up handling.<div> with an upload icon and helper text, with no file input, onDrop, or click-to-upload behavior wired in.job is provided, and each of its department, location, and type rows renders only when that field is set; the "Back to all positions" button appears only when job.href is present and links via next/link.lg:col-span-2) with the sidebar in the remaining column; below the lg breakpoint they stack.Wiring the form up
This block ships the form markup only; state, validation, and submit are yours to add. Our guide wires the shadcn Field primitives to React Hook Form, TanStack Form, and Formisch on one field system.
careers33
Formal HR job posting with responsibilities, qualifications, benefits, and sidebar summary. Corporate-style position detail page with apply CTA.
careers2
Job openings grid with department badges, location tags, and apply buttons. Card-based layout for career pages.
careers8
Single job posting detail with responsibilities, requirements, nice-to-haves, and apply CTA. Full position description layout.
careers1
Job listings section with role cards showing department, location, and employment type. Clean list layout with hover effects and apply buttons.
careers37
Email subscription form for job alerts with trust indicators. Captures candidate interest for future openings with clean card layout.
careers46
A full featured-role posting with responsibilities, requirements and a sticky apply card.