The NumFOCUS Jobs Board (https://jobs.numfocus.org/) is a venue for posting open source developer positions. This charter discusses the intent of the Jobs Board, who is allowed to post there, the posting process, and also briefly outlines the technical mechanism behind the board.
The Jobs Board is a platform in service of the NumFOCUS community: it helps prospective candidates find positions in industry that involve community open source. Industry benefits by having access to a large pool of proven, highly-skilled developers.
Currently, the Jobs Board only allows posting jobs, but eventually it will also allow individuals to announce when they are available to take on new positions.
Posts may only appear on the Jobs Board if at least 25% of the position is for community-developed open source software. "Community-developed" means that decision making powers of the project reside with volunteer contributors outside of any specific organization.
We are also limiting posts to positions that involve work on projects affiliated with NumFOCUS.
Posts are approved by NumFOCUS staff before being posted to the site. Once posted, each job receives a permalink which can be shared outside.
The NumFOCUS Board reserves the right to change posting rules and procedures, and to deny or remove posts as they see fit.
New jobs are posted by filing a pull request agains the Jobs Board repo. Jobs all live in the jobs
folder, and are fomatted like this template.
By default, jobs expire on the day that applications are due. No job can be active on the Jobs Board for more than 6 months (but permalinks to the jobs remain indefinitely).
The Jobs Board is a simple static website, rendered from a mixture of YAML files (the jobs posts), and HTML templates. It relies on the following technologies:
The website is compiled by running make
, which executes the following steps:
tools/bundle_posts.py
: This aggregates all posts fromjobs/*.yaml
and producessrc/jobs.js
.- Gatsby compiles the website. It also creates a single page per
post (so that each post gets a static URL) (see
gatsby-node.esm.js
).
Frontend filtering is done via JavaScript. Filters are defined in
src/filter-jobs.js
and the accompanying frontend lives in
src/components/JobsFilter.jsx
.