Skip to content

Replace Prismic open positions with Ashby-sourced roles - #199

Open
samweaver wants to merge 1 commit into
mainfrom
careers-ashby-job-board
Open

Replace Prismic open positions with Ashby-sourced roles#199
samweaver wants to merge 1 commit into
mainfrom
careers-ashby-job-board

Conversation

@samweaver

Copy link
Copy Markdown
Member

Swap the careers page "Open positions" list from Prismic-managed job
offers to Plural's live Ashby job board, sourced via Ashby's public
Job Posting API.

  • Add getAshbyJobs() (src/utils/ashby.ts): server-side fetch of the
    Ashby posting API with hourly ISR revalidation, filtered to listed
    roles and normalized for the UI. Degrades to an empty list on error.
  • Make OpenPositionsDefault an async server component that fetches the
    roles server-side (same pattern as BlogDefault). The Prismic-driven
    eyebrow/title header and "don't see your role?" CTA are unchanged.
  • Move the filterable list into a client component (OpenPositionsList)
    that reuses the existing FilterButtonGroup/Button/row markup, adds a
    compensation line, and links each role to its Ashby posting page.

No Prismic content change is required; the open_positions slice stays
on the careers page. Board name is overridable via
NEXT_PUBLIC_ASHBY_JOB_BOARD_NAME (defaults to "Plural").

Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com

Swap the careers page "Open positions" list from Prismic-managed job
offers to Plural's live Ashby job board, sourced via Ashby's public
Job Posting API.

- Add getAshbyJobs() (src/utils/ashby.ts): server-side fetch of the
  Ashby posting API with hourly ISR revalidation, filtered to listed
  roles and normalized for the UI. Degrades to an empty list on error.
- Make OpenPositionsDefault an async server component that fetches the
  roles server-side (same pattern as BlogDefault). The Prismic-driven
  eyebrow/title header and "don't see your role?" CTA are unchanged.
- Move the filterable list into a client component (OpenPositionsList)
  that reuses the existing FilterButtonGroup/Button/row markup, adds a
  compensation line, and links each role to its Ashby posting page.

No Prismic content change is required; the open_positions slice stays
on the careers page. Board name is overridable via
NEXT_PUBLIC_ASHBY_JOB_BOARD_NAME (defaults to "Plural").

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@samweaver
samweaver requested a review from a team as a code owner August 13, 2026 17:18
@greptile-apps

greptile-apps Bot commented Aug 13, 2026

Copy link
Copy Markdown

Greptile Summary

The PR replaces Prismic-managed career listings with server-fetched Ashby roles and a client-side filterable list.

  • Adds an hourly cached Ashby Job Posting API integration with normalized role data and graceful empty-state handling.
  • Moves filtering and job-row rendering into a new client component, including compensation and external posting links.
  • Updates the generated Next.js route-types reference and lockfile metadata.

Confidence Score: 4/5

The PR appears safe to merge, with a non-blocking accessibility issue in the nested job-row controls.

The Ashby data flow and fallback behavior have no established blocking defect, but each external job anchor currently contains a native button and should be reduced to one interactive control.

Files Needing Attention: src/slices/main/OpenPositions/components/OpenPositionsList.tsx

Important Files Changed

Filename Overview
src/utils/ashby.ts Adds the cached Ashby API fetch, listed-role filtering, normalization, and error fallback; no concrete blocking failure was established.
src/slices/main/OpenPositions/OpenPositionsDefault.tsx Converts the slice variation to an async server component and passes fetched roles to the client list while retaining Prismic-managed surrounding content.
src/slices/main/OpenPositions/components/OpenPositionsList.tsx Adds category filtering and Ashby job rows, but nests a native button inside each job anchor.
next-env.d.ts Changes the generated route-type import from the development output path to the build output path.
package-lock.json Removes postcss's dev-only lockfile marker without changing its version or dependency edges.

Reviews (1): Last reviewed commit: "Replace Prismic open positions with Ashb..." | Re-trigger Greptile

Comment on lines +78 to +83
<Button
className="row-span-2 h-10 w-10 self-center justify-self-end p-0 group-hover:border-white/24 lg:row-span-1"
variant="secondary"
>
<SvgArrowDownAccordion className="rotate-[-90deg] transform text-white" />
</Button>

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Nested interactive job controls

Each job-row anchor contains a Button that defaults to a native <button>, creating two nested focusable controls for one action and producing redundant focus stops and ambiguous semantics for keyboard and screen-reader users.

Suggested change
<Button
className="row-span-2 h-10 w-10 self-center justify-self-end p-0 group-hover:border-white/24 lg:row-span-1"
variant="secondary"
>
<SvgArrowDownAccordion className="rotate-[-90deg] transform text-white" />
</Button>
<span className="border-white/16 row-span-2 flex h-10 w-10 self-center justify-self-end rounded-full border p-0 group-hover:border-white/24 lg:row-span-1">
<SvgArrowDownAccordion className="m-auto rotate-[-90deg] transform text-white" />
</span>

Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant