Jobs and companies
The job and company schema, and how to manage content with the CMS.
Jobs
Each job is a markdown file in src/content/jobs/. The front matter is validated at build time:
---
title: Brand Designer
company: pendle-ash # id from companies.json
category: design # engineering, design, product, data, marketing, sales, operations, people
seniority: mid # junior, mid, senior, lead
employmentType: full-time # full-time, part-time, contract, internship
workplace: hybrid # remote, hybrid, on-site
location: London
countries: [GB] # ISO codes
salary: { min: 48000, max: 58000, currency: GBP, period: year }
summary: One sentence, at most 200 characters.
skills: [Identity, Packaging]
posted: 2026-09-18
validThrough: 2026-11-02
featured: false
applyUrl: https://... # optional; without it the built-in form is used
---
The body is regular markdown: headings, lists, links and emphasis are styled.
Pay is required. A job without salary fails the build. That rule is the product: do not remove it.
Supported currencies and their approximate conversion rates are in CURRENCIES and USD_RATES in src/config/site.ts. The rates are used only to convert, sort and compare pay, and converted amounts are always marked as approximate.
Companies
Companies live in src/content/companies/companies.json, inside a companies list. Each company has a monogram logo (mark) with one or two letters and a shape: circle, square, slant or arch.
Decap CMS
A CMS for jobs and companies is included at /admin/. It edits the same files through Git.
Local editing
npm run dev
npx decap-server
Then open http://localhost:4321/admin/index.html. Changes are written straight to src/content/, so commit them afterwards.
Online
- On Netlify, enable Identity and Git Gateway for the site.
- Elsewhere, change
backendinpublic/admin/config.ymltogithuband set your repository.
The CMS fields mirror src/content.config.ts. If you change the schema, change public/admin/config.yml too.