13 Commits
Author SHA1 Message Date
blandClaude Opus 5.5 30ba7bc678 Fredriks rettelser i bildetekstene (#6)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GT37Z1Xtfd9pUuQtMTg6Yt
2026-10-01 17:57:12 +02:00
blandClaude Opus 5.5 73a03286fe Innloggede blir ikke spurt om navn og e-post
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GT37Z1Xtfd9pUuQtMTg6Yt
2026-10-01 11:46:58 +02:00
blandClaude Opus 5.5 09a8af04e2 Innlogget-linjen på samme linje som ordmerket
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GT37Z1Xtfd9pUuQtMTg6Yt
2026-10-01 11:38:33 +02:00
blandClaude Opus 5.5 7e2921f6b8 Hvem består Klingenberg Bygg av? som egen side; Hvordan presenterer du deg?
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GT37Z1Xtfd9pUuQtMTg6Yt
2026-09-30 21:52:30 +02:00
blandClaude Opus 5.5 894d313dc4 Bioen kan skrives i markdown
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GT37Z1Xtfd9pUuQtMTg6Yt
2026-09-30 21:39:01 +02:00
blandClaude Opus 5.5 fdae293834 Et kort som er tatt ned, forsvinner fra kontorets liste etter ti minutter
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GT37Z1Xtfd9pUuQtMTg6Yt
2026-09-30 20:50:47 +02:00
blandClaude Opus 5.5 c67160b6ff Hver ansatt retter sitt eget kort på forsiden
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GT37Z1Xtfd9pUuQtMTg6Yt
2026-09-30 20:39:28 +02:00
blandClaude Opus 5.5 473826aad6 Søknad på pause: kortet står, uten skjema
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GT37Z1Xtfd9pUuQtMTg6Yt
2026-09-30 20:11:31 +02:00
bl 56b30e126e Portal v0.6.3 2026-09-30 19:42:42 +02:00
blandClaude Opus 5.5 cad5d52481 Hvem består Klingenberg Bygg av: erfaringene og menneskene, lagt inn fra kontoret med portrett
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GT37Z1Xtfd9pUuQtMTg6Yt
2026-09-30 19:18:42 +02:00
blandClaude Opus 5.5 172afef359 Ny side, bygget av treneren: tilstand, prosjekt og søknad, fra henvendelse til levert
Fra plans/klingenbergbygg.yaml i uhhm/portal. Færre felt, én pult
(kontor), og kunden får innlogging når tilbudet er godtatt: egne
oppdrag og leverte dokumenter. Ordene er det gamle skjemaets der de
fantes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GT37Z1Xtfd9pUuQtMTg6Yt
2026-09-30 19:03:30 +02:00
bl 8ac3c3628f Merge pull request 'Rettskriving i bildetekstene' (#3) from ny-side into main
lint-and-reload / lint (push) Successful in 1s
2026-09-30 19:01:51 +02:00
blandClaude Opus 5.5 041ad8918d Rettskriving i bildetekstene
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GT37Z1Xtfd9pUuQtMTg6Yt
2026-09-30 19:01:42 +02:00
14 changed files with 335 additions and 45 deletions

No files matched your search

+1 -1
View File
@@ -24,7 +24,7 @@ on:
- .gitea/workflows/deploy.yml
env:
PORTAL_RELEASE: v0.6.2
PORTAL_RELEASE: v0.6.3
INSTANCE: klingenberg-portal
jobs:
+1 -1
View File
@@ -13,7 +13,7 @@ jobs:
# site runs (PORTAL_RELEASE in deploy.yml).
- name: lint
env:
PORTAL_RELEASE: v0.6.2
PORTAL_RELEASE: v0.6.3
run: |
curl -sfL "https://project.uhhm.no/uhhm/portal/releases/download/$PORTAL_RELEASE/portal-x86_64-linux" -o portal && chmod +x portal
./portal lint --path checkout/questions
+24
View File
@@ -1,4 +1,28 @@
aggregates:
- bucket: ansatte
initial: open
states:
open:
event: received
sluttet:
event: sluttet
leaves_after:
minutes: 10
transitions:
open:
- sluttet
- bucket: erfaringer
initial: open
states:
open:
event: received
fjernet:
event: fjernet
leaves_after:
minutes: 10
transitions:
open:
- fjernet
- bucket: leveranser
initial: open
states:
+10 -3
View File
@@ -106,15 +106,22 @@ h1, h2, h3 {
opacity: 1;
}
/* Who is here sits on the bar's line, at the page's right edge. */
/* Who is here sits on the wordmark's line, at the page's right edge. */
.session {
top: 1.75rem;
right: max(1.5rem, calc((100vw - var(--measure)) / 2 + 1.5rem));
font-family: var(--heading);
font-weight: 500;
font-size: 0.85rem;
}
.hero-top {
justify-content: space-between;
}
.hero-top .session {
position: static;
transform: none;
}
.slideshow {
--swiper-navigation-size: 1.6rem;
background: var(--line);
+53
View File
@@ -89,6 +89,7 @@ needs:
i_arbeid: søknad under arbeid
levert: søknad levert
avslatt: avsluttet uten oppdrag
paused: true
- id: leveranse
who: kontoret, når en rapport, tegninger eller et vedtak er klart til kunden
wants: at kunden får dokumentet og vet at det ligger der
@@ -109,6 +110,46 @@ needs:
open: levert
arkivert: arkivert
enters_as: kontor
- id: ansatt
who: en av oss på kontoret, som vil vise hvem hen er og hva hen kan
wants: at den som vurderer oss ser hvem som gjør jobben
enters: /kontor/ansatt
via: Kortet ditt
lands_in: ansatte
handled_by: kontor
stages:
- open
- sluttet
done_when:
- sluttet
success:
- sluttet
max_steps: 1
max_fields: 4
stage_words:
open: vises på forsiden
sluttet: sluttet
enters_as: kontor
- id: erfaring
who: en av oss på kontoret, når et oppdrag er verdt å vise fram
wants: at den som vurderer oss ser hva vi har gjort
enters: /kontor/erfaring
via: Et oppdrag med bilde
lands_in: erfaringer
handled_by: kontor
stages:
- open
- fjernet
done_when:
- fjernet
success:
- fjernet
max_steps: 1
max_fields: 3
stage_words:
open: vises
fjernet: fjernet
enters_as: kontor
personas:
- id: kommune-skole
need: tilstand
@@ -131,4 +172,16 @@ personas:
- id: ansvarsrett
need: soknad
text: Vi har prosjektert ombyggingen selv, men mangler noen med ansvarsrett som kan stå for søknaden.
- id: rapport-klar
need: leveranse
text: Tilstandsrapporten til borettslaget er ferdig. Jeg vil at styreleder skal få den og vite at den ligger der.
- id: ny-hos-oss
need: ansatt
text: Jeg har nettopp begynt hos Klingenberg Bygg og vil at kundene skal se hvem jeg er og hva jeg kan.
- id: nytt-portrett
need: ansatt
text: Portrettet mitt på forsiden er fra da jeg begynte. Jeg vil bytte det uten å skrive alt det andre på nytt.
- id: brannstasjonen
need: erfaring
text: Brannstasjonen i Ytre Enebakk står ferdig, og vi har gode bilder fra fundamenteringen. Den vil jeg vise fram.
tones: []
+47
View File
@@ -0,0 +1,47 @@
name: Hvem består Klingenberg Bygg av?
description: Menneskene som gjør jobben, oppdragene vi har gjort, og det vi står for.
responsible:
name: Fredrik Borch Lynghaug
contact: fredrik@klingenbergbygg.no
alternatives:
- name: Menneskene
description: De som går befaringene, skriver rapportene og står for søknadene.
features:
- name: ''
description: ''
resource:
source:
kind: kv
bucket: ansatte
public: true
states:
- open
empty: Snart presenterer vi oss her.
jq: 'sort_by(.submitted_ms) | reverse | .[] | .responses |= {name: .name, rolle: .rolle, erfaring: .erfaring, portrett: .portrett}'
- name: Erfaringer
description: Et utvalg oppdrag, med bilder.
features:
- name: ''
description: ''
resource:
source:
kind: kv
bucket: erfaringer
public: true
states:
- open
empty: Snart viser vi fram oppdrag her.
jq: 'sort_by(.submitted_ms) | reverse | .[] | .responses |= {tittel: .tittel, bilde: .bilde, om: .om}'
- name: Verdier
description: Det vi står for.
features:
- name: Mål to ganger
description: Vi måler to ganger og skriver én gang. Det gjelder betong, og det gjelder rapporter.
icon: lucide:ruler
- name: Bygget først
description: Et bygg bryr seg ikke om hvem som har rett. Vi skriver det bygget trenger, ikke det som er lettest å si.
- name: Ingen overraskelser i veggen
description: Det vi finner, får du vite. Også sprekkene.
icon: lucide:search
- name: Vannet finner en vei
description: Vannet finner alltid en vei. Derfor leter vi etter den først.
+20 -40
View File
@@ -11,6 +11,11 @@ alternatives:
description: Vi utarbeider tilstandsrapporter etter NS-EN 3424 og NS 3423, med befaring, materialprøver og termofotografering. Skal bygget rives, leverer vi miljøsaneringsrapport; energibruk og besparelser hører med i vurderingen. Vi har samarbeidet med [Drammen Kommune](https://drammen.kommune.no), [Nordre Follo Kommune](https://nordrefollo.kommune.no) og [Bølerskogens Borettslag](https://bolerskogenborettslag.no/).
- name: Prosjekt og søknad, med ansvarsrett
description: 'Vi lager arbeidsbeskrivelse opp mot [NS 3420](https://standard.no/fagomrader/ns-3420-/) og fremdriftsplan, og utarbeider byggesøknaden. Vi har sentral [godkjenning](https://sgregister.dibk.no/enterprises/976015711) innen flere fagområder og kan stå med det offentligrettslige ansvaret. Samarbeidspartner: [Westra Engineering AS](https://www.westra-engineering.no/).'
- name: Hvem består Klingenberg Bygg av?
description: Mennesker, erfaringer og verdier.
action: /hvem
consequence:
- Bli kjent med oss
- name: Få kartlagt byggets tilstand
description: Vi utarbeider tilstandsrapporter som representerer bygget med hensyn til fremtidige mål.
action: /received/tilstand
@@ -30,10 +35,12 @@ alternatives:
label: Navn
type: text
placeholder: Navn
value: '{user.name}'
- name: email
label: E-post
type: email
placeholder: bruker@eksempel.no
value: '{user.email}'
- name: telefon
label: Telefon
type: tel
@@ -86,10 +93,12 @@ alternatives:
label: Navn
type: text
placeholder: Navn
value: '{user.name}'
- name: email
label: E-post
type: email
placeholder: bruker@eksempel.no
value: '{user.email}'
- name: telefon
label: Telefon
type: tel
@@ -116,11 +125,11 @@ alternatives:
encouragements:
- Gi det beste grunnlaget for utførelse.
- name: Ta det første spadetaket med en godkjent søknad
description: Er bygget ferdig prosjektert, kan vi utarbeide en byggesøknad og utførelsesbeskrivelse for offentlig godkjenning.
description: Er bygget ferdig prosjektert, kan vi utarbeide en byggesøknad og utførelsesbeskrivelse for offentlig godkjenning. Akkurat nå har vi ikke kapasitet til nye søknadsoppdrag; vi åpner igjen så snart vi kan.
action: /received/soknad
consequence:
- Send henvendelse
record_as: soknader
disabled: true
features:
- name: Slik går det videre
description: Vi går gjennom det du har, avtaler befaring eller forhåndskonferanse, og sender deg et tilbud. Du sier selv ja eller nei, og med et ja får du en innlogging der du følger søknaden og henter dokumentene.
@@ -128,35 +137,6 @@ alternatives:
- name: Hvem leser dette
description: Fredrik på kontoret leser henvendelsen og tar kontakt. Du når ham også på fredrik@klingenbergbygg.no.
icon: lucide:users
- name: Om tiltaket
requirements:
- name: name
label: Navn
type: text
placeholder: Navn
- name: email
label: E-post
type: email
placeholder: bruker@eksempel.no
- name: telefon
label: Telefon
type: tel
optional: true
placeholder: Telefonnummer
- name: adresse
label: Hvor ligger eiendommen?
type: text
placeholder: Adresse
- name: tiltak
label: Hva går tiltaket ut på?
type: textarea
placeholder: Tilbygg, ombygging, nybygg…
- name: tegninger
label: Tegninger og prosjektering
type: file
optional: true
description: Hva skal bygges, og hvor. Avhengig av størrelsen kan vi holde forhåndskonferanse med kommunen først.
icon: lucide:file-text
encouragements:
- Nesten som å ha gravemaskin!
slideshow:
@@ -205,19 +185,19 @@ slideshow:
- image: images/bildeserie/11.webp
width: 1050
height: 1400
caption: Solid veggprofil tilpasset lyd og brann-krav
caption: Solid veggprofil tilpasset lyd- og brannkrav
- image: images/bildeserie/12.webp
width: 1867
height: 1400
caption: Nye vinduer med tradisjonelt-utseende «Restover» glass som avslører utsikten fra Munkeramme på Hvitsten
caption: Nye vinduer med tradisjonelt utseende «Restover»-glass som avslører utsikten fra Munkeramme på Hvitsten
- image: images/bildeserie/13.webp
width: 2571
height: 1400
caption: Kjærneved til varanda og inngangspartiet til Muncheramme
caption: Kjerneved til verandaen og inngangspartiet til Muncheramme
- image: images/bildeserie/14.webp
width: 1050
height: 1400
caption: Drenering og riktige rammer før kunsgressbanen legges mesterfullt ned helt uten gummikuler
caption: Drenering og riktige rammer før kunstgressbanen legges mesterfullt ned helt uten gummikuler
- image: images/bildeserie/15.webp
width: 2098
height: 1400
@@ -229,11 +209,11 @@ slideshow:
- image: images/bildeserie/17.webp
width: 1050
height: 1400
caption: Etanblering av ny byggekran
caption: Etablering av ny byggekran
- image: images/bildeserie/18.webp
width: 1050
height: 1400
caption: Armerignskontroll før støping
caption: Armeringskontroll før støping
- image: images/bildeserie/19.webp
width: 1867
height: 1400
@@ -241,7 +221,7 @@ slideshow:
- image: images/bildeserie/20.webp
width: 1867
height: 1400
caption: Her heises Moelvens modulskole i vestby på plass. Den blir stående i 10 år.
caption: Her heises Moelvens modulskole i Vestby på plass. Den blir stående i minst 10 år.
- image: images/bildeserie/21.webp
width: 1867
height: 1400
@@ -253,7 +233,7 @@ slideshow:
- image: images/bildeserie/23.webp
width: 2095
height: 1400
caption: Nytt kunstgress med varme på Fredikstad stasion.
caption: Nytt kunstgress med varme på Fredrikstad stasjon.
- image: images/bildeserie/24.webp
width: 1050
height: 1400
@@ -261,4 +241,4 @@ slideshow:
- image: images/bildeserie/25.webp
width: 1487
height: 1400
caption: pH-test av borreprøver i mur fra forskjellige dybder
caption: pH-test av borprøver i betong fra forskjellige dybder
+10
View File
@@ -0,0 +1,10 @@
name: Kortet ditt er lagret
description: Slik står du nå på forsiden.
alternatives:
- name: Vil du endre noe?
description: 'Åpne «Hvordan presenterer du deg?» igjen: kortet ditt er fylt ut med det du har, og det du lagrer erstatter det.'
- name: Se alle ansatte
description: ''
action: /status/ansatte
consequence:
- Åpne
+40
View File
@@ -0,0 +1,40 @@
followup: false
name: Hvordan presenterer du deg?
description: Det du skriver her, står på kortet ditt blant menneskene på forsiden.
responsible:
name: Fredrik Borch Lynghaug
contact: fredrik@klingenbergbygg.no
alternatives:
- name: Kortet ditt
description: Rett det du vil og lagre. Du har ett kort, og det du lagrer erstatter det som står der nå.
action: /kontor/ansatt-sent
consequence:
- Lagre kortet
record_as: ansatte
features:
- name: Når du lagrer
description: Kortet ditt på forsiden endres med en gang.
icon: lucide:route
- name: Hvem ser det
description: Alle som besøker siden. Navnet ditt er det du er logget inn med.
icon: lucide:users
- name: Kortet ditt
requirements:
- name: name
label: Navn
type: text
value: '{user.name}'
- name: rolle
label: Rolle
type: text
placeholder: For eksempel daglig leder, rådgivende ingeniør
- name: erfaring
label: Erfaring
type: textarea
placeholder: Utdanning, fagområder, bygg du er stolt av. Du kan skrive **fet**, *kursiv*, lister med - og [lenker](https://…).
- name: portrett
label: Portrett
type: file
accept: image/jpeg,image/png,image/webp
placeholder: Et stående bilde, gjerne tatt i dagslys. Velger du ikke noe nytt, beholder du det du har.
one_per_person: true
+10
View File
@@ -0,0 +1,10 @@
name: Oppdraget vises nå
description: Det står blant erfaringene på «Hvem består Klingenberg Bygg av?».
alternatives:
- name: Skal det ned igjen?
description: Trykk «Fjern» på raden i listen over erfaringer her på kontoret. Det forsvinner fra listen ti minutter etter.
- name: Se alle erfaringer
description: ''
action: /status/erfaringer
consequence:
- Åpne
+35
View File
@@ -0,0 +1,35 @@
followup: false
name: Hvilket oppdrag vil du vise fram?
description: Det du legger inn her, står blant erfaringene på «Hvem består Klingenberg Bygg av?».
responsible:
name: Fredrik Borch Lynghaug
contact: fredrik@klingenbergbygg.no
alternatives:
- name: Et oppdrag med bilde
description: Et bilde og noen løse ord om hva vi gjorde. Det vises med en gang.
action: /kontor/erfaring-sent
consequence:
- Vis fram
record_as: erfaringer
features:
- name: Når du sender
description: Oppdraget vises blant erfaringene med en gang, til noen på kontoret fjerner det.
icon: lucide:route
- name: Hvem ser det
description: Alle som besøker siden. Skriv ikke noe om kunden de ikke ville lest selv.
icon: lucide:users
- name: Oppdraget
requirements:
- name: tittel
label: Hva var det?
type: text
placeholder: 'For eksempel: Brannstasjonen i Ytre Enebakk'
- name: bilde
label: Bilde
type: file
accept: image/jpeg,image/png,image/webp
placeholder: Et bilde fra oppdraget, gjerne liggende
- name: om
label: Noen ord om det
type: textarea
placeholder: Hva vi gjorde, og hva som var verdt å gjøre skikkelig. **Fet**, *kursiv*, lister og lenker går an.
+44
View File
@@ -4,6 +4,40 @@ responsible:
name: Fredrik Borch Lynghaug
contact: fredrik@klingenbergbygg.no
alternatives:
- name: Ansatte på forsiden
description: Menneskene slik besøkende ser dem. Hver retter sitt eget kort; herfra kan et kort tas ned.
action: /kontor
consequence:
- Bekreft
features:
- name: Ansatte
description: Hver rad er én person på forsiden.
resource:
source:
kind: kv
bucket: ansatte
requires_group: kontor
transitions:
- from: open
to: sluttet
label: Tatt av forsiden
- name: Erfaringer
description: Oppdragene slik besøkende ser dem.
action: /kontor
consequence:
- Bekreft
features:
- name: Erfaringer
description: Hver rad er ett oppdrag som vises nå.
resource:
source:
kind: kv
bucket: erfaringer
requires_group: kontor
transitions:
- from: open
to: fjernet
label: Fjern
- name: Leverte dokumenter
description: Rapporter, tegninger og vedtak som er sendt til kunder.
action: /kontor
@@ -131,6 +165,16 @@ alternatives:
action: /kontor/leveranse
consequence:
- Ny leveranse
- name: Hvordan presenterer du deg?
description: 'Kortet ditt på forsiden: rolle, erfaring og portrett.'
action: /kontor/ansatt
consequence:
- Åpne
- name: Hvilket oppdrag vil du vise fram?
description: Et bilde og noen løse ord, blant erfaringene.
action: /kontor/erfaring
consequence:
- Åpne
- name: Gi en kollega tilgang
description: De får en konto og plass på kontoret, og ser de samme sakene som deg.
action: /kontor
+20
View File
@@ -0,0 +1,20 @@
name: Hvem består Klingenberg Bygg av?
description: Menneskene som går befaringene, skriver rapportene og står for søknadene.
responsible:
name: Fredrik Borch Lynghaug
contact: fredrik@klingenbergbygg.no
alternatives:
- name: Menneskene
description: ''
features:
- name: Menneskene
description: Hver rad er én sak og hvor langt den har kommet. Navn og kontaktopplysninger vises ikke her.
resource:
source:
kind: kv
bucket: ansatte
public: true
states:
- open
empty: Snart presenterer vi oss her.
jq: 'sort_by(.submitted_ms) | reverse | .[] | .responses |= {name: .name, rolle: .rolle, erfaring: .erfaring, portrett: .portrett}'
+20
View File
@@ -0,0 +1,20 @@
name: Hva har Klingenberg Bygg gjort?
description: Et utvalg oppdrag, med bilder.
responsible:
name: Fredrik Borch Lynghaug
contact: fredrik@klingenbergbygg.no
alternatives:
- name: Erfaringer
description: ''
features:
- name: Erfaringer
description: Hver rad er én sak og hvor langt den har kommet. Navn og kontaktopplysninger vises ikke her.
resource:
source:
kind: kv
bucket: erfaringer
public: true
states:
- open
empty: Snart viser vi fram oppdrag her.
jq: 'sort_by(.submitted_ms) | reverse | .[] | .responses |= {tittel: .tittel, bilde: .bilde, om: .om}'