ワンクリックで
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.
Generer Architecture Decision Records (ADR) med flerperspektiv-review tilpasset Nav
Strukturert intervju som avdekker blindsoner i Nav-prosjekter — personvern, auth, avhengigheter og observerbarhet
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.
Strukturerte diagnostiske trær for vanlige Nav-plattformproblemer — pod-krasj, auth-feil, Kafka-lag og databaseproblemer
| 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