Fullfører oppgave 14.15: nav-lenker, docs, tasks.md

- 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) <noreply@anthropic.com>
This commit is contained in:
vegard 2026-03-18 02:41:34 +00:00
parent 26c6a3b8d9
commit bf67ad1b96
3 changed files with 26 additions and 5 deletions

View file

@ -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

View file

@ -73,9 +73,11 @@
<a href="{{ base_url }}">{{ index.title | default(value=collection_title) | default(value="Synops") }}</a>
{% endif %}
</div>
{% if has_rss %}<nav>
<a href="{{ base_url }}/feed.xml" title="RSS-feed">RSS</a>
</nav>{% endif %}
<nav style="display:flex;gap:1rem;align-items:center;font-size:0.9rem;">
<a href="{{ base_url }}/arkiv">Arkiv</a>
<a href="{{ base_url }}/sok">Søk</a>
{% if has_rss %}<a href="{{ base_url }}/feed.xml" title="RSS-feed">RSS</a>{% endif %}
</nav>
</div>
</header>

View file

@ -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`.