---
title: 'How this site is built'
canonical: 'https://www.dealmobile.co.uk/colophon'
url: 'https://www.dealmobile.co.uk/colophon'
type: Page
summary: 'A theme written for this site, almost no third-party requests, and the solar year under the name.'
---

# How this site is built

![A chain of five boxes: Markdown files in content, a CMS, a theme written for the site (highlighted), Cloudflare, and the visitor’s browser. Below it, a note that almost everything comes from this domain, the two exceptions being Cloudflare’s spam check and visit counter.](https://www.dealmobile.co.uk/sites/default/files/styles/almanac_shot_md/public/content/images/pages/colophon/hero.png.webp?itok=W2cI-7rC)

This site runs on Drupal 11 with a theme I wrote for it. There is no page builder, no front-end framework and no tracking. Everything a page needs comes from this domain, with two exceptions, both served by Cloudflare: the contact form’s spam check and the script that counts visits.

## Content

Every page, post, project and job is a content item with typed fields: a project has a kind, a status, a licence, the year it started, the technology it uses and its links. The CV is built from the job entries and a vocabulary of skills, so the page, the printed CV and the [JSON Resume](https://www.dealmobile.co.uk/cv.json) version always agree.

The content started life as Markdown files with front matter. A small import command reads them and creates or updates each item by its path, so the site can be rebuilt from an empty database with one command, and running it twice changes nothing.

This website was built, and all of its content written, by AI, so there may be inaccuracies. If you spot one, please tell me through the [contact form](https://www.dealmobile.co.uk/contact).

## Live figures from GitHub

The project pages show each repository’s latest release, last change and stars, and the home page lists the projects I’ve changed most recently. Cron fetches them from the GitHub API four times a day and keeps them in the database, so a page never waits on GitHub and your browser never talks to it. If GitHub is down, the last good figures stay.

## Type and colour

Headings, dates, facts and controls are set in Schibsted Grotesk, drawn for a Scandinavian news publisher, and the reading text in Libre Caslon, a revival of the English printing face of almanacs and newspapers. Both are self-hosted under the SIL Open Font License, so there are no requests to a font service.

The light theme is warm paper with near-black ink; the dark theme is near-black with cream ink. One vermilion accent marks the things to look at. The site follows your system’s setting unless you pick one in the footer, and remembers the choice in your browser.

Aa

Libre Caslon Display

The name and page titles



Aa

Libre Caslon Text

Everything you read



Aa

Schibsted Grotesk

Dates, facts and controls





- Page `--page`
- Ink `--ink`
- Muted text `--muted`
- Rules `--rule`
- Links `--link`
- The sun `--sun`

*The two faces, and the colours of the theme you’re reading in. Switch between light and dark in the footer to see the other.*

## Security and privacy

The server sends a strict Content-Security-Policy that allows scripts, styles, fonts and images from this domain only. The one inline script, which sets the light or dark theme before the page draws, is allowed by its hash. The exceptions are Cloudflare’s: Turnstile, the contact form’s spam check, whose script and frame come from Cloudflare, and the Web Analytics script that counts visits. Pages are served over HTTPS with HSTS. The contact form is the only place that takes personal data. Turnstile tells people from bots, usually without asking you to do anything, and a hidden field catches simpler bots. Messages are emailed to me rather than kept on the site. The [privacy notice](https://www.dealmobile.co.uk/privacy.md) lists the short-lived anti-spam records the site does keep.

## Accessibility and testing

Every template is checked with axe against WCAG 2.2 AA in both themes, on a desktop and a phone. The layout works from a 320px screen up with no sideways scrolling, every control works from the keyboard, and the sun’s one movement, along the rule on your first page, is skipped if you’ve asked your system for reduced motion. The CV prints as a two-page A4 document.

---

Index of this site: [llms.txt](https://www.dealmobile.co.uk/llms.txt)
