From bf67ad1b9686716dc66d2ef37f2f550c81cf478f Mon Sep 17 00:00:00 2001 From: vegard Date: Wed, 18 Mar 2026 02:41:34 +0000 Subject: [PATCH] =?UTF-8?q?Fullf=C3=B8rer=20oppgave=2014.15:=20nav-lenker,?= =?UTF-8?q?=20docs,=20tasks.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Navigasjonslenker (Arkiv, Søk) i base.html header - Dokumentasjon av implementerte sidetyper i publisering.md - Markerer oppgave 14.15 som ferdig i tasks.md Co-Authored-By: Claude Opus 4.6 (1M context) --- docs/concepts/publisering.md | 20 ++++++++++++++++++++ maskinrommet/src/templates/base.html | 8 +++++--- tasks.md | 3 +-- 3 files changed, 26 insertions(+), 5 deletions(-) diff --git a/docs/concepts/publisering.md b/docs/concepts/publisering.md index aae3a7b..533cc2a 100644 --- a/docs/concepts/publisering.md +++ b/docs/concepts/publisering.md @@ -585,6 +585,26 @@ statisk CAS (magasin, lav frekvens) eller dynamisk med cache (nyhetsavis, høy frekvens) — styrt av `index_mode` i trait-konfig. Kategori-, arkiv- og søkesider er alltid dynamiske med paginering. +**Implementert (mars 2026):** Alle sidetyper er implementert: + +- **Kategori:** `/pub/{slug}/kategori/{tag}` — filtrerer artikler via + `tagged`-edges til tag-noder (`node_kind: 'tag'`). Paginert (20/side), + cachet i `DynamicPageCache` med samlingens `index_cache_ttl`. +- **Arkiv:** `/pub/{slug}/arkiv` — kronologisk med månedsgruppering. + Paginert, cachet. +- **Søk:** `/pub/{slug}/sok?q=...` — PostgreSQL fulltekstsøk via + `tsvector`-kolonne med GIN-indeks. Norsk stemming (`'norwegian'`), + vektet tittel (A) og innhold (B), rangert via `ts_rank`. Kort + cache-TTL (maks 60s). +- **Om-side:** `/pub/{slug}/om` — node med `metadata.page_role: "about"` + og `belongs_to`-edge til samlingen. Serveres fra CAS med immutable + cache hvis pre-rendret, ellers on-the-fly via `about.html`-template. + `render_about_to_cas()` lagrer rendret HTML i CAS. +- **Navigasjon:** Base-template inkluderer lenker til Arkiv og Søk i + headeren for alle publiserte sider. +- **Custom domains:** Alle dynamiske sider har custom domain-varianter + (`/custom-domain/kategori/{tag}`, `/custom-domain/arkiv`, etc.). + ### Skalering for store publikasjoner Designet skal håndtere en nettavis med ~30.000 artikler over 30 år diff --git a/maskinrommet/src/templates/base.html b/maskinrommet/src/templates/base.html index 1eaa503..7032900 100644 --- a/maskinrommet/src/templates/base.html +++ b/maskinrommet/src/templates/base.html @@ -73,9 +73,11 @@ {{ index.title | default(value=collection_title) | default(value="Synops") }} {% endif %} - {% if has_rss %}{% endif %} + diff --git a/tasks.md b/tasks.md index 6da0427..0e55219 100644 --- a/tasks.md +++ b/tasks.md @@ -157,8 +157,7 @@ Uavhengige faser kan fortsatt plukkes. - [x] 14.12 Planlagt publisering: maskinrommet sjekker periodisk (cron/intervall) for `belongs_to`-edges med `publish_at` i fortiden som ikke er rendret. Ved treff: render HTML → CAS → oppdater RSS. - [x] 14.13 Redaksjonell samtale: ved innsending kan redaktør opprette kommunikasjonsnode knyttet til artikkel + forfatter for diskusjon/feedback utover kort notat i edge-metadata. - [x] 14.14 Bulk re-rendering: batch-jobb via jobbkø ved temaendring. Paginert (100 artikler om gangen), oppdaterer `renderer_version`. Artikler serveres med gammelt tema til re-rendret. -- [~] 14.15 Dynamiske sider: kategori-sider (filtrert på tag-edges), arkiv (kronologisk med månedsgruppering), søk (PG fulltekst). Alle paginerte, cachet i maskinrommet. Om-side som statisk CAS-node. - > Påbegynt: 2026-03-18T02:29 +- [x] 14.15 Dynamiske sider: kategori-sider (filtrert på tag-edges), arkiv (kronologisk med månedsgruppering), søk (PG fulltekst). Alle paginerte, cachet i maskinrommet. Om-side som statisk CAS-node. - [ ] 14.16 Presentasjonselementer som noder: publisert tittel, ingress, OG-bilde, undertittel er egne noder med `title`/`summary`/`og_image`-edges til artikkelen. Frontend for å opprette/redigere varianter. Ref: `docs/concepts/publisering.md` § "Presentasjonselementer". - [ ] 14.17 A/B-testing: maskinrommet roterer varianter ved forside-rendering, logger impressions/klikk per variant, normaliserer CTR mot tidspunkt-baseline. Etter statistisk signifikans markeres vinner. Redaktør kan overstyre. Edge-metadata: `ab_status`, `impressions`, `clicks`, `ctr`.