Speculative Application CTA

Don't see the right role?

We're always looking for exceptional people. If you're passionate about what we're building but don't see a perfect match, send us your resume. We'll keep you in mind for future opportunities.

careers@company.com

Remote-FriendlyCompetitive EquityFast-Growing TeamLearning Budget
About this block

Speculative Application CTAPRO

Bottom-of-page careers CTA for general applications with email, action buttons, and company highlight badges. Captures candidates without matching roles.

Careers27: Speculative Application CTA

A centered, muted-panel careers CTA that renders an optional <strong>-highlighted heading, a description paragraph, a mailto: email link, a row of link buttons, and a wrapping row of highlight badges, so candidates without a matching role can still apply.

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.

Upgrade Now

Installation

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

bash
npx shadcn add "https://ui.beste.co/r/careers27?email=YOUR_EMAIL&license_key=YOUR_KEY"

Base UI flavor

bash
npx shadcn add "https://ui.beste.co/r-base/careers27?email=YOUR_EMAIL&license_key=YOUR_KEY"

This installs the block to components/beste/block/careers27.tsx, plus the badge and button shadcn/ui primitives it uses for the highlight badges and action buttons.

Quick start

The installed file exports careers27Demo alongside the block: the exact props behind the preview above. Spread it to get a working speculative-application CTA in one line.

tsx
import { Careers27, careers27Demo } from "@/components/beste/block/careers27";

export default function CareersPage() {
  return <Careers27 {...careers27Demo} />;
}

Then replace the demo with your own props. Written out, a trimmed setup looks like this:

tsx
import { Careers27 } from "@/components/beste/block/careers27";

export default function CareersPage() {
  return (
    <Careers27
      heading="Don't see the <strong>right role?</strong>"
      description="Send us your resume and we'll keep you in mind."
      email="careers@company.com"
      buttons={[
        { label: "Send Your Resume", href: "/apply" },
        { label: "View All Positions", href: "/jobs", variant: "outline" },
      ]}
      highlights={["Remote-Friendly", "Competitive Equity"]}
    />
  );
}

Props

PropTypeDefaultDescription
headingstringSection heading, supports inline <strong> rendered via dangerouslySetInnerHTML
descriptionstringParagraph below the heading
emailstringAddress rendered as a mailto: link
buttonsButton[][]Action buttons wrapped in Link
highlightsstring[][]Labels rendered as secondary badges
classNamestringExtra classes for the outer <section>
ts
type Button = {
  label: string;
  href: string;
  variant?: "default" | "secondary" | "outline";
};

Behavior notes

  • Every content region is conditionally rendered: heading, description, and email only appear when truthy, and the button and badge rows only appear when their arrays have length > 0, so passing no props renders just the empty muted panel.
  • heading is injected with dangerouslySetInnerHTML, and only nested <strong> elements are styled (they pick up text-primary and font-semibold); any markup you pass is rendered as raw HTML, so trusted input only.
  • Each button renders through Button asChild wrapping a Next.js Link, so every href is treated as a client-side navigation target; use full URLs for external links.
  • A button's variant falls back to "default" when omitted, mapping to the standard shadcn/ui default, secondary, and outline styles.
  • The email is wired only as a mailto: anchor; there is no submit handler, form, or callback, so button clicks navigate and nothing captures the application in-component.
  • buttons and highlights are keyed by array index, so reordering or filtering them at runtime can cause React reconciliation churn.
  • The panel is fixed to max-w-4xl and center-aligned; buttons and badges wrap via flex-wrap rather than scrolling, and there is no internal height limit.

More Careers blocks

View all Careers
PRO

careers8

Job Detail Page

Single job posting detail with responsibilities, requirements, nice-to-haves, and apply CTA. Full position description layout.

PRO

careers33

HR Job Posting Detail

Formal HR job posting with responsibilities, qualifications, benefits, and sidebar summary. Corporate-style position detail page with apply CTA.

PRO

careers5

Featured Role with Positions

Highlighted featured position card with a compact list of additional openings below. Great for showcasing priority roles.

PRO

careers17

Job Application Form

Job application form with input fields, file upload area, and position summary sidebar. Complete apply page layout for career sites.

PRO

careers1

Job Listings List

Job listings section with role cards showing department, location, and employment type. Clean list layout with hover effects and apply buttons.

PRO

careers37

Job Alerts Signup

Email subscription form for job alerts with trust indicators. Captures candidate interest for future openings with clean card layout.