✨ Publier v1 is live — a polished docs platform built for the open web.
Skip to content

Careers page

Open roles listing at /careers — powered by the JobsList component, grouped by department.

The careers sub-page renders a list of open roles at /careers using the JobsList component from @publier/shell. Roles are grouped by department in first-seen order.

Enable / disable

publier.config.yaml
pages:
careers: true # false to suppress /careers

Starter implementation

The company-site template scaffolds src/pages/careers.astro:

src/pages/careers.astro
---
import { JobsList } from '@publier/shell/components';
import BaseLayout from '@publier/shell/layouts/base-layout.astro';
---
<BaseLayout title="Careers — My Company" description="Help us build the infrastructure of tomorrow.">
<main class="max-w-3xl mx-auto my-12 px-6 prose">
<h1>Careers</h1>
<p>
We hire for curiosity, clarity, and kindness. Full-time, remote-first, with quarterly
on-sites in different cities.
</p>
<JobsList
heading="Open roles"
jobs={[
{
title: 'Senior Software Engineer, Platform',
department: 'Engineering',
location: 'Remote (US/EU)',
type: 'Full-time',
href: 'mailto:[email protected]?subject=SSE+Platform',
},
{
title: 'Developer Relations',
department: 'Engineering',
location: 'Remote',
type: 'Full-time',
href: 'mailto:[email protected]?subject=DevRel',
},
{
title: 'Product Designer',
department: 'Design',
location: 'Remote (US/EU)',
type: 'Full-time',
href: 'mailto:[email protected]?subject=Product+Designer',
},
]}
/>
</main>
</BaseLayout>

Empty state

When there are no open roles, pass an empty jobs array. JobsList shows a configurable message:

<JobsList
heading="Open roles"
emptyMessage="We're not hiring right now — check back soon."
jobs={[]}
/>

See JobsList for the full prop reference.