neuf-www

The neuf.no website. Wagtail CMS backend (dnscms/) feeding a Next.js frontend (web/) over GraphQL.

Tools are managed by mise. Run mise install to get python, uv, node, and prek.

Backend (dnscms/)

cd dnscms
uv sync
uv run ./manage.py migrate
uv run ./manage.py runserver
uv run pytest

GraphQL endpoint: http://127.0.0.1:8000/api/graphql/.

Frontend (web/)

cd web
npm install
npm run dev         # http://localhost:3000
npm run codegen     # regenerate GraphQL types (needs the backend running)
npm run build

Pre-commit hooks

prek runs ruff lint + format on dnscms/**/*.py plus a few sanity hooks. Hooks are configured in prek.toml.

prek install            # registers the git hook
prek run --all-files    # run on everything

Caching and revalidation

The frontend caches all pages and GraphQL responses (ISR) under a single cms cache tag. Wagtail purges it via a webhook on any publish/unpublish/move/delete (see dnscms/dnscms/revalidation.py). Date-sensitive queries (futureEvents, opening hours) additionally expire at Oslo midnight. REVALIDATE_WEBHOOK_SECRET must be set to the same value on both sides (web/.env.local and dnscms/dnscms/settings/local.py or env); unset disables the webhook.

# manual purge
curl -X POST -H "X-Revalidate-Secret: $SECRET" https://<frontend>/api/revalidate

Note: ISR is off under npm run dev; use npm run build && npm run start to test caching.

S
Description
No description provided
Readme 9.4 MiB
Languages
TypeScript 68%
Python 29%
SCSS 2.5%
HTML 0.2%
JavaScript 0.1%