Skip to content

Latest commit

 

History

History

README.md

DVM website

The marketing landing page and documentation for DVM, published at dvm.eshlox.net. Built with Astro + Starlight.

  • / — custom landing page (src/pages/index.astro)
  • /docs/** — Starlight documentation (src/content/docs/docs/**)

The docs are the single source of truth: the repo README links here rather than duplicating content.

Develop

This project uses pnpm (see packageManager in package.json). Enable it with corepack enable or npm i -g pnpm.

cd site
pnpm install
pnpm dev           # http://localhost:4321

Build

pnpm build         # static output in site/dist/
pnpm preview       # serve the built output locally

Supply-chain hardening

Dependency policy follows eshlox.net/npm-supply-chain-security:

  • pnpm-workspace.yamlminimumReleaseAge (only versions ≥7 days old), strictDepBuilds (lifecycle scripts blocked unless allowlisted in allowBuilds), and a commented trustPolicy (see the file for why it's off).
  • .npmrcsave-exact / empty save-prefix, so deps are pinned exactly.
  • Dependencies in package.json are pinned to exact versions; updates come through reviewed Dependabot PRs.
  • CI installs with pnpm install --frozen-lockfile.

Structure

src/
  pages/index.astro          landing page (own layout, not Starlight)
  content/docs/docs/         Starlight docs (URLs are /docs/*)
    getting-started/         install, quickstart
    reference/               commands, config, lima
    guides/                  security, troubleshooting
    examples/                setup-script snippets (autogenerated sidebar)
  styles/theme.css           Starlight accent overrides
  styles/landing.css         landing-page styles
  assets/logo.svg            header logo
public/favicon.svg
astro.config.mjs             title, sidebar, social, edit links

Sidebar order and labels are defined in astro.config.mjs. Examples are autogenerated from the examples/ directory, so adding a file there (with title/description frontmatter) is enough to list it.

Deploy (Cloudflare Pages)

The site is static; any static host works. For Cloudflare Pages:

  • Build command: pnpm install --frozen-lockfile && pnpm build
  • Build output directory: dist
  • Root directory: site
  • Node version: 20+ (NODE_VERSION=22 recommended)

Cloudflare Pages detects pnpm from pnpm-lock.yaml and the packageManager field automatically.

Add dvm as a custom domain (CNAME dvm → the Pages project) and Cloudflare manages TLS. Deploys run automatically on push to main.