一键导入
nav-plan
Arkitekturplanlegging med beslutningstrær for auth, kommunikasjon, database og Nais-konfigurasjon
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Arkitekturplanlegging med beslutningstrær for auth, kommunikasjon, database og Nais-konfigurasjon
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Generer conventional commit-meldinger med Nav-relevante scopes og breaking change-format
Expert builder for the Aksel design system (Nav / @navikt) React components, design tokens, layout primitives, theming (light/dark), icons, CSS, the Tailwind preset, version migrations, and Figma-to-code. Trigger on any frontend UI task that mentions Aksel, Nav/Navikt, "designsystemet", or @navikt/ds-* / @navikt/aksel-* packages — or that asks to add, create, build, or refactor a component (button, input, modal, table, alert, card, form) or layout, or to implement a design from Figma (a pasted figma.com/design/...?node-id link, "implement this design", "build this from Figma", design-to-code). Strong signals "using/with aksel", "@navikt/ds-react", "design system", a pasted figma.com link. If the work is frontend UI and there is any Aksel signal, invoke this skill unless the user explicitly opts out.
Integrer og konfigurer Nav Dekoratøren – felles header og footer for nav.no-applikasjoner. Bruk når et team skal ta i bruk Dekoratøren, oppdatere konfigurasjon, legge til breadcrumbs/språkvelger/analytics, håndtere samtykke (ekomloven), CSP eller feilsøke integrasjon mot dekoratøren.
Lag responsive layouts med Aksel Design System (v8+) - spacing tokens, layout primitives (Box, HStack, VStack, HGrid, Page, Bleed) og ResponsiveProp
Generer og kjør Playwright E2E-tester for webapplikasjoner med page objects, auth fixtures og tilgjengelighetstester
Kompakt output-stil som kutter fyllord og beholder teknisk substans — spar output-tokens uten å miste nøyaktighet.
| name | nav-plan |
| description | Arkitekturplanlegging med beslutningstrær for auth, kommunikasjon, database og Nais-konfigurasjon |
| license | MIT |
| metadata | {"domain":"general","tags":"planning architecture scaffold nais modernization migration"} |
Gå fra en vag idé til en konkret, Nav-kompatibel arkitekturplan. Bruker beslutningstrær for å velge riktig auth, kommunikasjon, database og Nais-oppsett.
| Arketype | Stack | Nais-type |
|---|---|---|
| Backend API | Kotlin/Ktor eller Spring Boot | Application |
| Hendelsekonsument | Kotlin + Kafka + Rapids & Rivers | Application |
| Frontend (innbygger) | Next.js + ID-porten + Wonderwall | Application |
| Frontend (saksbehandler) | Next.js + Azure AD + Wonderwall | Application |
| Batchjobb | Kotlin + scheduled | Naisjob |
| BFF (Backend-for-Frontend) | Next.js API routes | Application |
I tillegg til arketype, avklar om dette er nytt eller en endring:
| Endringstype | Ekstra beslutninger |
|---|---|
| Nybygg | Standard beslutningstrær (auth, data, kommunikasjon) |
| Modernisering | Migreringsstrategi, bakoverkompatibilitet, utrulling, dekommisjonering |
| Refaktorering | Karakteriseringstester, rollback-plan, parallellkjøring |
For modernisering og refaktorering — se modernization-patterns.md for konkrete mønstre og decision-trees.md for migreringsbeslutningstrær.
Se decision-trees.md for alle beslutningstrær.
Hvem kaller tjenesten?
├── Innbygger via nettleser
│ └── ID-porten + Wonderwall
│ idporten.enabled: true
│ Nais-sidecar: Wonderwall
│ Node.js: @navikt/oasis
│ JVM: token-support
│
├── Saksbehandler via nettleser
│ └── Azure AD + Wonderwall
│ azure.application.enabled: true
│ Nais-sidecar: Wonderwall
│ Node.js: @navikt/oasis
│ JVM: token-support
│
├── Annen Nav-tjeneste (med brukerkontext)
│ └── TokenX (token exchange)
│ tokenx.enabled: true
│ Kaller: exchangeToken(subjectToken, targetAudience)
│ Mottaker: valider TokenX-token
│
├── Annen Nav-tjeneste (uten brukerkontext / batch)
│ └── Azure AD client_credentials
│ azure.application.enabled: true
│ Kaller: getClientCredentialsToken(scope)
│ ⚠️ Kun når brukerkontext ikke er tilgjengelig!
│
└── Ekstern partner
└── Maskinporten
maskinporten.enabled: true
Definerer scopes for ekstern tilgang
Hva slags kommunikasjon?
├── Synkron (kaller og venter på svar)
│ ├── REST API (standard)
│ │ Kotlin: Ktor routing eller Spring @RestController
│ │ OpenAPI: Swagger/SpringDoc
│ │
│ └── GraphQL (komplekse, fleksible queries)
│ Sjelden brukt i Nav, foretrekk REST
│
├── Asynkron (fire-and-forget, hendelsedrevet)
│ ├── Kafka (standard for Nav)
│ │ Topic: {team}.{domene}.v1
│ │ Dev: 1 partisjon, Prod: 6+
│ │ Rapids & Rivers for hendelseskoreografi
│ │
│ └── Pub/Sub (GCP-native, sjelden)
│ Bare hvis Kafka ikke passer
│
└── Sanntid (push til klient)
└── Server-Sent Events
Ktor: respondSse {}
Next.js: ReadableStream
Trenger du persistent lagring?
├── Ja, relasjonell data
│ └── PostgreSQL via Nais (Cloud SQL)
│ gcp.sqlInstances[].type: POSTGRES_15
│ Flyway for migrasjoner
│ HikariCP pool: 3-5 (containere!)
│
│ Primærnøkkel?
│ ├── Domene-ID (fnr, saksnummer) → VARCHAR
│ └── Systemgenerert → BIGSERIAL eller UUID
│
├── Ja, analytisk / read-heavy
│ └── BigQuery
│ Separat Nais-konfigurasjon
│ Bruk @google-cloud/bigquery
│
├── Ja, cache / sesjon
│ └── Redis via Nais
│ gcp.redis[].tier: BASIC
│
└── Nei
└── Stateless tjeneste (bra! enklere drift)
Basert på beslutningene, generer disse artefaktene:
Se nais-templates.md for komplette maler per arketype.
# Generert manifest basert på beslutningstrær
apiVersion: nais.io/v1alpha1
kind: Application
metadata:
name: {app-name}
namespace: {team}
labels:
team: {team}
spec:
image: "{{ image }}"
port: 8080
# Auth — fra beslutningstre
# [genereres basert på valgt mekanisme]
# Database — fra beslutningstre
# [genereres hvis PostgreSQL valgt]
# Kafka — fra beslutningstre
# [genereres hvis Kafka valgt]
# Alltid inkluder:
liveness:
path: /isalive
readiness:
path: /isready
prometheus:
enabled: true
path: /metrics
resources:
requests:
cpu: 15m
memory: 256Mi
limits:
memory: 512Mi
replicas:
min: 2
max: 4
# accessPolicy — ALLTID eksplisitt
accessPolicy:
inbound:
rules: [] # Fyll inn basert på hvem som kaller
outbound:
rules: [] # Fyll inn basert på avhengigheter
Kotlin/Ktor:
{app-name}/
├── .nais/
│ ├── nais.yaml
│ └── nais-dev.yaml
├── .github/workflows/
│ └── build-deploy.yml
├── src/main/kotlin/no/nav/{team}/{app}/
│ ├── Application.kt
│ ├── Config.kt # Sealed class config
│ ├── api/
│ │ └── Routes.kt
│ ├── db/
│ │ └── Repository.kt # Kotliquery
│ └── kafka/
│ └── Consumer.kt # Rapids & Rivers
├── src/main/resources/
│ └── db/migration/
│ └── V1__initial_schema.sql
├── src/test/kotlin/
├── build.gradle.kts
└── Dockerfile
Next.js:
{app-name}/
├── .nais/
│ ├── nais.yaml
│ └── nais-dev.yaml
├── .github/workflows/
│ └── build-deploy.yml
├── src/
│ ├── app/
│ │ ├── layout.tsx
│ │ ├── page.tsx
│ │ └── api/ # BFF proxy routes
│ ├── components/
│ └── lib/
│ ├── auth.ts # @navikt/oasis
│ └── api-client.ts
├── next.config.ts
├── package.json
└── Dockerfile
name: Build and deploy
on:
push:
branches: [main]
permissions:
contents: read
id-token: write
jobs:
build:
runs-on: ubuntu-latest
outputs:
image: ${{ steps.docker-build-push.outputs.image }}
steps:
- uses: actions/checkout@v4
- uses: nais/docker-build-push@v0
id: docker-build-push
with:
team: {team}
identity_provider: ${{ secrets.NAIS_WORKLOAD_IDENTITY_PROVIDER }}
project_id: ${{ vars.NAIS_MANAGEMENT_PROJECT_ID }}
deploy-dev:
needs: build
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: nais/deploy/actions/deploy@v2
env:
CLUSTER: dev-gcp
RESOURCE: .nais/nais-dev.yaml
VAR: image=${{ needs.build.outputs.image }}
deploy-prod:
needs: [build, deploy-dev]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: nais/deploy/actions/deploy@v2
env:
CLUSTER: prod-gcp
RESOURCE: .nais/nais.yaml
VAR: image=${{ needs.build.outputs.image }}
Velg riktig testnivå basert på arketype og endringstype. Se Teststrategi-beslutningstre for detaljerte trær.
Minimum for alle arketyper:
| Arketype | Unit | Integrasjon | E2E |
|---|---|---|---|
| Backend API | Forretningslogikk | DB + auth | — |
| Hendelsekonsument | Meldingsbehandling | TestRapid | — |
| Frontend | Komponenter | — | Kritiske reiser |
| BFF | Transformasjoner | Auth-proxy | — |
| Batchjobb | Beregninger | DB | — |
Tillegg for modernisering:
Se Endringskonsekvensanalyse-tre for kartlegging av påvirkning.
Generer relevante dokumenter basert på endringstype og risiko. Se dokumentasjon og leveransemaler for fullstendige maler.
| Dokument | Når | Formål |
|---|---|---|
| Endringsdokument | Alltid for ikke-trivielle endringer | Beslutning, påvirkning, utrulling, rollback |
| Runbook-oppdatering | Ny tjeneste eller endret driftsadferd | Feilsøking, eskalering, helsesjekk |
| API-endringsdokument | Breaking changes eller nye API-er | Migrasjonsveiledning for konsumenter |
| Observerbarhet | Alle endringer i produksjonsadferd | Suksesskriterier, dashboards, alarmer |
Minimum output for enhver plan:
Verifiser at valgene henger sammen:
accessPolicy.inbound lister alle kallereaccessPolicy.outbound lister alle avhengigheter