You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Add a job board plugin that provides a full-featured careers/jobs section. Like the UI builder, it sits on top of the CMS plugin — it registers a pre-configured ContentTypeConfig and provides its own typed pages and hooks that understand the job-board domain.
This means:
No new database schema — jobs are just CMS content items
The CMS admin UI works out of the box for job management
The job board provides polished public-facing pages (listing, detail, apply)
Core Features
Job Listings
Job listings page with filters (department, location, type)
Individual job detail page
Application form (integrates with the Form Builder plugin)
Department / location / employment type taxonomies
Admin (via CMS plugin)
Create/edit/publish/archive jobs through standard CMS UI
Draft → Published → Archived lifecycle with status field
Closing date field (auto-archives when past)
SEO & SSG
prefetchForRoute support for "list", "detail", and "department" route keys
generateStaticParams for job detail pages from getAllJobs
Structured data (schema.org/JobPosting) in meta tags
import{useJobs,useJob}from"@btst/stack/plugins/job-board/client/hooks"// Paginated job list with optional filtersconst{ data, fetchNextPage }=useJobs({department: "engineering",remote: true})// Single job by slugconst{data: job}=useJob("senior-frontend-engineer")
Overview — what the plugin is, that it sits on top of the CMS plugin
Setup — registering JOB_BOARD_CONTENT_TYPE in cmsBackendPlugin, adding jobBoardClientPlugin in the client stack
Schema reference — AutoTypeTable for jobSchema and JobBoardClientConfig
Routes — table of route keys, paths, and what each page renders
Hooks — useJobs, useJob with filter examples
Overrides — AutoTypeTable for JobBoardPluginOverrides
SSG — prefetchForRoute route key table + Next.js page.tsx example (mirrors the blog/CMS SSG docs pattern)
AI Chat integration — job detail page registers read-only context (routeName: "job-board-detail", suggestions like "What are the requirements for this role?")
Related Issues / Prior Art
UI builder plugin — same CMS-backed pattern this would follow
Overview
Add a job board plugin that provides a full-featured careers/jobs section. Like the UI builder, it sits on top of the CMS plugin — it registers a pre-configured
ContentTypeConfigand provides its own typed pages and hooks that understand the job-board domain.This means:
Core Features
Job Listings
Admin (via CMS plugin)
statusfieldSEO & SSG
prefetchForRoutesupport for"list","detail", and"department"route keysgenerateStaticParamsfor job detail pages fromgetAllJobsschema.org/JobPosting) in meta tagsSchema (CMS content type)
Plugin Structure
Following the UI builder pattern:
Routes
list/jobsdepartment/jobs/department/:deptdetail/jobs/:slugConsumer Setup
Hooks
SSG Support
prefetchForRoutere-uses the CMS plugin's existing SSG infrastructure — no separate implementation needed.Non-Goals (v1)
applyUrlto link to aForm Builderform)Plugin Configuration Options
apiBaseURLstringapiBasePathstringsiteBaseURLstringsiteBasePathstring""or"/careers")queryClientQueryClientoverridesJobBoardPluginOverrideshooksJobBoardClientHooksDocumentation
Add
docs/content/docs/plugins/job-board.mdxcovering:JOB_BOARD_CONTENT_TYPEincmsBackendPlugin, addingjobBoardClientPluginin the client stackAutoTypeTableforjobSchemaandJobBoardClientConfiguseJobs,useJobwith filter examplesAutoTypeTableforJobBoardPluginOverridesprefetchForRouteroute key table + Next.jspage.tsxexample (mirrors the blog/CMS SSG docs pattern)routeName: "job-board-detail", suggestions like "What are the requirements for this role?")Related Issues / Prior Art
prefetchForRouteinfrastructure already exists