← Writing

How this site is built and tested

QAAutomation

This site is a static Next.js export. There is no server runtime, so there is nothing to fail at request time. Everything that can go wrong is pushed to build time, where it is cheap to catch.

Content validation

Every work item and article is a Markdown file with frontmatter. A Zod schema checks each file during the build. A missing field or an unknown tag fails the build with the file path and field name, so a typo can never silently drop an item from a listing.

Smoke tests

Playwright runs against the production build in GitHub Actions on every pull request:

test("every route responds", async ({ page }) => {
  for (const path of ["/", "/work", "/writing", "/about"]) {
    const response = await page.goto(path);
    expect(response?.status()).toBe(200);
  }
});

The suite also checks that the theme toggle survives a reload, that a case study renders its outcome tiles and section headings, and that an unknown route shows the 404 page.

Why this much for a portfolio

Because it is the same discipline I bring to client work: validate inputs early, automate the boring checks, and keep the human effort for exploratory testing.