Changelog

Every user-visible change, newest first.

Unreleased

  • Three hosts: the API is served from its own host, sign-in, the dashboard, badges and verification pages from the app host, and the documentation from the docs host. Badge and verification URLs returned by the API are on the app host.
  • The docs have a new layout, with the CI examples as tabs: a grouped sidebar, an "On this page" list, previous and next links, notes and warnings, and a search box at the top (press / to focus it). Search works without JavaScript.
  • Guides at the root of the docs host: quick start (GitHub Actions, GitLab CI, curl), badge embed, verification page, authentication and errors, limits, and versioning policy.
  • Interactive API reference at `/reference` on the docs host, and the OpenAPI 3.1 description at `/v1/openapi.json` on the API host.
  • `/llms.txt` for AI tools, and this changelog at `/changelog`.
  • Error responses and examples are now documented for every endpoint.
  • Sign in at `/login` with a one-time email link or Google. Projects created with the API are claimed when you sign in with the same verified email.
  • `/dashboard` lists your projects with latest status and usage against the free limit.
  • `/dashboard/projects/:id` shows the badge, copy-ready embed snippets, recent runs, key rotation, and notification settings (locked on Free).
  • The verification page `/v/:badgeId` now follows the Virdify design system, in light and dark themes.
  • Badge colours now come from the Virdify status tokens.
  • `GET /v1/healthz` checks the database.
  • `POST /v1/projects` creates a project and returns the write key once.
  • `POST /v1/results` stores the latest result. Send `run_id` so retries are safe. Free projects accept 300 results a month; we email at 90% and 100%.
  • `POST /v1/keys/rotate` issues a new write key and revokes the old one.
  • `GET /badge/:badgeId.svg` and `.json` (Shields.io endpoint format) show passing, partial, failing, stale or no data. Badge colours are placeholders until the design tokens are added.
  • `GET /v/:badgeId` verification page (unstyled until the design system is added).
  • Rate limits per IP and per key, and a daily ingest cap.
  • Unknown API versions return `unknown_api_version`.