commit b9ec877e4e458f0186953171c20f16af7dcf48bd Author: Bendik Aagaard Lynghaug Date: Tue Sep 1 20:22:14 2026 +0200 Klingenberg Bygg: the earliest lysbue, ported to portal Three service questions, contact-method question, and thank-you page carried verbatim from klingenbergbygg/kundeportal questions.ts, with a brick-red Futura/Garamond custom.css over the default portal skin. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01Y42TyF8Zu7NGRR2893vNcZ diff --git a/.gitea/workflows/lint-and-reload.yml b/.gitea/workflows/lint-and-reload.yml new file mode 100644 index 0000000..7f4592f --- /dev/null +++ b/.gitea/workflows/lint-and-reload.yml @@ -0,0 +1,15 @@ +name: lint-and-reload +on: + push: + branches: [main] +jobs: + lint: + runs-on: fish + steps: + - name: checkout + run: | + rm -rf checkout && git clone --depth 1 https://prosjekt.klingenbergbygg.no/klingenbergbygg/questions.git checkout + - name: lint + run: /srv/app/klingenberg-portal/current/question_lint --path checkout/questions + - name: reload + run: nats --server nats://127.0.0.1:4222 pub portal.content.reload "" diff --git a/README.md b/README.md new file mode 100644 index 0000000..1cc24ca --- /dev/null +++ b/README.md @@ -0,0 +1,15 @@ +# Klingenberg Bygg — site content + +The content behind portal.klingenbergbygg.no: the earliest lysbue +(klingenbergbygg/kundeportal questions.ts) carried into the current +portal's question format, with a custom brick-and-Futura skin +(`custom.css`, referenced from site.yaml). Norwegian throughout. + +- `questions/` — `/` (three services), `/kontakt` (how to hear back), + `/takk` +- `custom.css` — brand skin layered over portal's default stylesheet +- `images/`, `fonts/` — logos and the FuturaNow display faces +- `aggregates.yaml` — the `kb_henvendelser` inquiry lifecycle + +File-upload fields render but need object storage (Garage) to accept +uploads; all are optional. diff --git a/aggregates.yaml b/aggregates.yaml new file mode 100644 index 0000000..1e5f3c6 --- /dev/null +++ b/aggregates.yaml @@ -0,0 +1,11 @@ +# Henvendelser fra kundeportalen. Attended by nats kv on kasse until a +# review desk gets wired here (Kanidm auth exists on this instance). +aggregates: + - bucket: kb_henvendelser + attended_by: Fredrik, via nats kv ls kb_henvendelser on kasse + initial: open + states: + open: { event: received } + answered: { event: answered } + transitions: + open: [answered] diff --git a/custom.css b/custom.css new file mode 100644 index 0000000..668b8b9 --- /dev/null +++ b/custom.css @@ -0,0 +1,79 @@ +/* Klingenberg Bygg — brand skin over the default portal stylesheet. + Loaded after portal's main.css (site.yaml `stylesheet`), so these + rules win. The whole recolor rides portal's own CSS custom + properties, so chrome stays consistent; fonts and a few section + treatments do the rest. */ + +@import url('https://fonts.googleapis.com/css2?family=EB+Garamond:ital,wght@0,400;0,500;0,600;1,400&display=swap'); + +@font-face { + font-family: "FuturaNow"; + font-weight: 800; + font-display: swap; + src: url("/site/fonts/futura-heavy.ttf") format("truetype"); +} +@font-face { + font-family: "FuturaNow"; + font-weight: 500; + font-display: swap; + src: url("/site/fonts/futura-medium.ttf") format("truetype"); +} + +:root { + /* Brick red — the logo tile's own colour. */ + --accent: #8a1e12; + --accent-soft: rgba(138, 30, 18, 0.12); + --paper: #f6f5f3; + --ink: #201a18; + --ink-dim: #6b615c; + --line: #ddd6d0; + --card-bg: rgba(255, 255, 255, 0.55); + --card-bg-opaque: rgba(255, 255, 255, 0.9); + --card-shadow: rgba(60, 30, 20, 0.14); + --hero-glow: rgba(246, 245, 243, 0.85); + --heading: "FuturaNow", var(--sans); + --sans: "EB Garamond", Georgia, "Times New Roman", serif; +} + +/* Display headings in heavy Futura, tightened. */ +h1, h2, h3 { + font-family: var(--heading); + letter-spacing: -0.01em; +} +.hero-copy h1 { font-size: 2.6rem; } + +/* Body reads as Garamond serif. */ +body { font-family: var(--sans); font-size: 1.06rem; } + +/* The section rhythm of the original: the service cards alternate a + dark, a plain, and a brick panel down the page. Text and controls + invert on the dark and brick ones. */ +.alt-card:nth-of-type(3n+1) { + --card-bg: #1a1613; + --card-bg-opaque: #1a1613; + --ink: #f3efe9; + --ink-dim: #b8ada2; + --line: #3a322c; + color: #f3efe9; +} +.alt-card:nth-of-type(3n) { + --card-bg: #8a1e12; + --card-bg-opaque: #8a1e12; + --ink: #fdf3ef; + --ink-dim: #e7c3ba; + --line: #a8362a; + --accent: #fdf3ef; + color: #fdf3ef; +} +/* On the brick panel the primary button flips to ink-on-cream. */ +.alt-card:nth-of-type(3n) .alt-submit { + background: #fdf3ef; + color: #8a1e12; +} + +/* Wordmark: the mark carries its own red ground, so just seat it. */ +.wordmark img { border-radius: 0.35rem; } + +/* Partner logos, when dropped into a feature as markdown images, sit + quiet and small rather than full-bleed. */ +.feature p img { max-width: 9rem; width: auto; border: none; } diff --git a/fonts/futura-heavy.ttf b/fonts/futura-heavy.ttf new file mode 100644 index 0000000..3593aee Binary files /dev/null and b/fonts/futura-heavy.ttf differ diff --git a/fonts/futura-medium.ttf b/fonts/futura-medium.ttf new file mode 100644 index 0000000..80f3368 Binary files /dev/null and b/fonts/futura-medium.ttf differ diff --git a/images/boeler.png b/images/boeler.png new file mode 100644 index 0000000..7c2a698 Binary files /dev/null and b/images/boeler.png differ diff --git a/images/dibk.svg b/images/dibk.svg new file mode 100644 index 0000000..8c51507 --- /dev/null +++ b/images/dibk.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/images/drammen.svg b/images/drammen.svg new file mode 100644 index 0000000..42a78bd --- /dev/null +++ b/images/drammen.svg @@ -0,0 +1,740 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/images/logo.svg b/images/logo.svg new file mode 100644 index 0000000..7b15554 --- /dev/null +++ b/images/logo.svg @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + diff --git a/images/nordre-follo.svg b/images/nordre-follo.svg new file mode 100644 index 0000000..12f3e6a --- /dev/null +++ b/images/nordre-follo.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/images/westra.png b/images/westra.png new file mode 100644 index 0000000..4c86af4 Binary files /dev/null and b/images/westra.png differ diff --git a/questions/index.yaml b/questions/index.yaml new file mode 100644 index 0000000..398b670 --- /dev/null +++ b/questions/index.yaml @@ -0,0 +1,178 @@ +# Klingenberg Bygg — carried over from the earliest lysbue +# (klingenbergbygg/kundeportal questions.ts), the ancestor of this +# whole question format. Wording kept verbatim. +name: Hvordan inkluderer vi ditt bygg i framtiden? +description: > + Med vår erfaring får vi kartlagt **tilstand**, utarbeidet + **prosjekt** og godkjent **søknad** for ditt bygg. +responsible: + name: Fredrik Borch Lynghaug + contact: fredrik@klingenbergbygg.no +alternatives: + - name: Få kartlagt byggets tilstand + description: > + Vi utarbeider tilstandsrapporter som representerer bygget med + hensyn til fremtidige mål. + action: /kontakt + consequence: [Kom i gang] + record_as: kb_henvendelser + encouragements: + - Mindre stillstand etter dette. + features: + - name: Befaring + description: > + For å utarbeide en rapport kreves det befaring hvor en rekke + undersøkelser for å måle hvilken forfatning bygget er i må + til, ved hjelp av materialprøver, termofotografering og andre + fremgangsmåter. + icon: lucide:clipboard-check + requirements: + - name: building + label: Hva slags eiendom er det? + type: select + options: [Leilighet, Enebolig, Fritidsbolig, Næringsbygg, Annet] + - name: adresse + label: Hvor ligger eiendommen? + placeholder: Adresse + optional: true + - name: Tegninger + description: > + Om byggtekniske tegninger mangler kan vi etterspørre dem fra + det lokale bygningskontoret, og om du sitter på egne er de + også ønskelig å få med. Vi kan også ta imot en filmsnutt av + huset eller relevante rom for – om mulig – å lage en punktsky + å ta utgangspunkt i. + icon: lucide:pencil-ruler + requirements: + - name: tegninger + label: Bilder, CAD-filer, skisser eller video + type: file + optional: true + - name: Dokumentasjon + description: > + Vi tar imot all mulig tilgjengelig dokumentasjon av + vedlikehold og endringer som er gjort på bygget i nyere tid, + med takk. + icon: lucide:file-text + requirements: + - name: dokumentasjon + label: Vedlegg + type: file + optional: true + - name: Vedlikeholdsvurdering + description: > + Beskriv hva som behøves av kartlegging, vedlikehold og + utbedringer i rapporten. + icon: lucide:wrench + requirements: + - name: damage + label: Hvilke mangler ønskes adressering? + placeholder: Forfall, skader eller annet… + type: textarea + - name: Standarder + description: > + Med rikelig kompetanse innen mange prosjekter vet vi å følge + godkjente standarder for rapportering. + icon: lucide:book-check + requirements: + - name: standard + label: Velg en standard vi vet å levere + type: select + options: [NS-EN 3424, NS-3423:2004, Egendefinert] + - name: Rivning + description: > + Om bygg skal rives, kan vi levere en utarbeidet + miljøsaneringsrapport. + icon: lucide:hammer + - name: Energibruk + description: > + Energiforbruk og besparelser ved endringer i bygget er også + en naturlig del av vår vurdering. + icon: lucide:zap + - name: Vi har samarbeidet med + description: > + [Drammen Kommune](https://drammen.kommune.no) · + [Nordre Follo Kommune](https://nordrefollo.kommune.no) · + [Bølerskogens Borettslag](https://bolerskogenborettslag.no/) + icon: lucide:handshake + - name: Prosjektér dine planer med oss + description: > + Ivareta eksisterende ressurser for et velfungerende og helhetlig + bygg. + action: /kontakt + consequence: [Start samarbeidet] + record_as: kb_henvendelser + encouragements: + - Gi det beste grunnlaget for utførelse. + features: + - name: Tegninger + description: > + Om du allerede har noe digitalt du kan vise oss, blir det + lettere å vite hvor vi skal starte. + icon: lucide:pencil-ruler + requirements: + - name: sketches + label: Bilder, CAD-filer og skisser + type: file + optional: true + - name: Arbeidsbeskrivelse + description: > + For en enklest mulig utførelse lager vi en så detaljert + beskrivelse av arbeidsmengdene som nødvendig, gjerne opp mot + standarden [NS 3420](https://standard.no/fagomrader/ns-3420-/). + icon: lucide:list-checks + requirements: + - name: wishes + label: Hva er din arbeidsbeskrivelse for prosjektet? + placeholder: Ønsker for bygget… + type: textarea + - name: Fremdriftsplan + description: > + Beskrivelse av prosjektets byggetrinn skaper ryddige + kontraktsmessige forhold og klare tidsrammer. + icon: lucide:calendar-range + requirements: + - name: start + label: Ønsket start + type: date + optional: true + - name: end + label: Ønsket ferdigstilt + type: date + optional: true + - name: Samarbeidspartner + description: > + [Westra Engineering AS](https://www.westra-engineering.no/) + icon: lucide:users + - name: Ta det første spadetaket med en godkjent søknad + description: > + Er bygget ferdig prosjektert så kan vi utarbeide en byggesøknad + og utførelsesbeskrivelse for offentlig godkjenning. + action: /kontakt + consequence: [Send henvendelse] + record_as: kb_henvendelser + encouragements: + - Nesten som å ha gravemaskin! + features: + - name: Ansvarsrett i byggesaker + description: > + Vi kan stå med det offentligrettslige ansvaret for de + fagområdene som kreves for utførelse. + icon: lucide:shield-check + - name: Sentral godkjenning + description: > + Vi har sentral + [godkjenning](https://sgregister.dibk.no/enterprises/976015711) + innen flere fagområder. + icon: lucide:badge-check + - name: Lokal godkjenning + description: > + Etter behov skaffer vi godkjenning for valgte fagområder, om + vi har den selv eller om vi henter den eksternt. + icon: lucide:map-pin + - name: Forhåndskonferanse + description: > + Avhengig av prosjektstørrelse kan det være avklarende å holde + forhåndskonferanse som redegjør for hvilke krav kommunen kan + sette for ønsket prosjekt. + icon: lucide:messages-square diff --git a/questions/kontakt.yaml b/questions/kontakt.yaml new file mode 100644 index 0000000..9e7f644 --- /dev/null +++ b/questions/kontakt.yaml @@ -0,0 +1,58 @@ +# The contact-method question — /tilstand, /prosjekter and /godkjent +# all led here in the original; the service choice is already recorded, +# so one page serves them all. +name: Hvordan ønsker du at vi skal høre fra deg? +description: > + Takk for henvendelsen og at du velger å jobbe med oss! +alternatives: + - name: Vi skriver en e-post til deg + description: > + Legg igjen din e-postadresse og vi følger deg opp videre. + action: /takk + consequence: [Fullfør] + record_as: kb_henvendelser + features: + - name: Hvem? + description: > + Hvem skal ha en tilbakemelding? + icon: lucide:mail + requirements: + - name: name + label: Navn + placeholder: Navn + - name: email + label: E-post + type: email + placeholder: bruker@eksempel.no + - name: Vi ringer deg + description: > + Vi gleder oss til å gi deg tilbakemelding. + action: /takk + consequence: [Fullfør] + record_as: kb_henvendelser + features: + - name: Hvem + description: > + Gi oss et telefonnummer vi kan gi tilbakemelding på. + icon: lucide:phone + requirements: + - name: name + label: Navn + placeholder: Navn + - name: phonenumber + label: Telefonnummer + type: tel + placeholder: Telefonnummer + - name: Når + description: > + Hvilket tidsvindu kan passe best for deg? + icon: lucide:clock + requirements: + - name: weekday + label: Dag + type: select + options: [Umiddelbart, Mandag, Tirsdag, Onsdag, Torsdag, Fredag] + - name: time + label: Tid på dagen + type: select + options: [Formiddag, Ettermiddag, Kveld] diff --git a/questions/takk.yaml b/questions/takk.yaml new file mode 100644 index 0000000..26e84a1 --- /dev/null +++ b/questions/takk.yaml @@ -0,0 +1,11 @@ +followup: true +name: Vent på svar på din henvendelse! +description: > + Vi vil gå gjennom din henvendelse og om mulig komme med et tilbud så + fort vi kan. +alternatives: + - name: Tilbake til start + description: > + Der spørsmålet begynner. + action: / + consequence: [Tilbake] diff --git a/site.yaml b/site.yaml new file mode 100644 index 0000000..f35aa3e --- /dev/null +++ b/site.yaml @@ -0,0 +1,5 @@ +title: Klingenberg Bygg +wordmark: https://prosjekt.klingenbergbygg.no/klingenbergbygg/questions/raw/branch/main/images/logo.svg +wordmark_height: 3.2 +lang: no +stylesheet: custom.css