# frei0r website maintenance

The website uses the Dyne-styled VitePress files in this directory and publishes
generated Doxygen documentation in the same artifact.

## Requirements

- Node.js 24 or a compatible current LTS release
- npm
- Doxygen
- Graphviz

## Local development

```sh
cd docs
npm ci
npm run dev
```

Frontend-only builds do not require Doxygen:

```sh
npm run build:site
```

Use this while editing Markdown or the theme. Links under `/codedoc/html/` are
allowed because they are generated in the complete build.

## Complete production build

From `docs/`:

```sh
npm ci
npm run build
npm run check
```

`npm run build` runs `doxygen docs/Doxyfile` from the repository root, then
VitePress. Output is written to `docs/.vitepress/dist/`, including the API
reference under `codedoc/html/`.

Generated Doxygen output under `docs/public/codedoc/`, VitePress output,
caches, and `node_modules` are ignored.

## Preview

```sh
npm run preview
```

To test operation below a path prefix:

```sh
BASE_PATH=/frei0r/ npm run build:site
```

Production currently uses `/frei0r/` because the site is published below
`https://dyne.org/`.

## Content policy

Read `content-sources.md` before changing technical, historical, package or host
support claims:

1. The API header and current repository are authoritative.
2. Current host documentation supports integration claims.
3. The Dyne article and old sites support history and context.
4. Wikipedia supplies useful leads, not sole technical evidence.
5. Historical software must be labelled as historical.

Preserve the URL contract in `public-urls.md`.

## Deployment

`.github/workflows/pages.yml` validates pull requests and deploys `master` with
GitHub Pages actions. It installs Doxygen and Graphviz, executes the complete
build, checks the artifact, and deploys through the `github-pages` environment.

See `DEPLOYMENT.md` for Pages settings, custom-domain setup and production
verification.

## Template

The reusable Dyne theme and public assets live directly under `docs/.vitepress/`
and `docs/public/`. Do not reintroduce a nested scaffold copy unless the parent
site generator requires it again.
