Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,19 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).

## [Unreleased]

### Changed — Design system: flatter, white-first look (v1)
- Surfaces go white: `--ds-bg-page` and `--ds-bg-subtle` are now `#ffffff`, with a light `--ds-bg-muted` (`#f4f6f6`) reserved for hover/disabled/neutral fills
- Subtler hairline borders (`--ds-border-default` `#e3e8e8`, `--ds-border-subtle` `#edf0f0`) and tighter radii (`md` 4→3px, `lg` 6→4px, `xl` 10→5px, `2xl` 14→6px)
- Tables are now flat: no header fill, no zebra striping — horizontal rules only, with a slightly stronger border under the header row
- Button/ghost hover and disabled-input/neutral-alert fills repointed from the now-white `--ds-bg-subtle` to `--ds-bg-muted` so they stay visible; `card-elevated` keeps its opt-in shadow
- Updated `tokens.md` reference table and radius scale to match

### Added — Fælles Skabelonløsning Project
- Analysis and proposal for an open source alternative to DynamicTemplate (DSG Scenario 3) — built on open standards (ODF/DOCX/PDF) and shareable via OS2, addressing Aarhus Kommune's 2.464 templates and 10.000+ phrases
- Report (`index.md`) with background, eight core components, a Mermaid architecture diagram, open-standards landscape, the team's two caveats (glidende overgang + komplekse skabeloner) as a warning callout, open questions and success criteria
- Estimeringsnotat with a phased hour estimate (Fase 0 afklaring → 1 POC → 2 MVP → 3 fuld løsning), a dedicated Claude Code-acceleration section explaining where the estimate is reduced (and where it is not), and a drift/economics note
- Interactive admin-interface mock (`docs/public/projects/skabelonloesning/mocks/index.html`) visualising skabelonregister, frasebibliotek, a template detail with kolofon data and a complex guided input-flow (macro replacement), and a simulated dokumentmotor preview — design-system opt-in, client-side only

### Changed — Whitelisted municipality sign-up (ai-bibliotek)
- Sign-up's "Myndighed eller organisation" field is now a select limited to whitelisted municipalities, and registration enforces that the email domain matches the selected municipality's domain (shared `MUNICIPALITIES` list in `auth.js`)
- Documented the intended access model in `index.md`: whitelisted email domains, account verification via email link on sign-up, and a per-domain admin who can delete and promote users (these remain design intent — the `localStorage` mock does not implement them)
Expand Down
1 change: 1 addition & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ Taskfile.yml # Task automation (dev, build, lint
| `roboway` | Roboway | No |
| `dansk-viden-til-dansk-ai` | Dansk Viden til Dansk AI | No |
| `ai-bibliotek` | AI Bibliotek | No |
| `skabelonloesning` | Fælles Skabelonløsning | No |

## Conventions

Expand Down
12 changes: 12 additions & 0 deletions docs/.vitepress/sidebar.mts
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,17 @@ const aiBibliotek: DefaultTheme.SidebarItem[] = [
},
]

const skabelonloesning: DefaultTheme.SidebarItem[] = [
{
text: 'Fælles Skabelonløsning',
items: [
{ text: 'Overview', link: '/projects/skabelonloesning/' },
{ text: 'Estimeringsnotat', link: '/projects/skabelonloesning/estimeringsnotat' },
{ text: 'Interactive Mocks', link: '/projects/skabelonloesning/mocks' },
],
},
]

const designSystem: DefaultTheme.SidebarItem[] = [
{
text: 'Design System',
Expand Down Expand Up @@ -146,6 +157,7 @@ export function sidebar(): DefaultTheme.Sidebar {
'/projects/roboway/': roboway,
'/projects/dansk-viden-til-dansk-ai/': danskVidenTilDanskAi,
'/projects/ai-bibliotek/': aiBibliotek,
'/projects/skabelonloesning/': skabelonloesning,
'/projects/design-system/': designSystem,
}
}
Expand Down
4 changes: 4 additions & 0 deletions docs/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -50,4 +50,8 @@ features:
details: Fælles bibliotek hvor danske myndigheder kan dele og hjemtage AI-assistenter — med katalog, søgning, modelkort, vidensopskrift og versioneret JSON-eksport, så lokale use cases kan skaleres nationalt.
link: /projects/ai-bibliotek/
linkText: View project
- title: Fælles Skabelonløsning
details: Analyse og oplæg til et open source-alternativ til DynamicTemplate — bygget på åbne standarder og delbart via OS2. Med løsningsbeskrivelse, faseopdelt timeestimat og en interaktiv visualisering af administrationsgrænsefladen.
link: /projects/skabelonloesning/
linkText: View project
---
12 changes: 7 additions & 5 deletions docs/projects/design-system/tokens.md
Original file line number Diff line number Diff line change
Expand Up @@ -77,10 +77,12 @@ shifts.
| `--ds-text-secondary` | `--ds-gray-700` |
| `--ds-text-muted` | `--ds-gray-600` |
| `--ds-text-link` | `--ds-teal-600` |
| `--ds-bg-page` | `--ds-gray-50` |
| `--ds-bg-page` | `#ffffff` |
| `--ds-bg-surface` | `--ds-white` |
| `--ds-bg-subtle` | `--ds-gray-100` |
| `--ds-border-default` | `--ds-gray-300` |
| `--ds-bg-subtle` | `#ffffff` |
| `--ds-bg-muted` | `#f4f6f6` |
| `--ds-border-default` | `#e3e8e8` |
| `--ds-border-subtle` | `#edf0f0` |
| `--ds-border-focus` | `--ds-teal-500` |
| `--ds-color-primary` | `--ds-teal-500` |
| `--ds-color-success` | `--ds-green-500` |
Expand Down Expand Up @@ -120,8 +122,8 @@ Line heights: `--ds-lh-tight` (1.25), `--ds-lh-snug` (1.4),

## Radii

`--ds-radius-sm` (3px), `--ds-radius-md` (6px), `--ds-radius-lg` (10px),
`--ds-radius-xl` (16px), `--ds-radius-2xl` (24px), `--ds-radius-pill`
`--ds-radius-sm` (2px), `--ds-radius-md` (3px), `--ds-radius-lg` (4px),
`--ds-radius-xl` (5px), `--ds-radius-2xl` (6px), `--ds-radius-pill`
(fully rounded), `--ds-radius-full` (alias for `pill`).

## Shadows
Expand Down
72 changes: 72 additions & 0 deletions docs/projects/skabelonloesning/estimeringsnotat.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
<small>**Project:** Fælles Skabelonløsning · **Status:** Estimat (oplæg)</small>

# Fælles Skabelonløsning — Estimeringsnotat

**Dato:** juni 2026
**Projekt:** Open source-alternativ til DynamicTemplate (DSG Scenarie 3)
**Fase:** Analyse / oplæg

::: warning Bemærkning
Notatet er bevidst holdt på et overordnet niveau. Det er et oplæg, ikke et tilbud — formålet er at give en størrelsesorden og efterlade manøvrerum i den videre proces. Estimaterne er grove og afhænger af de afklaringer, der er beskrevet i [hovednotatet](./). Scenarie 3 er, jf. DSG-indstillingen, det scenarie med størst usikkerhed.
:::

---

## Overordnet estimat

Estimatet er delt i faser, så projektet kan startes småt og udvides, efterhånden som koncept og behov afklares. Timetallene er **nedjusteret for udvikling med Claude Code** — se afsnittet [Claude Code-acceleration](#claude-code-acceleration) for antagelsen bag.

| Fase | Indhold | Estimat | Tidshorisont |
|---|---|---|---|
| **Fase 0 — Afklaring** | Lagringsmodel (DMS vs. git vs. andet), standard for skabelon-/fraseformat, governance-model, strategi for komplekse skabeloner, fagsystem-snitflader, juridisk afklaring af deling | 120–200 t. | 1–2 mdr. |
| **Fase 1 — POC** | Dokumentmotor: JSON → DOCX/PDF på 1–2 reelle Aarhus-skabeloner, simpel datamodel, simpel lagring, test af krav om komplekse skabeloner | 250–400 t. | 1,5–2,5 mdr. |
| **Fase 2 — MVP** | Skabelonregister (versionering, rettigheder, publicering), frasebibliotek, adminmodul-UI, web-editor-integration (OnlyOffice/Collabora), første fagsystem-integration | 700–1.100 t. | 4–6 mdr. |
| **Fase 3 — Fuld løsning** | Integrations-API til Cura/GetOrganized/Modulus Social, Word add-in + LibreOffice-extension, komplekse skabeloner/input-flows, migreringsværktøj (2.464 skabeloner + 10.000 fraser), OS2-udgivelse | 1.200–2.200 t. | Løbende |
| **Sum (fase 0–2)** | | **1.070–1.700 t.** | **ca. 6–10 mdr.** |
| **Sum (fase 0–3)** | | **2.270–3.900 t.** | **ca. 12–18 mdr.** |

### Anbefalet første skridt

**Fase 0 + Fase 1** leverer afklaring og en fungerende POC, der opfylder succeskriteriet: data flettet ind i reelle Aarhus-skabeloner med DOCX/PDF-output, og en afklaring af, om motoren kan bære kravet om komplekse skabeloner. Estimat **370–600 t.**, tidshorisont **ca. 3–4 måneder**.

Det giver et konkret beslutningsgrundlag for, om der skal investeres i fase 2 og 3 — uden at binde sig til hele løsningen på forhånd.

---

## Claude Code-acceleration

Udviklingsteamet anvender nu **Claude Code**, og estimaterne ovenfor er allerede nedjusteret for den produktivitetsgevinst. Gevinsten er konkret for netop dette projekt:

- **Analyse af de eksisterende skabeloner og fraser.** En `.docx` er reelt en zip med XML (OOXML). De 2.464 skabeloner og 10.000+ fraser kan derfor udtrækkes, kategoriseres og analyseres programmatisk — fx hvilke placeholders, kolofon-felter og makroer der faktisk bruges. Claude Code er stærkt til at skrive og iterere på den slags udtræks- og analysescripts.
- **Migreringsværktøjet (fase 3).** Konverteringsscripts fra eksisterende skabeloner til det åbne målformat er gentaget, mønsterbaseret arbejde — netop hvor Claude Code accelererer mest. Det er den tungeste post i fase 3, og den hvor gevinsten er størst.
- **Scaffolding.** Dokumentmotor, REST-API, datamodel og adminmodul-UI har genkendelige mønstre, der kan stilladseres hurtigt med god testdækning fra start.
- **Test og dokumentation.** Testdækning og teknisk dokumentation kan genereres og holdes ved lige løbende.

::: warning Hvor gevinsten ikke ligger
Claude Code accelererer **kode**, ikke **afklaring**. Fase 0 — governance, juridisk afklaring af deling af skabeloner/datagrundlag, fagsystem-snitflader og brugerdialog om den glidende overgang — drives af mennesker og er ikke nedjusteret. Det samme gælder verifikation af, at de migrerede skabeloner er korrekte: udtrækket kan automatiseres, men den faglige kvalitetskontrol kan ikke.
:::

---

## Drift og driftsomkostninger

En løsning af denne type er ikke et "byg og glem"-projekt. Den væsentligste langsigtede omkostning er **drift**, ikke selve udviklingen. Følgende skal afklares tidligt:

- **Hosting og ejerskab.** Hvem driver og betaler for platformen — et OS2/fælleskommunalt fællesskab, en værtskommune eller en central aktør? Driften skal have en fast ejer, ellers forfalder løsningen.
- **Løbende vedligehold.** Sikkerhedsopdateringer, afhængigheder, brugerstyring og support koster typisk **15–25 % af udviklingsestimatet pr. år**. For fase 0–2 svarer det groft til **160–425 t./år**.
- **Migrering som engangs-storopgave.** Udfasning af DynamicTemplate vil — uanset scenarie — involvere medarbejdere i stort set alle afdelinger. Selve det tekniske udtræk kan automatiseres, men den faglige gennemgang og godkendelse af 2.464 skabeloner og 10.000+ fraser er en betydelig, manuel opgave.
- **Governance og kvalitet.** Delte skabeloner og fraser skal kunne reviewes — fagligt ejerskab, rettigheder og korrekthed. Det kræver en proces og dermed tid, ikke kun teknik.
- **Projektledelse.** DSG-indstillingen forudsætter en dedikeret projektleder til implementering (ca. **1 årsværk**) for scenarie 2, 3 og 4. Det ligger ud over udviklingsestimatet ovenfor.

**Konklusion:** udviklingsomkostningen er en engangsinvestering; driften, governance og migreringen er løbende forpligtelser, der skal have et budget og en ejer fra dag ét.

---

## Forudsætninger og forbehold

- Estimaterne forudsætter genbrug af eksisterende ITKdev-fundament (auth, hosting-mønstre, design) og udvikling med Claude Code.
- De forudsætter, at en open source-dokumentmotor kan dække kravet om **komplekse skabeloner** (betingede felter, gentagelige sektioner, input-flows). Hvis ikke, vokser fase 1–3 markant — dette er den største enkeltstående usikkerhed og skal verificeres i POC'en.
- Lagrings- og versioneringsmodellen er uafklaret (git er uegnet til binære formater) og påvirker både fase 2 og driften.
- Fagsystem-integration (Cura, GetOrganized, Modulus Social) afhænger af systemernes API'er og af, om der overhovedet skal integreres eller bruges indbyggede løsninger — dette afklares i fase 0 og kan flytte væsentligt på fase 3.
- Migreringsvolumen (2.464 skabeloner + 10.000 fraser) er stor; estimatet antager, at en høj andel kan automatiseres, men den faglige verifikation kan ikke.
- Tallene er grove oplægs-estimater og skal kvalificeres i fase 0.
Loading
Loading