GULLBERG sanatorium: første utkast, bygget av treneren
Deploy instance / deploy (push) Failing after 0s
lint-and-reload / lint (push) Failing after 2s

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GT37Z1Xtfd9pUuQtMTg6Yt
This commit is contained in:
blandClaude Opus 5.5 committed 2026-10-01 07:36:15 +02:00
commit bbec51f476
45 files changed
+2306

No files matched your search

+28
View File
@@ -0,0 +1,28 @@
name: Deploy instance
# This content repo owns its portal instance: which portal version runs
# on kasse for gullberg.klingenbergbygg.no. PORTAL_RELEASE pins it, so
# every rollout is a commit, revertable by reverting it. Content-only
# changes go through lint-and-reload instead.
#
# The one root action the runner may take is
# /usr/local/bin/deploy-portal-instance, which checks the instance
# against a fixed list and the tag against a release-tag shape.
on:
workflow_dispatch:
push:
branches: [main]
paths:
- .gitea/workflows/deploy.yml
env:
PORTAL_RELEASE: v0.6.10
INSTANCE: gullberg-portal
jobs:
deploy:
runs-on: fish
steps:
- name: Ship the pinned release and restart
run: sudo /usr/local/bin/deploy-portal-instance "$INSTANCE" "$PORTAL_RELEASE"
+22
View File
@@ -0,0 +1,22 @@
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/gullberg.git checkout
# The lint is portal itself, at the version this site runs
# (PORTAL_RELEASE in deploy.yml).
- name: lint
env:
PORTAL_RELEASE: v0.6.10
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
# Gullberg's own NATS, never the one the other sites share.
- name: reload
run: nats --server nats://127.0.0.1:4233 pub portal.content.reload ""
+9
View File
@@ -0,0 +1,9 @@
# GULLBERG sanatorium
Innholdet til gullberg.klingenbergbygg.no, et Klingenberg Bygg-prosjekt.
Bygget av treneren i portal fra `plans/gullberg.yaml` og
`plans/words/gullberg.json` i uhhm/portal; endres der og bygges på nytt.
- `questions/`, `aggregates.yaml`, `needs.yaml`, `site.yaml`: sidene, sakene og innstillingene.
- `custom.css`, `images/`, `fonts/`: utseendet.
- `.gitea/workflows/`: lint og innlasting ved hver push, og utrulling av den portal-versjonen `deploy.yml` peker på.
+239
View File
@@ -0,0 +1,239 @@
aggregates:
- bucket: eierskifte
initial: open
states:
open:
event: received
arbeid:
event: arbeid
ferdig:
event: ferdig
transitions:
arbeid:
- ferdig
open:
- arbeid
- bucket: feil
initial: open
states:
open:
event: received
mail:
to: fredrik@klingenbergbygg.no
subject: Meldingen om {hva} er mottatt
body: Feilen du meldte om {hva} er registrert hos oss. Klingenberg Bygg ser på den og melder tilbake når de vet mer. {link}
befaring:
event: befaring
overslag:
event: overslag
mail:
to: bl@klingenbergbygg.no
subject: Overslag er på vei for {hva}
body: Klingenberg Bygg har sett på {hva} og styret har fått et overslag å ta stilling til. Du hører fra oss når det er avgjort. {link}
godkjent:
event: godkjent
utbedret:
event: utbedret
mail:
to: submitter
subject: '{hva} er rettet'
body: Feilen du meldte om, {hva}, er nå utbedret. Si gjerne til hvis noe fortsatt ikke er som det skal. {link}
avvist:
event: avvist
transitions:
befaring:
- overslag
- avvist
godkjent:
- utbedret
open:
- befaring
- avvist
overslag:
- godkjent
- avvist
- bucket: husleie
initial: open
states:
open:
event: received
betalt:
event: betalt
purret:
event: purret
transitions:
open:
- betalt
- purret
purret:
- betalt
- bucket: liste
initial: open
states:
open:
event: received
vedtatt:
event: vedtatt
publisert:
event: publisert
forkastet:
event: forkastet
transitions:
open:
- vedtatt
- forkastet
vedtatt:
- publisert
- forkastet
- bucket: nedbetalingsplaner
initial: open
states:
open:
event: received
godkjent:
event: godkjent
sendt:
event: sendt
innvilget:
event: innvilget
endringer:
event: endringer
transitions:
godkjent:
- sendt
open:
- godkjent
sendt:
- endringer
- innvilget
- bucket: overslag
initial: open
states:
open:
event: received
mail:
to: bl@klingenbergbygg.no
subject: Overslaget for {gjelder} er mottatt
body: Overslaget for {gjelder} er kommet inn til styret og ligger til vurdering. Du hører fra oss når det er avgjort. {link}
godkjent:
event: godkjent
avvist:
event: avvist
fakturert:
event: fakturert
transitions:
godkjent:
- fakturert
open:
- godkjent
- avvist
- bucket: rapporter
initial: open
states:
open:
event: received
sendt:
event: sendt
transitions:
open:
- sendt
- bucket: rom
initial: open
states:
open:
event: received
utleid:
event: utleid
leaves_after:
minutes: 10
transitions:
open:
- utleid
- bucket: romsoknader
initial: open
states:
open:
event: received
mail:
to: submitter
subject: Søknaden til {studiested} er mottatt
body: |-
Søknaden din om rom, som student ved {studiested}, er registrert hos styret. Du hører fra oss når det er sett på. {link}
Det du kan gjøre nå: {site}/decide/leie-rom?chain={chain}&email={email}
visning:
event: visning
mail:
to: submitter
subject: Visning av rommet er satt opp
body: |-
Søknaden din har kommet til visning - styret vil vise deg rommet før det avgjøres. Du hører fra oss om tid og sted. {link}
Det du kan gjøre nå: {site}/decide/leie-rom?chain={chain}&email={email}
tilbud:
event: tilbud
mail:
to: submitter
subject: Du har fått tilbud om rom
body: |-
Styret har sett på søknaden din og kan tilby deg rommet. Svar her så snart du kan, så går vi videre med kontrakten. {link}
Det du kan gjøre nå: {site}/decide/leie-rom?chain={chain}&email={email}
akseptert:
event: akseptert
mail:
to: bl@klingenbergbygg.no
subject: Du har fått rommet
body: Søknaden din om et rom til studieåret er godtatt. Vi tar kontakt om det videre, og du er velkommen til å svare her om du har spørsmål. {link}
signert:
event: signert
mail:
to: submitter
subject: Kontrakten er signert
body: Kontrakten for rommet du søkte om er nå signert av begge parter. Rommet er ditt - velkommen inn. {link}
grants: leietakere
avslatt:
event: avslatt
transitions:
akseptert:
- signert
open:
- visning
- avslatt
tilbud:
- akseptert
- avslatt
visning:
- tilbud
- avslatt
- bucket: saker
initial: open
states:
open:
event: received
sakslisten:
event: sakslisten
vedtatt:
event: vedtatt
avvist:
event: avvist
transitions:
open:
- sakslisten
- avvist
sakslisten:
- vedtatt
- avvist
- bucket: uker
initial: open
states:
open:
event: received
bekreftet:
event: bekreftet
avslatt:
event: avslatt
transitions:
open:
- bekreftet
- avslatt
+215
View File
@@ -0,0 +1,215 @@
/* GULLBERG sanatorium - the skin over portal's own stylesheet
(site.yaml `stylesheet`, loaded after main.css, so these rules win).
One idea: a sanatorium from the thirties. Lime-washed plaster, pine
green for what is ruled and pressed, brass for what leads somewhere,
Futura capitals spaced like the wordmark for what is asked, and a
calm serif for what is said. Both colour schemes are drawn; the page
follows the reader's. */
@import url('https://fonts.googleapis.com/css2?family=Spectral:ital,wght@0,400;0,500;1,400&display=swap');
@font-face {
font-family: "FuturaNow";
font-weight: 500;
font-display: swap;
src: url("/site/fonts/futura-medium.ttf") format("truetype");
}
/* ---- colour: light, then dark ---------------------------------- */
:root {
--pine: #2f4a3a;
--accent: #8a6420;
--accent-soft: rgba(138, 100, 32, 0.12);
--paper: #f3f1ea;
--ink: #1d2420;
--ink-dim: #5c625c;
--line: #d9d5c8;
--card-bg: #fbfaf6;
--card-bg-opaque: #fbfaf6;
--card-shadow: rgba(30, 45, 35, 0.08);
--field: #ffffff;
--hero-glow: rgba(243, 241, 234, 0.85);
--error: #9b2c1f;
--heading: "FuturaNow", "Futura", "Century Gothic", sans-serif;
--sans: "Spectral", Georgia, "Times New Roman", serif;
--radius: 0.25rem;
--measure: 46rem;
color-scheme: light;
}
@media (prefers-color-scheme: dark) {
:root {
/* Pine is too dark to read as text on a dark ground; brass is the
accent there, and pine stays for what is filled. */
--pine: #3d6150;
--accent: #d6b46a;
--accent-soft: rgba(214, 180, 106, 0.16);
--paper: #121614;
--ink: #ece8de;
--ink-dim: #a9aba3;
--line: #2c3430;
--card-bg: #1a201d;
--card-bg-opaque: #1a201d;
--card-shadow: rgba(0, 0, 0, 0.45);
--field: #121614;
--hero-glow: rgba(18, 22, 20, 0.85);
--error: #f08c7c;
color-scheme: dark;
}
}
/* ---- type ------------------------------------------------------- */
body {
font-family: var(--sans);
font-size: 1.06rem;
line-height: 1.55;
}
h1, h2, h3 {
font-family: var(--heading);
font-weight: 500;
line-height: 1.15;
}
/* What is asked is set like the wordmark: capitals, spaced. */
.hero-copy h1,
.alt-card h2 {
text-transform: uppercase;
letter-spacing: 0.12em;
}
/* ---- the top ---------------------------------------------------- */
.hero {
align-items: stretch;
text-align: left;
}
.hero:not(.hero-slides),
.hero-bar,
.hero-slides .hero-copy {
width: 100%;
max-width: var(--measure);
margin-inline: auto;
box-sizing: border-box;
}
.wordmark {
opacity: 1;
}
.session {
font-family: var(--heading);
font-size: 0.82rem;
letter-spacing: 0.06em;
}
.hero-copy {
display: flex;
flex-direction: column;
align-items: flex-start;
text-align: left;
gap: 0.5rem;
}
.hero-copy h1 {
margin: 0.4rem 0 0;
font-size: clamp(1.5rem, 1rem + 2.2vw, 2.2rem);
}
.hero-copy p {
margin: 0;
max-width: 34rem;
font-size: 1.12rem;
color: var(--ink-dim);
}
/* ---- the cards -------------------------------------------------- */
.alternatives {
max-width: var(--measure);
gap: 1.4rem;
}
/* A card on the reading-room table: flat, a pine rule on its left. */
.alt-card {
background: var(--card-bg);
border: 0.06rem solid var(--line);
border-left: 0.3rem solid var(--pine);
border-radius: var(--radius);
box-shadow: 0 0.4rem 1.2rem var(--card-shadow);
padding: 1.6rem 1.8rem 1.7rem;
backdrop-filter: none;
}
.alt-card h2 {
font-size: 1.15rem;
margin: 0 0 0.45rem;
}
.feature h3,
.feature-name {
font-family: var(--heading);
letter-spacing: 0.04em;
}
.feature p a,
.alt-description a,
.hero-copy p a {
color: var(--accent);
border-bottom-color: var(--accent);
}
.alt-encouragement {
color: var(--ink-dim);
font-style: italic;
}
/* ---- forms ------------------------------------------------------ */
.field-label {
font-family: var(--heading);
font-size: 0.78em;
letter-spacing: 0.06em;
text-transform: uppercase;
color: var(--ink);
}
input,
textarea,
.select-option {
background: var(--field);
border-color: var(--line);
border-radius: 0.2em;
}
.select-option {
border-radius: 999rem;
}
.select-option.selected {
background: var(--pine);
border-color: var(--pine);
color: #f3f1ea;
}
.alt-submit {
font-family: var(--heading);
letter-spacing: 0.12em;
text-transform: uppercase;
background: var(--pine);
color: #f3f1ea;
border-radius: 0.2em;
}
/* ---- the foot --------------------------------------------------- */
.question-nav,
.down-the-tree-foot,
.question-responsible {
font-family: var(--heading);
letter-spacing: 0.04em;
}
Binary file not shown.
+8
View File
@@ -0,0 +1,8 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64">
<style>
rect { fill: #2f4a3a; }
text { fill: #f3f1ea; font-family: "Futura Now Headline", Futura, "Century Gothic", sans-serif; }
</style>
<rect width="64" height="64" rx="12"/>
<text x="32" y="45" text-anchor="middle" font-size="38" font-weight="500">G</text>
</svg>

After

Width:  |  Height:  |  Size: 345 B

+13
View File
@@ -0,0 +1,13 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 520 110" role="img" aria-label="GULLBERG sanatorium">
<style>
.mark { fill: #1d1b18; }
.sub { fill: #6b645a; }
@media (prefers-color-scheme: dark) {
.mark { fill: #f1ece3; }
.sub { fill: #b8b0a3; }
}
text { font-family: "Futura Now Headline", Futura, "Futura PT", "Century Gothic", "Avenir Next", "Jost", sans-serif; }
</style>
<text class="mark" x="260" y="68" text-anchor="middle" font-size="64" font-weight="500" letter-spacing="14">GULLBERG</text>
<text class="sub" x="260" y="96" text-anchor="middle" font-size="13" font-weight="500" letter-spacing="7">sanatorium</text>
</svg>

After

Width:  |  Height:  |  Size: 676 B

+311
View File
@@ -0,0 +1,311 @@
needs:
- id: leie-rom
who: en student som trenger et rimelig rom for studieåret
wants: et rom å bo på til en leie som går opp med studielånet
enters: /
via: Søk rom for studieåret
lands_in: romsoknader
handled_by: styret
stages:
- open
- visning
- tilbud
- akseptert
- signert
- avslatt
done_when:
- signert
- avslatt
success:
- signert
max_steps: 1
max_fields: 4
stage_words:
open: mottatt
visning: visning avtalt
tilbud: tilbud sendt
akseptert: tilbud godtatt
signert: kontrakt signert
avslatt: avsluttet uten leie
- id: ledig-rom
who: styret, når et rom blir ledig
wants: at studenter ser rommet før de søker
enters: /styret/ledig-rom
via: Meld inn et rom som er ledig
lands_in: rom
handled_by: styret
stages:
- open
- utleid
done_when:
- utleid
success:
- utleid
max_steps: 1
max_fields: 3
stage_words:
open: ledig
utleid: leid ut
enters_as: styret
- id: liste
who: styret, om huset og driften
wants: én liste over det som er bra, det som mangler og det som er planlagt, med pris og tid
enters: /styret/liste
via: Listen over huset og planene
lands_in: liste
handled_by: styret
stages:
- open
- vedtatt
- publisert
- forkastet
done_when:
- publisert
- forkastet
success:
- publisert
max_steps: 1
max_fields: 3
stage_words:
open: utkast
vedtatt: vedtatt
publisert: publisert
forkastet: forkastet
enters_as: styret
- id: rapport
who: styret, hvert kvartal
wants: at aksjonærene ser hvordan det går, i tall, og at banken får det den skal ha
enters: /styret/rapport
via: Rapporten som viser hvordan det går
lands_in: rapporter
handled_by: styret
stages:
- open
- sendt
done_when:
- sendt
success:
- sendt
max_steps: 1
max_fields: 7
stage_words:
open: lagt fram for aksjonærene
sendt: sendt til banken
enters_as: styret
- id: nedbetalingsplan
who: styret, når veien videre og pengestrømmen skal avtales
wants: en nedbetalingsplan alle fire aksjonærene står bak, som banken sier ja til
enters: /styret/nedbetalingsplan
via: Nedbetalingsplanen alle fire står bak
lands_in: nedbetalingsplaner
handled_by: styret
stages:
- open
- godkjent
- sendt
- innvilget
- endringer
done_when:
- innvilget
- endringer
success:
- innvilget
max_steps: 1
max_fields: 6
stage_words:
open: til godkjenning hos aksjonærene
godkjent: godkjent av aksjonærene
sendt: sendt til banken
innvilget: innvilget av banken
endringer: banken ber om endringer
enters_as: styret
also_moved_by:
- aksjonaerer
- id: husleie
who: styret, når husleia for en måned er kommet inn
wants: at aksjonærene ser hvilke rom som har betalt, og hva som gikk til banken
enters: /styret/husleie
via: Husleia for måneden, samlet ett sted
lands_in: husleie
handled_by: styret
stages:
- open
- betalt
- purret
done_when:
- betalt
success:
- betalt
max_steps: 1
max_fields: 4
stage_words:
open: forventet
betalt: betalt
purret: purret
enters_as: styret
- id: feil
who: en leietaker som har funnet noe som er galt i huset
wants: at det blir sett på og rettet
enters: /leietakere/feil
via: Meld fra om noe som er galt i huset
lands_in: feil
handled_by: klingenberg
stages:
- open
- befaring
- overslag
- godkjent
- utbedret
- avvist
done_when:
- utbedret
- avvist
success:
- utbedret
max_steps: 1
max_fields: 3
stage_words:
open: meldt
befaring: befaring avtalt
overslag: overslag gitt
godkjent: godkjent av styret
utbedret: utbedret
avvist: avvist
enters_as: leietakere
also_moved_by:
- styret
- id: overslag
who: Klingenberg Bygg, når en feil er sett på
wants: at styret får et beløp å ta stilling til, og at det havner i regnskapet
enters: /klingenberg/overslag
via: Overslaget går til styret
lands_in: overslag
handled_by: styret
stages:
- open
- godkjent
- avvist
- fakturert
done_when:
- fakturert
- avvist
success:
- fakturert
max_steps: 1
max_fields: 3
stage_words:
open: til styret
godkjent: godkjent
avvist: avvist
fakturert: fakturert
enters_as: klingenberg
also_moved_by:
- klingenberg
- id: eierskifte
who: styret, mens huset går over til selskapet
wants: at aksjonærene og banken ser hvor langt eierskiftet har kommet, med dokumentene
enters: /styret/eierskifte
via: Se hvor eierskiftet står
lands_in: eierskifte
handled_by: styret
stages:
- open
- arbeid
- ferdig
done_when:
- ferdig
success:
- ferdig
max_steps: 1
max_fields: 2
stage_words:
open: ikke startet
arbeid: i gang
ferdig: ferdig
enters_as: styret
- id: uke
who: en aksjonær som vil bruke huset en periode
wants: en uke i huset, bekreftet av styret
enters: /aksjonaerer/uke
via: Reserver en uke i huset
lands_in: uker
handled_by: styret
stages:
- open
- bekreftet
- avslatt
done_when:
- bekreftet
- avslatt
success:
- bekreftet
max_steps: 1
max_fields: 3
stage_words:
open: ønsket
bekreftet: bekreftet
avslatt: ikke ledig
enters_as: aksjonaerer
- id: sak
who: en aksjonær som vil ha noe avgjort
wants: at styret tar saken opp og avgjør den
enters: /aksjonaerer/sak
via: Få en sak opp i styret
lands_in: saker
handled_by: styret
stages:
- open
- sakslisten
- vedtatt
- avvist
done_when:
- vedtatt
- avvist
success:
- vedtatt
max_steps: 1
max_fields: 2
stage_words:
open: meldt
sakslisten: på sakslisten
vedtatt: vedtatt
avvist: avvist
enters_as: aksjonaerer
personas:
- id: student-bergen
need: leie-rom
text: Jeg begynner på master til høsten og har ikke råd til hybel i sentrum. Et rimelig rom i et stort hus høres perfekt ut.
- id: student-kort
need: leie-rom
text: Jeg skal på utveksling og trenger et rom bare for ett semester. Går det an?
- id: styret-rom
need: ledig-rom
text: Rommet i andre etasje blir ledig til jul, og jeg har et fint bilde av det. Det vil jeg legge ut.
- id: styret-mangel
need: liste
text: Taket på uthuset lekker. Det må stå på lista, og vi må ha en plan og en pris for det.
- id: styret-kvartal
need: rapport
text: Tredje kvartal er gjort opp. Leia kom inn, men strømmen ble dyrere enn vi trodde. Rapporten skal til banken.
- id: leietaker-vann
need: feil
text: Det drypper fra taket på badet i andre etasje når noen dusjer over. Hvem sier jeg fra til?
- id: klingenberg-overslag
need: overslag
text: Vi har sett på lekkasjen på badet. Det er en pakning og litt flis, rundt 6 500 kroner. Styret må si ja før vi setter i gang.
- id: styret-skjote
need: eierskifte
text: Skjøtet er tinglyst på selskapet i dag. Banken skal se det, og kopien skal ligge ved.
- id: aksjonaer-sommer
need: uke
text: Vi vil gjerne være i huset første uka i juli med barna.
- id: styret-plan
need: nedbetalingsplan
text: 'Vi har regnet på det: 24 000 i måneden fra rommene, og vi kan sette av en fast sum til långiveren hver måned. Alle fire må stå bak det før vi går til banken.'
- id: styret-husleie
need: husleie
text: Oktober er inne for to av rommene, det tredje mangler. Det må stå et sted alle ser.
- id: aksjonaer-sak
need: sak
text: Jeg mener vi bør se på solceller før vi tar opp mer lån. Kan styret ta det opp?
tones: []
+1
View File
@@ -0,0 +1 @@
qualifies: aksjonaerer
+161
View File
@@ -0,0 +1,161 @@
name: Hvordan ligger huset og driften an?
description: 'Her ser aksjonærene hvordan huset og driften står: eierskiftet, husleia, lista, overslagene og sakene.'
responsible:
name: Styret i Gullberg
contact: bl@klingenbergbygg.no
group: styret
alternatives:
- name: Se hvor langt eierskiftet har kommet
description: Hvert steg i overgangen til Gullberg AS, med dokumentene som hører til.
action: /aksjonaerer
consequence:
- Bekreft
features:
- name: Steg i eierskiftet
description: Hver rad er et steg med merknad og dokument; flytt det videre når det er i arbeid eller ferdig.
resource:
source:
kind: kv
bucket: eierskifte
requires_group: aksjonaerer
transitions: []
- name: Se hvilke rom som har betalt
description: Husleia for hvert rom, måned for måned, og hva som er purret på.
action: /aksjonaerer
consequence:
- Bekreft
features:
- name: Husleie
description: Hver rad er ett rom for én måned, med beløp og betalingsdato; merk den betalt eller purret.
resource:
source:
kind: kv
bucket: husleie
requires_group: aksjonaerer
transitions: []
- name: Se det som er bra, mangler og planlagt
description: Én liste over tilstanden i huset, med pris og tid på det som står igjen.
action: /aksjonaerer
consequence:
- Bekreft
features:
- name: Lista
description: Hver rad er ett punkt med kostnad og tidspunkt; vedta den, publiser den eller forkast den.
resource:
source:
kind: kv
bucket: liste
requires_group: aksjonaerer
transitions: []
- name: Godkjenn nedbetalingsplanen
description: Planen for lånet, lagt fram for alle fire aksjonærene og banken.
action: /aksjonaerer
consequence:
- Bekreft
features:
- name: Nedbetalingsplaner
description: Hver rad er en plan med lånebeløp og pengestrøm; følg den fra godkjent til innvilget hos banken.
resource:
source:
kind: kv
bucket: nedbetalingsplaner
requires_group: aksjonaerer
transitions:
- from: open
to: godkjent
label: Godkjenn planen
- name: Se overslagene fra Klingenberg Bygg
description: Beløpet Klingenberg Bygg har satt på en feil, klart til vedtak.
action: /aksjonaerer
consequence:
- Bekreft
features:
- name: Overslag
description: Hver rad er ett overslag med beløp og hva det dekker; godkjenn, avvis eller fakturer det.
resource:
source:
kind: kv
bucket: overslag
requires_group: aksjonaerer
transitions: []
- name: Se kvartalsrapportene
description: Tallene aksjonærene og banken skal ha, kvartal for kvartal.
action: /aksjonaerer
consequence:
- Bekreft
features:
- name: Rapporter
description: Hver rad er én periode med inntekter, kostnader og saldo; send den når den er klar.
resource:
source:
kind: kv
bucket: rapporter
requires_group: aksjonaerer
transitions: []
- name: Se sakene som er meldt til styret
description: Det en aksjonær vil ha styrets ord på, samlet på ett sted.
action: /aksjonaerer
consequence:
- Bekreft
features:
- name: Saksliste
description: Hver rad er én sak; sett den på sakslisten, vedta den eller avvis den.
resource:
source:
kind: kv
bucket: saker
requires_group: aksjonaerer
transitions: []
- name: Be om en uke i huset
description: Reserver en periode selv, bekreftet av styret.
action: /aksjonaerer/uke
consequence:
- Søk om uke
- name: Få noe avgjort av styret
description: Meld en sak du vil ha styrets ord på.
action: /aksjonaerer/sak
consequence:
- Meld sak
- name: Inviter en ny aksjonær inn
description: De får en konto og en lenke som gjelder én gang.
action: /aksjonaerer
consequence:
- Send invitasjon
invite:
group: aksjonaerer
features:
- name: Ny aksjonær
description: Ha navn, e-post og telefon klart.
requirements:
- name: name
label: Navn
- name: phone
label: Telefon
type: tel
- name: email
label: E-post
type: email
optional: true
- name: Se hvem som er invitert
description: Status på invitasjonene som er sendt ut.
action: /aksjonaerer
consequence:
- Bekreft
features:
- name: Invitasjoner
description: Hver rad er én invitasjon; send den på nytt om lenken har gått ut, eller trekk den tilbake.
resource:
source:
kind: kv
bucket: portal_memberships
requires_group: aksjonaerer
transitions:
- from: invited
to: removed
label: Trekk tilbake
- from: active
to: removed
label: Aktiv
- from: removed
to: invited
label: Send på nytt
+5
View File
@@ -0,0 +1,5 @@
name: Hva skjer med saken jeg nettopp sendte inn?
description: Saken er sendt til styret. Den havner på sakslisten og blir tatt opp der.
alternatives:
- name: Følg saken videre
description: Styret vurderer saken og vedtar eller avviser den. Du finner status på sakslisten.
+35
View File
@@ -0,0 +1,35 @@
followup: false
name: Er det noe som bør avgjøres av styret?
description: Her melder du inn en sak du vil at styret skal ta opp og avgjøre.
responsible:
name: Styret i Gullberg
contact: bl@klingenbergbygg.no
group: styret
alternatives:
- name: Få en sak opp i styret
description: Noe som bør avgjøres, men ikke er ditt å avgjøre alene? Legg den fram, så tar styret den opp.
action: /aksjonaerer/sak-sent
consequence:
- Send saken
record_as: saker
features:
- name: Fra forslag til vedtak
description: Saken kommer inn og settes på sakslisten, blir tatt opp av styret og ender med et vedtak eller en avvisning.
icon: lucide:list
- name: Hvem som leser den
description: Styret får saken og tar stilling til den; haster det, nå dem på bl@klingenbergbygg.no.
icon: lucide:users
- name: Ny sak
requirements:
- name: tittel
label: Tittel på saken
type: text
placeholder: Fast eller flytende leie for sommeren
- name: sak
label: Hva gjelder saken
type: textarea
placeholder: Vi bør avklare om timeshare-ukene skal prises likt hele året, eller om sommeren skal koste mer. Foreslår at styret tar stilling til dette før neste sesong.
description: Skriv kort hva saken går ut på og hvorfor den bør opp.
icon: lucide:vote
encouragements:
- Styret ser den og setter den på sakslisten.
+5
View File
@@ -0,0 +1,5 @@
name: Hva skjer nå med ukesøknaden din?
description: Den er sendt og ligger hos styret, som avgjør om uken blir bekreftet.
alternatives:
- name: Styret ser på søknaden din
description: De bekrefter eller avslår uken. Du finner svaret i oversikten når det er klart.
+40
View File
@@ -0,0 +1,40 @@
followup: false
name: Hvilken uke vil du bruke huset?
description: Meld fra om uken du ønsker, så bekrefter styret den.
responsible:
name: Styret i Gullberg
contact: bl@klingenbergbygg.no
group: styret
alternatives:
- name: Reserver en uke i huset
description: Si fra når du vil bruke huset, så ser styret om datoene passer.
action: /aksjonaerer/uke-sent
consequence:
- Send ønske
record_as: uker
features:
- name: Veien videre
description: Styret ser på ønsket ditt og bekrefter eller avslår uken.
icon: lucide:route
- name: Hvem leser dette
description: Styret ser ønsket ditt; skriv til bl@klingenbergbygg.no om det haster.
icon: lucide:users
- name: Ukeønske
requirements:
- name: fra
label: Fra dato
type: date
placeholder: f.eks. 6. juli 2027
- name: til
label: Til dato
type: date
placeholder: f.eks. 13. juli 2027
- name: merknad
label: Merknad
type: textarea
optional: true
placeholder: f.eks. kommer med familie, trenger ekstra seng
description: Fyll inn datoene du ønsker huset.
icon: lucide:calendar
encouragements:
- Du hører fra styret så snart datoene er sjekket.
+21
View File
@@ -0,0 +1,21 @@
name: Vil du ta imot tilbudet om rom?
description: Styret har sett på søknaden din og tilbyr deg et rom. Si ja og det er ditt, si nei og det går videre til neste på lista.
alternatives:
- name: Ta imot rommet
description: Du sier ja til rommet du har fått tilbud om. Styret tar kontakt om innflytting og signering.
self_transition:
bucket: romsoknader
to: akseptert
from:
- tilbud
label: Ta imot
- name: Takk nei til rommet
description: Du sier nei til tilbudet, og rommet går videre til neste søker.
self_transition:
bucket: romsoknader
to: avslatt
from:
- open
- tilbud
- visning
label: Takk nei
+21
View File
@@ -0,0 +1,21 @@
name: Hvordan går Gullberg rundt?
description: Forretningsplanen for Gullberg, slik eierne har lagt den fram for banken.
responsible:
name: Styret i Gullberg
contact: bl@klingenbergbygg.no
group: styret
alternatives:
- name: Huset
description: 'Utkast, skrives av eierne: hva huset er, hvor det ligger, hvor mange rom det har og i hvilken stand.'
- name: Forretningen
description: 'Utkast, skrives av eierne: de to inntektene, romleie til studenter og timeshare-uker, og hva hver av dem gir i året.'
- name: Eierne
description: 'Utkast, skrives av eierne: Gullberg AS eies av fire aksjonærer med 25 % hver. Hvem de er, hvordan styret er satt sammen, og hva som krever alle fire.'
- name: Lånet
description: 'Utkast, skrives av eierne: 1,6 millioner til å løse ut de to søsknene som ikke blir med (800 000 kr hver), og at selskapet overtar huset ved skjøte tinglyst på selskapet. Dokumentavgiften (normalt 2,5 % av verdien), rente, løpetid og sikkerhet slik banken tilbyr, og hvordan avdraget betjenes av husleia.'
- name: Budsjettet
description: 'Utkast, skrives av eierne: inntekter, drift, renter og avdrag for et normalår, og hvor rapportene står.'
- name: Det som mangler
description: 'Utkast, skrives av eierne: de største manglene ved huset, hva de koster å rette, og planen for det. Lista på siden holdes oppdatert.'
- name: Forvaltningen
description: 'Utkast, skrives av eierne: at Klingenberg Bygg forvalter huset, og hva det innebærer.'
+20
View File
@@ -0,0 +1,20 @@
name: Hva er Gullberg?
description: Et gammelt hus eid av fire aksjonærer og drevet av styret, med Klingenberg Bygg som forvalter. Her er rommene som er ledige nå.
responsible:
name: Styret i Gullberg
contact: bl@klingenbergbygg.no
alternatives:
- name: Rommene som er ledige
description: Rommene som står åpne for studenter som søker om et sted å bo.
features:
- name: ''
description: ''
resource:
source:
kind: kv
bucket: rom
public: true
states:
- open
empty: Ingen rom er ledige akkurat nå, men nye kommer når noen flytter ut.
jq: 'sort_by(.submitted_ms) | reverse | .[] | .responses |= {tittel: .tittel, bilde: .bilde, om: .om}'
+81
View File
@@ -0,0 +1,81 @@
name: Trenger du et rimelig rom å bo i mens du studerer?
description: Gullberg er et gammelt hus med rom til studenter. Eierne driver det selv, og Klingenberg Bygg forvalter huset og vedlikeholdet.
responsible:
name: Styret i Gullberg
contact: bl@klingenbergbygg.no
group: styret
alternatives:
- name: Et rimelig sted å bo for studenter
description: Gullberg har rom til leie gjennom studieåret, til en pris som går opp med studielånet.
features:
- name: Rom til leie gjennom hele studieåret
description: Du leier et rom i huset så lenge studieåret varer, til en husleie satt for studenter.
icon: lucide:house
- name: Hva er Gullberg?
description: Fire aksjonærer eier huset sammen og driver det selv, med Klingenberg Bygg som forvalter.
action: /hvem
consequence:
- Se huset og rommene
- name: Hva som er gjort, og hva som mangler
description: 'Det styret har vedtatt for huset: planene, med pris og tid der det er kjent.'
features:
- name: Siste fra lista
description: Punktene styret har tatt stilling til, ferskest øverst. [Se hele lista](/status/liste)
icon: lucide:clipboard-list
resource:
source:
kind: kv
bucket: liste
public: true
states:
- publisert
empty: Snart kommer de første punktene på lista.
jq: 'sort_by(.submitted_ms) | reverse | .[:3] | .[] | .responses |= {tittel: .tittel, slag: .slag, beskrivelse: .beskrivelse, kostnad: .kostnad, naar: .naar}'
link:
to: /status/liste/{id}
label: Svar
- name: Søk rom for studieåret
description: Fortell oss litt om deg, så tar styret kontakt når et rom passer.
action: /received/leie-rom
consequence:
- Søk rom
record_as: romsoknader
features:
- name: Veien videre
description: Søknaden havner hos styret, som inviterer deg på visning av et ledig rom. Sier du ja til tilbudet, signerer du leieavtalen og flytter inn.
icon: lucide:route
- name: Hvem leser søknaden
description: Styret i Gullberg leser søknaden din, og du når dem i mellomtiden på bl@klingenbergbygg.no.
icon: lucide:users
- name: Søknadsskjema
requirements:
- name: name
label: Navn
type: text
placeholder: Kari Nordmann
- name: email
label: E-post
type: email
placeholder: kari@student.no
- name: telefon
label: Telefon
type: tel
placeholder: 123 45 678
- name: studiested
label: Studiested
type: text
placeholder: NTNU
- name: innflytting
label: Ønsket innflytting
type: date
optional: true
placeholder: August 2026
- name: om
label: Litt om deg
type: textarea
optional: true
placeholder: Jeg studerer medisin og trenger et rolig sted å bo nær campus.
description: Fyll inn det du vet nå - resten kan vente til visningen.
icon: lucide:key
encouragements:
- Det tar bare et par minutter, og du hører fra styret så snart et rom er ledig.
+1
View File
@@ -0,0 +1 @@
qualifies: klingenberg
+104
View File
@@ -0,0 +1,104 @@
name: Hva trenger huset nå?
description: Her samler Klingenberg Bygg det leietakerne melder inn, og styret ser overslagene før de godkjennes.
responsible:
name: Styret i Gullberg
contact: bl@klingenbergbygg.no
group: styret
alternatives:
- name: Se hva som er meldt inn av feil
description: Her ser du det leietakerne har meldt, fra ny melding til den er utbedret.
action: /klingenberg
consequence:
- Bekreft
features:
- name: Meldte feil
description: Hver rad er en feil som er meldt inn; knappene under flytter den videre til befaring, overslag eller utbedret.
resource:
source:
kind: kv
bucket: feil
requires_group: klingenberg
transitions:
- from: befaring
to: overslag
label: Lag overslag
- from: befaring
to: avvist
label: Avvis saken
- from: godkjent
to: utbedret
label: Meld utbedret
- from: open
to: befaring
label: Sett opp befaring
- from: open
to: avvist
label: Avvis saken
- from: overslag
to: avvist
label: Avvis overslaget
- name: Følg opp overslagene dine
description: Her ser du overslagene du har levert, og om styret har godkjent dem.
action: /klingenberg
consequence:
- Bekreft
features:
- name: Leverte overslag
description: Hver rad er et overslag du har levert; marker det fakturert når regningen er sendt.
resource:
source:
kind: kv
bucket: overslag
requires_group: klingenberg
transitions:
- from: godkjent
to: fakturert
label: Merk fakturert
- name: Se alle overslag i ett regnskap
description: Her finner du overslagene samlet, uansett hvem som har meldt feilen.
action: /klingenberg/overslag
consequence:
- Åpne overslag
- name: Gi noen hos Klingenberg Bygg tilgang
description: Personen får en konto og en lenke som gjelder én gang, så de kan logge inn og se feilene selv.
action: /klingenberg
consequence:
- Send invitasjon
invite:
group: klingenberg
features:
- name: Inviter ny person
description: Ha navn, telefon og e-post klart.
requirements:
- name: name
label: Navn
- name: phone
label: Telefon
type: tel
- name: email
label: E-post
type: email
optional: true
- name: Hold oversikt over inviterte
description: Her ser du hvem som er invitert, og om de har tatt lenken i bruk.
action: /klingenberg
consequence:
- Bekreft
features:
- name: Sendte invitasjoner
description: Hver rad er en invitasjon; send den på nytt hvis lenken har gått ut, eller trekk den tilbake.
resource:
source:
kind: kv
bucket: portal_memberships
requires_group: klingenberg
transitions:
- from: invited
to: removed
label: Trekk tilbake
- from: active
to: removed
label: Tatt i bruk
- from: removed
to: invited
label: Send på nytt
+5
View File
@@ -0,0 +1,5 @@
name: Hva skjer med overslaget du nettopp sendte inn?
description: Det ligger nå hos styret, med beløp og hva det dekker. De tar stilling til det og fører det videre i regnskapet.
alternatives:
- name: Styret vurderer overslaget
description: Du hører fra dem hvis de trenger mer, ellers venter du på svar om det blir godkjent, avvist eller fakturert.
+44
View File
@@ -0,0 +1,44 @@
followup: false
name: Hva vil det koste å rette feilen?
description: Overslaget går til styret, som godkjenner eller avviser det før det føres i regnskapet.
responsible:
name: Styret i Gullberg
contact: bl@klingenbergbygg.no
group: styret
alternatives:
- name: Overslaget går til styret
description: Når du har sett på en feil og satt en pris, sender du overslaget hit, så styret kan ta stilling til det.
action: /klingenberg/overslag-sent
consequence:
- Send overslag
record_as: overslag
features:
- name: Veien videre
description: Styret godkjenner eller avviser overslaget. Blir det godkjent og arbeidet utført, blir det fakturert.
icon: lucide:route
- name: Hvem leser det
description: Styret i Gullberg leser overslaget og tar stilling til det, du når dem på bl@klingenbergbygg.no i mellomtiden.
icon: lucide:users
- name: Overslag på feil
requirements:
- name: gjelder
label: Hva overslaget gjelder
type: text
placeholder: Lekkasje på badet i rom 4
- name: belop
label: Beløp
type: text
placeholder: 12 500 kr
- name: hva-det-dekker
label: Hva beløpet dekker
type: textarea
placeholder: Ny membran, fliser og arbeidstid, to dagers arbeid
- name: dokument
label: Dokument
type: file
optional: true
placeholder: overslag-rom4.pdf
description: Ha prisen og hva den dekker klart før du sender.
icon: lucide:receipt
encouragements:
- Styret ser det i løpet av kort tid, og det følger saken videre til regnskapet.
+1
View File
@@ -0,0 +1 @@
qualifies: leietakere
+5
View File
@@ -0,0 +1,5 @@
name: Hva skjer nå med feilen jeg meldte?
description: Meldingen er sendt til Klingenberg Bygg, som drar på befaring og vurderer hva den koster å rette.
alternatives:
- name: Klingenberg Bygg ser på saken
description: De befarer feilen og lager et overslag som styret tar stilling til.
+51
View File
@@ -0,0 +1,51 @@
followup: false
name: Har du funnet noe i huset som bør rettes opp?
description: Meldingen går rett til Klingenberg Bygg, som forvalter huset. De ser på det, og styret godkjenner det som koster penger.
responsible:
name: Styret i Gullberg
contact: bl@klingenbergbygg.no
group: styret
alternatives:
- name: Meld fra om noe som er galt i huset
description: Fant du noe som ikke virker eller er ødelagt? Si fra, så ser styret på det.
action: /leietakere/feil-sent
consequence:
- Send feilen
record_as: feil
features:
- name: Hva skjer videre
description: Styret ser på feilen og avtaler en befaring. Deretter henter de inn et overslag, godkjenner det, og feilen rettes opp – eller avvises, med beskjed om hvorfor.
icon: lucide:route
- name: Hvem leser dette
description: Styret i Gullberg får meldingen og følger den opp; haster det, send en e-post til bl@klingenbergbygg.no.
icon: lucide:users
- name: Meld en feil
requirements:
- name: hva
label: Hva er galt
type: text
placeholder: Vannlekkasje under kjøkkenvasken
- name: hvor
label: Hvor i huset
type: text
optional: true
placeholder: Kjøkkenet i 2. etasje
- name: beskrivelse
label: Beskriv feilen
type: textarea
placeholder: Det drypper fra røret under vasken, har blitt verre siste uken
- name: email
label: E-post
type: email
placeholder: navn@student.no
value: '{user.email}'
- name: bilde
label: Bilde
type: file
accept: image/jpeg,image/png,image/webp
optional: true
placeholder: Last opp et bilde av feilen
description: Fortell hva som er galt og hvor, gjerne med bilde.
icon: lucide:wrench
encouragements:
- Tar et par minutter, og styret får beskjed med én gang.
+29
View File
@@ -0,0 +1,29 @@
name: Hva kan vi gjøre for deg i huset?
description: Feil leietakerne melder inn, og overslagene Klingenberg Bygg sender over, samlet på ett sted.
responsible:
name: Styret i Gullberg
contact: bl@klingenbergbygg.no
group: styret
alternatives:
- name: Feil
description: Sent in by en leietaker som har funnet noe som er galt i huset.
action: /leietakere
consequence:
- Bekreft
features:
- name: Feil
description: Hver rad er én av dine egne saker og hvor langt den har kommet.
resource:
source:
kind: kv
bucket: feil
requires_group: leietakere
transitions: []
where:
field: email
equals: '{user.email}'
- name: Har du funnet noe som er galt i huset?
description: Meld fra, så går det rett til Klingenberg Bygg.
action: /leietakere/feil
consequence:
- Meld fra
+5
View File
@@ -0,0 +1,5 @@
name: Hva skjer med søknaden min nå?
description: Styret går gjennom romsøknader fortløpende og svarer så snart det er en visning å tilby.
alternatives:
- name: Du hører fra styret om en visning
description: Styret tar kontakt på e-post eller telefon for å avtale tid. Får du tilbud om rommet, får du beskjed rett etter.
+24
View File
@@ -0,0 +1,24 @@
name: Hva er vedtatt og gjort for huset?
description: Her ligger det som styret har vedtatt og satt i verk, med pris og tid der det er kjent.
responsible:
name: Styret i Gullberg
contact: bl@klingenbergbygg.no
group: styret
alternatives:
- name: Det som er vedtatt og gjort
description: Åpen liste over det styret har vedtatt for huset.
features:
- name: Vedtatt og gjort
description: Hver rad er én sak, med hva den gjelder, kostnad og tidspunkt der det er satt.
resource:
source:
kind: kv
bucket: liste
public: true
states:
- publisert
empty: Ingen saker er publisert ennå.
jq: 'sort_by(.submitted_ms) | reverse | .[] | .responses |= {tittel: .tittel, slag: .slag, beskrivelse: .beskrivelse, kostnad: .kostnad, naar: .naar}'
link:
to: /status/liste/{id}
label: Svar
+24
View File
@@ -0,0 +1,24 @@
name: Hvilke rom er ledige nå?
description: Her finner du rommene som er ledige for innflytting, med bilde og en kort beskrivelse av hvert rom.
responsible:
name: Styret i Gullberg
contact: bl@klingenbergbygg.no
group: styret
alternatives:
- name: Ledige rom i huset
description: Rommene som er ledige akkurat nå.
features:
- name: Ledige rom
description: Hver rad er et rom du kan søke på.
resource:
source:
kind: kv
bucket: rom
public: true
states:
- open
empty: Ingen rom er ledige akkurat nå, men se gjerne innom igjen senere.
jq: 'sort_by(.submitted_ms) | reverse | .[] | .responses |= {tittel: .tittel, bilde: .bilde, om: .om}'
link:
to: /status/rom/{id}
label: Svar
+1
View File
@@ -0,0 +1 @@
qualifies: styret
+5
View File
@@ -0,0 +1,5 @@
name: Hva skjer nå med eierskiftesaken du sendte inn?
description: Steget er registrert og legger seg på listen over eierskiftet. Aksjonærene ser det neste gang de ser på fremdriften.
alternatives:
- name: Følg eierskiftet videre
description: Du finner status og alle steg i oversikten over eierskiftet, og kan legge inn mer når noe nytt skjer.
+49
View File
@@ -0,0 +1,49 @@
followup: false
name: Hvor langt har eierskiftet kommet?
description: Her legger styret inn stegene i overgangen til selskapet, så aksjonærene kan følge med. Banken får det den skal ha fra styret.
responsible:
name: Styret i Gullberg
contact: bl@klingenbergbygg.no
group: styret
alternatives:
- name: Se hvor eierskiftet står
description: Meld fra om neste steg i overgangen til selskapet, så ser aksjonærene og banken fremgangen.
action: /styret/eierskifte-sent
consequence:
- Legg inn steg
record_as: eierskifte
features:
- name: Fra melding til ferdig
description: Steget legges inn, så arbeides det med, og til slutt merkes det som ferdig.
icon: lucide:route
- name: Hvem leser det
description: Styret følger eierskiftet her; ring styret i mellomtiden hvis noe ikke kan vente.
icon: lucide:users
- name: Nytt steg i eierskiftet
requirements:
- name: steg
label: Hva er gjort
type: select
options:
- Selskapet stiftet
- Takst
- Lånet innvilget
- Aksjonæravtale signert
- Skjøte signert
- Skjøte tinglyst
- Dokumentavgift betalt
- Søsknene utbetalt
- name: merknad
label: Merknad
type: textarea
optional: true
placeholder: Megler venter på signatur fra den siste selgeren
- name: dokument
label: Dokument
type: file
optional: true
placeholder: skjote-gullberg.pdf
description: Skriv hva som er gjort, og legg ved dokumentet hvis det finnes et.
icon: lucide:file-text
encouragements:
- Tar et minutt, og listen oppdateres med én gang.
+5
View File
@@ -0,0 +1,5 @@
name: Hva skjer nå med husleia jeg registrerte?
description: Betalingen er lagt inn og synlig for resten av styret, sammen med de andre rommenes status denne måneden.
alternatives:
- name: Følg med i husleielista
description: Der ser dere hvilke rom som har betalt og hva som er purret på.
+44
View File
@@ -0,0 +1,44 @@
followup: false
name: Hvilke rom har betalt husleie denne måneden?
description: Her ser styret hvilke rom som har betalt husleia og hva som har gått til banken.
responsible:
name: Styret i Gullberg
contact: bl@klingenbergbygg.no
group: styret
alternatives:
- name: Husleia for måneden, samlet ett sted
description: Legg inn hva som er betalt per rom, så aksjonærene ser det og banken får sitt.
action: /styret/husleie-sent
consequence:
- Registrer husleie
record_as: husleie
features:
- name: Hva som skjer videre
description: Du registrerer at husleia er betalt. Hvis et rom ikke har betalt, markeres det som purret til det kommer inn.
icon: lucide:refresh-cw
- name: Hvem som ser dette
description: Styret ser oversikten; har du spørsmål underveis, ta kontakt med styret på bl@klingenbergbygg.no.
icon: lucide:users
- name: Registrer husleie
requirements:
- name: rom
label: Hvilket rom
type: text
placeholder: Rom 2
- name: maaned
label: Hvilken måned
type: text
placeholder: Oktober 2026
- name: belop
label: Beløp
type: text
placeholder: '4500'
- name: betalt-dato
label: Betalt dato
type: date
optional: true
placeholder: 2026-10-05
description: Ha rom, måned og beløp klart.
icon: lucide:banknote
encouragements:
- Det tar et minutt per rom.
+419
View File
@@ -0,0 +1,419 @@
name: Hva trenger styret å gjøre nå?
description: 'Her samler styret alt som skjer i huset: søknader, feil, økonomi og eierskiftet, med knappene som flytter hver sak videre.'
responsible:
name: Styret i Gullberg
contact: bl@klingenbergbygg.no
group: styret
alternatives:
- name: Se hvor langt eierskiftet har kommet
description: Følg stegene når huset går over til selskapet, med dokumentene på plass for aksjonærer og bank.
action: /styret
consequence:
- Bekreft
features:
- name: Steg i eierskiftet
description: Hver rad er ett steg i overgangen, med merknad og dokument; knappen under flytter steget videre.
resource:
source:
kind: kv
bucket: eierskifte
requires_group: styret
transitions:
- from: arbeid
to: ferdig
label: Merk steget ferdig
- from: open
to: arbeid
label: Start arbeidet
- name: Følg opp feil som er meldt inn
description: Se hva leietakerne har funnet galt i huset, og send det videre til Klingenberg Bygg for befaring og overslag.
action: /styret
consequence:
- Bekreft
features:
- name: Meldte feil
description: Hver rad er en feil meldt av en leietaker, med bilde og beskrivelse; knappene under sender den videre eller avviser den.
resource:
source:
kind: kv
bucket: feil
requires_group: styret
transitions:
- from: befaring
to: avvist
label: Avvis feilen
- from: open
to: avvist
label: Avvis feilen
- from: overslag
to: godkjent
label: Godkjenn overslaget
- from: overslag
to: avvist
label: Avvis overslaget
- name: Hold oversikt over husleia hver måned
description: Se hvilke rom som har betalt, og purr dem som ikke har gjort det.
action: /styret
consequence:
- Bekreft
features:
- name: Husleie per rom
description: Hver rad er husleia for ett rom én måned, med beløp og betalingsdato; knappene under merker betalt eller sender purring.
resource:
source:
kind: kv
bucket: husleie
requires_group: styret
transitions:
- from: open
to: betalt
label: Merk som betalt
- from: open
to: purret
label: Send purring
- from: purret
to: betalt
label: Merk som betalt
- name: Styr lista over det som er bra, mangler og er planlagt
description: Vedta punktene, sett pris og tid, og publiser dem som leietakerne skal se.
action: /styret
consequence:
- Bekreft
features:
- name: Punkter på lista
description: Hver rad er ett punkt med slag, beskrivelse, kostnad og tid; knappene under vedtar, publiserer eller forkaster det.
resource:
source:
kind: kv
bucket: liste
requires_group: styret
transitions:
- from: open
to: vedtatt
label: Vedta punktet
- from: open
to: forkastet
label: Forkast punktet
- from: vedtatt
to: publisert
label: Publiser punktet
- from: vedtatt
to: forkastet
label: Forkast punktet
- name: Følg nedbetalingsplanen fra aksjonærene til banken
description: Følg planen fra forslag til bankens svar, med pengestrømmen alle fire aksjonærene står bak.
action: /styret
consequence:
- Bekreft
features:
- name: Nedbetalingsplaner
description: Hver rad er en plan med lånebeløp, avdrag og pengestrøm; knappene under sender den til banken eller merker svaret.
resource:
source:
kind: kv
bucket: nedbetalingsplaner
requires_group: styret
transitions:
- from: godkjent
to: sendt
label: Send til banken
- from: sendt
to: endringer
label: Be om endringer
- from: sendt
to: innvilget
label: Merk som innvilget
- name: Ta stilling til overslag fra Klingenberg Bygg
description: Se beløpet for hver feil som er sett på, og godkjenn det som skal inn i regnskapet.
action: /styret
consequence:
- Bekreft
features:
- name: Overslag
description: Hver rad er et overslag med beløp og hva det dekker; knappene under godkjenner eller avviser det.
resource:
source:
kind: kv
bucket: overslag
requires_group: styret
transitions:
- from: open
to: godkjent
label: Godkjenn overslaget
- from: open
to: avvist
label: Avvis overslaget
- name: Send kvartalsrapporten til aksjonærene og banken
description: Samle tallene for kvartalet, og send rapporten videre når den er klar.
action: /styret
consequence:
- Bekreft
features:
- name: Kvartalsrapporter
description: Hver rad er rapporten for ett kvartal, med leieinntekter, kostnader og saldo; knappen under sender den.
resource:
source:
kind: kv
bucket: rapporter
requires_group: styret
transitions:
- from: open
to: sendt
label: Send rapporten
- name: Vis ledige rom frem til studentene
description: Legg ut rommet som er blitt ledig, og merk det utleid når noen har flyttet inn.
action: /styret
consequence:
- Bekreft
features:
- name: Rom
description: Hver rad er et rom med bilde og beskrivelse; knappen under merker det utleid.
resource:
source:
kind: kv
bucket: rom
requires_group: styret
transitions:
- from: open
to: utleid
label: Merk som utleid
- name: Følg opp søknader om rom fra studenter
description: Se hvem som har søkt, sett opp visning, og før søknaden frem til signert leieavtale.
action: /styret
consequence:
- Bekreft
features:
- name: Søknader om rom
description: Hver rad er en søknad fra en student, med studiested og ønsket innflytting; knappene under fører den videre eller avslår den.
resource:
source:
kind: kv
bucket: romsoknader
requires_group: styret
transitions:
- from: akseptert
to: signert
label: Merk som signert
- from: open
to: visning
label: Sett opp visning
- from: open
to: avslatt
label: Avslå søknaden
- from: tilbud
to: avslatt
label: Avslå søknaden
- from: visning
to: tilbud
label: Gi tilbud om rom
- from: visning
to: avslatt
label: Avslå søknaden
- name: Saker aksjonærene har meldt
description: Ta saker aksjonærene melder inn, sett dem på sakslisten, og vedta eller avvis dem.
action: /styret
consequence:
- Bekreft
features:
- name: Saker
description: Hver rad er en sak meldt inn av en aksjonær, med tittel og beskrivelse; knappene under setter den på sakslisten, vedtar eller avviser den.
resource:
source:
kind: kv
bucket: saker
requires_group: styret
transitions:
- from: open
to: sakslisten
label: Sett på sakslisten
- from: open
to: avvist
label: Avvis saken
- from: sakslisten
to: vedtatt
label: Vedta saken
- from: sakslisten
to: avvist
label: Avvis saken
- name: Bekreft ukene aksjonærene vil bruke huset
description: Se hvem som har meldt seg på en uke, og bekreft eller avslå den.
action: /styret
consequence:
- Bekreft
features:
- name: Ønskede uker
description: Hver rad er en uke en aksjonær har meldt seg på, med datoer og merknad; knappene under bekrefter eller avslår den.
resource:
source:
kind: kv
bucket: uker
requires_group: styret
transitions:
- from: open
to: bekreftet
label: Bekreft uken
- from: open
to: avslatt
label: Avslå uken
- name: Legg ut et rom som er blitt ledig
description: Skriv tittel, legg ved bilde og beskriv rommet, så studentene kan søke.
action: /styret/ledig-rom
consequence:
- Legg ut rom
- name: Legg til et nytt punkt på lista
description: Skriv hva som er bra, mangler eller planlagt, med pris og tid om du har det.
action: /styret/liste
consequence:
- Legg til punkt
- name: Lag kvartalets rapport
description: Fyll inn tallene for kvartalet, så aksjonærene og banken får det de skal ha.
action: /styret/rapport
consequence:
- Lag rapport
- name: Lag en ny nedbetalingsplan
description: Skriv lånebeløp, avdrag og pengestrøm, så banken har noe å ta stilling til.
action: /styret/nedbetalingsplan
consequence:
- Lag plan
- name: Registrer husleie for et rom
description: Før inn beløp og måned når husleia for et rom er kommet inn.
action: /styret/husleie
consequence:
- Registrer husleie
- name: Legg til et steg i eierskiftet
description: Beskriv steget og legg ved dokument, så aksjonærene ser fremgangen.
action: /styret/eierskifte
consequence:
- Legg til steg
- name: Gi en aksjonær tilgang til sin side
description: Send en invitasjon så aksjonæren får konto og engangslenke.
action: /styret
consequence:
- Send invitasjon
invite:
group: aksjonaerer
features:
- name: Inviter aksjonær
description: Ha navn, e-post og telefon klart.
requirements:
- name: name
label: Navn
- name: phone
label: Telefon
type: tel
- name: email
label: E-post
type: email
optional: true
- name: Gi Klingenberg Bygg tilgang til feilmeldinger
description: Send en invitasjon så de får konto og engangslenke.
action: /styret
consequence:
- Send invitasjon
invite:
group: klingenberg
features:
- name: Inviter Klingenberg Bygg
description: Ha navn, e-post og telefon klart.
requirements:
- name: name
label: Navn
- name: phone
label: Telefon
type: tel
- name: email
label: E-post
type: email
optional: true
- name: Gi en leietaker tilgang til sin side
description: Send en invitasjon så leietakeren får konto og engangslenke.
action: /styret
consequence:
- Send invitasjon
invite:
group: leietakere
features:
- name: Inviter leietaker
description: Ha navn, e-post og telefon klart.
requirements:
- name: name
label: Navn
- name: phone
label: Telefon
type: tel
- name: email
label: E-post
type: email
optional: true
- name: Gi et styremedlem tilgang til desken
description: Send en invitasjon så styremedlemmet får konto og engangslenke.
action: /styret
consequence:
- Send invitasjon
invite:
group: styret
features:
- name: Inviter styremedlem
description: Ha navn, e-post og telefon klart.
requirements:
- name: name
label: Navn
- name: phone
label: Telefon
type: tel
- name: email
label: E-post
type: email
optional: true
- name: Se hvem som er invitert og hvor langt de har kommet
description: Følg med på invitasjoner som er sendt, og send en ny lenke om den gamle har løpt ut.
action: /styret
consequence:
- Bekreft
features:
- name: Sendte invitasjoner
description: Hver rad er en invitasjon sendt til en person; knappene under trekker den tilbake eller sender den på nytt.
resource:
source:
kind: kv
bucket: portal_memberships
requires_group: styret
transitions:
- from: invited
to: removed
label: Trekk tilbake
- from: active
to: removed
label: Tatt i bruk
- from: removed
to: invited
label: Send på nytt
- name: Ta stilling til foreslåtte endringer
description: Se hva andre har foreslått å endre på sidene de har ansvar for.
action: /styret
consequence:
- Bekreft
features:
- name: Foreslåtte endringer
description: Hver rad er en foreslått endring; knappene under tar den til vurdering, godtar eller avslår den.
resource:
source:
kind: kv
bucket: portal_edit_suggestions
requires_group: styret
transitions:
- from: open
to: discussed
label: Tar en titt
- from: open
to: done
label: Endret
- from: open
to: declined
label: Avslått
- from: discussed
to: done
label: Endret
- from: discussed
to: declined
label: Avslått
+10
View File
@@ -0,0 +1,10 @@
name: Hva skjer med rommet du nettopp la ut?
description: Rommet er lagt inn og synlig for studenter som søker. Dere ser det under ledige rom til det er leid ut.
alternatives:
- name: Studenter kan søke på rommet nå
description: Søknader kommer inn etter hvert, og dere i styret ser dem sammen med de andre søknadene.
- name: Se alle rommene og status
description: Full oversikt over hvilke rom som er ledige og hvilke som er leid ut.
action: /status/rom
consequence:
- Se rommene
+39
View File
@@ -0,0 +1,39 @@
followup: false
name: Hvilket rom er ledig nå?
description: Legg ut et rom som har blitt ledig, så studenter kan se det og søke.
responsible:
name: Styret i Gullberg
contact: bl@klingenbergbygg.no
group: styret
alternatives:
- name: Meld inn et rom som er ledig
description: Når et rom står tomt, legger du det ut her, så ser studenter det før de søker.
action: /styret/ledig-rom-sent
consequence:
- Legg ut rommet
record_as: rom
features:
- name: Fra ledig til utleid
description: Rommet ligger ute til det er utleid.
icon: lucide:key
- name: Hvem ser dette
description: Studenter som søker rom ser dette, og styret kan nås på bl@klingenbergbygg.no i mellomtiden.
icon: lucide:users
- name: Om rommet
requirements:
- name: tittel
label: Tittel på rommet
type: text
placeholder: Rom i 2. etasje, mot gata
- name: bilde
label: Bilde av rommet
type: file
accept: image/jpeg,image/png,image/webp
- name: om
label: Om rommet
type: textarea
placeholder: Lyst rom med eget bad, nær kjøkken og felles stue.
description: Et bilde og en kort beskrivelse er nok til at studenter kan se seg om.
icon: lucide:key
encouragements:
- Så snart det er lagt ut, kan studenter melde seg på.
+10
View File
@@ -0,0 +1,10 @@
name: Hva skjer med punktet nå?
description: Forslaget ditt er lagret. Styret tar det opp til behandling.
alternatives:
- name: Styret vedtar eller forkaster punktet
description: Det blir stående til styret har tatt stilling, med pris og tid synlig for alle.
- name: Se hele lista
description: Alt som er meldt inn, vedtatt eller publisert ligger samlet.
action: /status/liste
consequence:
- Til lista
+52
View File
@@ -0,0 +1,52 @@
followup: false
name: Hva bør med på listen over huset og driften?
description: Punktene går inn på listen styret fører over det som er bra, det som mangler og det som er planlagt.
responsible:
name: Styret i Gullberg
contact: bl@klingenbergbygg.no
group: styret
alternatives:
- name: Listen over huset og planene
description: Legg til det som er bra, det som mangler og det som er planlagt, med pris og tid der dere vet det.
action: /styret/liste-sent
consequence:
- Legg til punkt
record_as: liste
features:
- name: Fra forslag til vedtak
description: Punktet legges inn, styret tar stilling til det og vedtar eller forkaster, og det som vedtas blir publisert på listen alle ser.
icon: lucide:check-circle
- name: Hvem ser listen
description: Styret fører og vedtar listen; ta kontakt på bl@klingenbergbygg.no om noe haster.
icon: lucide:users
- name: Nytt punkt på listen
requirements:
- name: tittel
label: Tittel
type: text
placeholder: Nytt kjøkken i andre etasje
- name: slag
label: Hva slags punkt
type: select
options:
- Kvalitet
- Mangel
- Plan
- name: beskrivelse
label: Beskrivelse
type: textarea
placeholder: Kjøkkenet er slitt og trenger nye hvitevarer og benkeplate.
- name: kostnad
label: Kostnad
type: text
optional: true
placeholder: ca. 45 000 kr
- name: naar
label: Når
type: text
optional: true
placeholder: Våren 2027
description: Skriv kort hva det gjelder, og ta med pris og tid hvis dere har tall.
icon: lucide:list
encouragements:
- Det havner på listen med en gang, og dere kan vedta det senere.
@@ -0,0 +1,5 @@
name: Hvor er nedbetalingsplanen nå?
description: Den ligger nå hos aksjonærene. Når alle fire har godkjent den, sender styret den til banken og fører inn svaret.
alternatives:
- name: Følg svaret fra banken
description: Når banken svarer, oppdaterer dere planen med godkjent, innvilget eller endringer – så de andre aksjonærene ser hvor den står.
+52
View File
@@ -0,0 +1,52 @@
followup: false
name: Hvordan skal lånet betales ned, og står alle fire bak det?
description: Planen går til aksjonærene og banken, og viser hvordan lånet skal betales ned.
responsible:
name: Styret i Gullberg
contact: bl@klingenbergbygg.no
group: styret
alternatives:
- name: Nedbetalingsplanen alle fire står bak
description: Legg fram planen for lånet, så banken og aksjonærene vet hvordan det skal betales ned.
action: /styret/nedbetalingsplan-sent
consequence:
- Send plan
record_as: nedbetalingsplaner
features:
- name: Veien videre
description: Planen går til godkjenning hos aksjonærene, så sendes den til banken. Sier banken ja, er den innvilget; ber den om endringer, kommer det en ny runde.
icon: lucide:route
- name: Hvem ser den
description: Styret og aksjonærene ser planen; spørsmål før den er sendt går til styret på bl@klingenbergbygg.no.
icon: lucide:users
- name: Nedbetalingsplan
requirements:
- name: tittel
label: Tittel
type: text
placeholder: Nedbetalingsplan 2026
- name: laanebelop
label: Lånebeløp
type: text
placeholder: 2 400 000 kr
- name: maanedlig-avdrag
label: Månedlig avdrag
type: text
placeholder: 18 000 kr
- name: forste-trekk
label: Første trekk
type: date
placeholder: 1. desember 2026
- name: pengestrom
label: Hvordan pengene flyter
type: textarea
placeholder: Husleie dekker avdraget, timeshare går til vedlikehold, overskudd settes av til buffer
- name: dokument
label: Dokument
type: file
optional: true
placeholder: Last opp plan eller avtaleutkast
description: Ha lånebeløp, avdrag og når det første trekket kommer, klart.
icon: lucide:banknote
encouragements:
- Styret tar den videre til banken så snart alle fire har sagt ja.
+5
View File
@@ -0,0 +1,5 @@
name: Hvor går rapporten nå?
description: Den er sendt. Aksjonærene får tallene, og det som skal til banken går dit.
alternatives:
- name: Neste rapport venter til kvartalet er omme
description: Neste rapport legger styret inn når kvartalet er omme.
+60
View File
@@ -0,0 +1,60 @@
followup: false
name: Hvordan gikk kvartalet, i tall?
description: Rapporten går til aksjonærene og banken, så de ser inntekter, kostnader og saldo for kvartalet.
responsible:
name: Styret i Gullberg
contact: bl@klingenbergbygg.no
group: styret
alternatives:
- name: Rapporten som viser hvordan det går
description: Hvert kvartal legger styret inn tallene, så aksjonærene ser status og banken får det den skal ha.
action: /styret/rapport-sent
consequence:
- Send rapport
record_as: rapporter
features:
- name: Hva skjer videre
description: Rapporten sendes til aksjonærene og banken. Når den er ute, merkes den som sendt.
icon: lucide:send
- name: Hvem leser den
description: Styret står for rapportene; har du spørsmål underveis, ta kontakt på bl@klingenbergbygg.no.
icon: lucide:users
- name: Kvartalets tall
requirements:
- name: periode
label: Hvilket kvartal gjelder dette
type: text
placeholder: 3. kvartal 2026
- name: leieinntekter
label: Leieinntekter
type: text
placeholder: 54 000
- name: timeshare
label: Inntekter fra ukene
type: text
placeholder: 12 000
- name: driftskostnader
label: Driftskostnader
type: text
placeholder: 18 500
- name: renter-og-avdrag
label: Renter og avdrag til banken
type: text
placeholder: 22 000
- name: saldo
label: Saldo ved kvartalets slutt
type: text
placeholder: 145 000
- name: kommentar
label: Kommentar til tallene
type: textarea
placeholder: Ett rom stod tomt i juli, ellers som normalt
- name: dokument
label: Regnskapsdokument
type: file
optional: true
placeholder: kvartalsregnskap-q3-2026.pdf
description: Ha regnskapstallene for kvartalet klare før du fyller ut.
icon: lucide:file-text
encouragements:
- Så snart den er sendt, ligger den klar for aksjonærene og banken.
+22
View File
@@ -0,0 +1,22 @@
title: GULLBERG sanatorium
wordmark: /site/images/wordmark.svg
wordmark_height: 3.2
stylesheet: custom.css
favicon: images/favicon.svg
lang: no
mail:
from: Gullberg <gullberg@klingenbergbygg.no>
reply_to: bl@klingenbergbygg.no
invite:
subject: Du er invitert til Gullberg
body: |-
Hei {name},
Du er invitert inn på Gullberg sin side, som {group}.
Velg passord her før {expires}:
{link}
Brukernavnet ditt er {username}. Etterpå logger du inn på {site}.
Hilsen styret i Gullberg