Skip to content
SwiftJobs

Show pay in

Converted amounts are approximate and marked with ~.

ID
SwiftJobs
Post a job

Quality and testing

What is tested, how to run the tests, and measured Lighthouse results.

Automated tests

SwiftJobs ships with 48 Playwright tests that run against the production build:

  • Job board: filters, sort and pagination kept in the URL, empty state, saved jobs, compare, saved-search alerts.
  • Pay display: every salary converts to the chosen currency and period, on interactive and static pages.
  • Forms: error summaries receive focus, fields are marked invalid, data never ends up in the URL, and each form succeeds in demo mode. The posting wizard moves focus to each new step.
  • SEO and languages: JobPosting data with pay, Open Graph images, hreflang, feeds, Indonesian formatting, and the 404 page in both languages.
  • Accessibility: axe-core checks WCAG 2.2 A and AA rules on 11 pages in light and dark mode.
  • Phones: no horizontal scroll on any page, the filter sheet and the menu.
npm run build
npm test

Placeholder photos are replaced with a local image during tests, so the suite does not depend on the network. On GitHub, .github/workflows/ci.yml builds both site modes and runs the suite on every pull request.

Lighthouse

Measured with Lighthouse 12 on the production build, served locally, with the demo’s placeholder photos.

Page Mobile Desktop
Home 100 / 100 / 100 / 100 100 / 100 / 100 / 100
Jobs 91-93 / 100 / 100 / 100 100 / 100 / 100 / 100
Job 96-99 / 100 / 100 / 100 100 / 100 / 100 / 100
Companies 94 / 100 / 100 / 100 100 / 100 / 100 / 100
Company 97-98 / 100 / 100 / 100 100 / 100 / 100 / 100
Post a job 96 / 100 / 100 / 100 100 / 100 / 100 / 100
Home (Indonesian) 96-97 / 100 / 100 / 100 100 / 100 / 100 / 100

Scores are Performance / Accessibility / Best practices / SEO. Mobile uses Lighthouse’s default throttling (slow 4G, 4x CPU), where results vary by a few points between runs. Cumulative Layout Shift is below 0.02 on every page.

Your own scores depend on your host, your photos and how many jobs you list. The job board page loads React for its filters, which is why it is the lowest on mobile.

What keeps it fast

  • Static HTML everywhere; JavaScript only for interactive parts (React islands).
  • The first page of jobs is rendered on the server, and the full index is a single static JSON file.
  • Photos are resized and converted to WebP at build time by astro:assets.
  • Self-hosted fonts with font-display: swap.
  • Motion uses CSS and one IntersectionObserver; no scroll listeners.

SwiftJobs theme demo

Everything here ships in the theme. This panel does not.

Made by

Accent preset