Hiring by the Numbers

Hiring Stats

Hiring by the numbers

We're transparent about our hiring process. Here's how we're doing.

127

Hires this year

Up 34% from last year

18 days

Average time to offer

From first call to signed

4.8/5

Candidate satisfaction

Based on post-interview surveys

92%

Offer acceptance rate

Industry average is 69%

350+

Active Applications

We review every single one within 5 business days.

73%

Internal Mobility

Of our open roles are filled through promotions or lateral moves.

3 rounds

Interview Process

Streamlined to respect your time. No take-home assignments over 2 hours.

About this block

Hiring by the NumbersPRO

Recruitment statistics dashboard with key metrics, trends, and detailed hiring process stats. Transparent data-driven hiring showcase.

Careers26: Hiring by the Numbers

A centered recruitment-stats section: an optional badge, heading, and description above a four-up grid of headline metric cards (value, label, optional context) followed by a three-up grid of detail cards each pairing an optional icon with a value, title, and optional description.

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/careers26?email=YOUR_EMAIL&license_key=YOUR_KEY"

Base UI flavor

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

This installs the block to components/beste/block/careers26.tsx, plus the badge shadcn/ui primitive it uses for the section eyebrow.

Quick start

The installed file exports careers26Demo alongside the block: the exact props behind the preview above. Spread it to get a working hiring-stats section in one line.

tsx
import { Careers26, careers26Demo } from "@/components/beste/block/careers26";

export default function CareersStatsPage() {
  return <Careers26 {...careers26Demo} />;
}

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

tsx
import { Clock, Users } from "lucide-react";
import { Careers26 } from "@/components/beste/block/careers26";

export default function CareersStatsPage() {
  return (
    <Careers26
      badge={{ label: "Hiring Stats", variant: "secondary" }}
      heading="Hiring by the <strong>numbers</strong>"
      description="We're transparent about our hiring process."
      stats={[
        { value: "127", label: "Hires this year", context: "Up 34% from last year" },
        { value: "18 days", label: "Average time to offer" },
      ]}
      details={[
        { icon: Users, value: "350+", title: "Active Applications", description: "Reviewed within 5 business days." },
        { icon: Clock, value: "3 rounds", title: "Interview Process" },
      ]}
    />
  );
}

Props

PropTypeDefaultDescription
badge{ label: string; variant?: "default" | "secondary" | "outline" }Section eyebrow badge; falls back to "default" variant
headingstringSection heading, supports inline <strong>
descriptionstringMuted sub-heading below the heading
statsStatItem[][]Cards in the top four-up metric grid
detailsDetailStat[][]Cards in the lower three-up detail grid
classNamestringExtra classes for the outer <section>
ts
type StatItem = {
  value: string;
  label: string;
  context?: string;
};

type DetailStat = {
  icon?: LucideIcon;
  value: string;
  title: string;
  description?: string;
};

Behavior notes

  • The entire header block (badge, heading, description) is conditionally rendered and disappears when all three props are absent, via (badge || heading || description).
  • heading is injected with dangerouslySetInnerHTML, so inline <strong> tags are honored and styled text-primary; pass only trusted markup since raw HTML is rendered.
  • The block is purely presentational: there are no callbacks, no useState, and no interactive elements. Nothing to wire up beyond the data props.
  • Stat cards render in a fixed grid-cols-2 md:grid-cols-4 layout regardless of array length, so supplying other than four stats leaves uneven trailing rows; context is only shown when present.
  • Detail cards render in a fixed sm:grid-cols-3 layout; each card's icon and description are optional and omitted when unset, and the icon defaults to text-primary at size-5.
  • Both grids map by array index for their React key, so reordering items in place is fine but there is no stable id per row.

More Careers blocks

View all Careers
PRO

careers10

Hiring Process Timeline

Step-by-step hiring process timeline with numbered stages. Shows candidates the interview journey from application to onboarding.

PRO

careers22

Employee Spotlight Story

Featured employee profile with portrait photo, personal quote, and career milestone timeline. Showcases real growth stories.

PRO

careers36

Hiring Manager Profiles

Team lead profiles with photos, bios, and department badges. Introduces future managers to candidates with detailed backgrounds.

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

careers7

Culture Stats with Positions

Team culture stats bar followed by detailed job position cards. Combines social proof with open roles listing.

PRO

careers20

Diversity & Inclusion

Diversity and inclusion section with representation stats and initiative cards. Showcases company commitment to equity and belonging.