/careers/:slug (your job board), /careers/:slug/:openingSlug (a single role)
📷 Screenshot: Public careers job board with the hero, filters, and job cards — to be added.
How it fits together
There are two halves to the careers site:- The careers site itself — your branded board, identified by a slug (e.g.
acme-corp→/careers/acme-corp), with a display name and an optional logo. It can be scoped to one business so only that business’s openings show. - The published openings — only job openings that are Open and published appear on the board. Publishing is done from the opening (see below); everything else stays internal.
Publishing an opening to the careers site
An opening only reaches the public board once it’s published. On the job opening detail page:- Publish pushes a non-closed opening live to the careers page (needs
hr-recruitment:approve). A Published badge then shows. - Unpublish pulls it back off the public board.
What a candidate sees
The job board (/careers/:slug)
A branded hero (your display name and logo), a search box, and filters for employment type and location (filters only appear when there’s more than one value to choose from). Each role shows as a card with its title, employment-type badge, location, salary (if published), when it was posted, and when it closes. The board says “No open positions right now” when nothing is live.
A single role (/careers/:slug/:openingSlug)
The full posting: title, posted/closes dates, metadata pills (location, employment type, salary range, closing date, and applications received if published), the role description, and an Apply Now button.
Applying
The Apply form asks for:
On submit, the candidate sees an “Application submitted” confirmation. Behind the scenes the application:
- Creates a new job applicant against that opening, with source “Careers Page” and source name set to your site’s display name (so the dashboard can credit the careers site as a channel).
- Bumps the opening’s applications-received count.
- Duplicate guard — the same email can’t apply to the same opening twice (“You have already applied for this position.”).
- Closed / unpublished — applying to an opening that isn’t published and Open is refused.
- An opening can carry a custom application form with extra required fields; if it does, the public apply enforces those required fields server-side.
Where applications go
Every public application appears in your applicants pipeline at/hr/recruitment/applicants as a new Open (Applied) applicant against the relevant opening, sourced “Careers Page”. From there it’s a normal candidate — move them through the pipeline, schedule interviews, and make an offer.
⚠️ Current state — no in-app careers-site management screen. Creating a careers site (its slug, display name, logo, and which business it’s scoped to) is supported by the backend API, but there is no admin page in the app to create or manage careers sites today — the create/list/edit capability exists in the API only and isn’t wired to any screen. In practice a careers site is provisioned for you (by setup/support), after which publishing openings and receiving public applications work as described above. The public board and apply flow themselves are fully live. (Flagged for the team.)
Permissions
The public board and apply flow need no permission and no login. Managing careers sites (API-only today) is a configuration action:Related
- Job openings — the roles you publish to the board
- Job applicants — where public applications land
- Applicant sources — how the careers site is measured as a channel
- Recruitment overview & dashboard