Oppslagstavla: ut med en gang, svar rett til den som la ut, redaktøren tar ned

Bygget om fra plans/tomtervel.yaml med ordene i bruk. Et oppslag står
på tavla fra det sendes; styret får e-post om det. Hver rad på tavla
har «Jeg kan låne ut eller låne denne», som åpner oppslagets egen side
med ett felt: e-post (skjult for den som er logget inn). Svaret går
rett til den som la ut, med naboens adresse og lenken for å ta ned.
Køen er innboksen deres. Redaktøren (de som står som ansvarlige) ser
oppslag og svar på sin egen pult og tar ned; klokka tar ned etter en
måned.

Trenger portal v0.5.5: lenke per rad, e-post til den oppslaget
tilhører, og e-postfelt fylt fra innloggingen.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GT37Z1Xtfd9pUuQtMTg6Yt
This commit is contained in:
bl
2026-09-30 07:02:39 +02:00
co-authored by Claude Fable 5.1
parent 85e8e4b613
commit 37df891901
11 changed files with 216 additions and 46 deletions
+33 -6
View File
@@ -142,18 +142,45 @@ aggregates:
states: states:
open: open:
event: received event: received
lagt_ut:
event: lagt_ut
mail: mail:
to: submitter to: post@tomtervel.no
subject: Oppslaget er synlig for naboene subject: 'Nytt oppslag på tavla: {hva}'
body: Oppslaget ditt er lagt ut, og naboene kan nå se det. body: |-
Et nytt oppslag står på tavla fra nå av.
{har_eller_trenger}: {hva}
Det står der til den som la det ut tar det ned, til redaktøren gjør det, eller i en måned. Hører det ikke hjemme, tas det ned her: {site}/redaktor
after:
days: 30
to: tatt_ned
tatt_ned: tatt_ned:
event: tatt_ned event: tatt_ned
transitions: transitions:
open: open:
- lagt_ut
- tatt_ned - tatt_ned
- bucket: svar
initial: open
states:
open:
event: received
mail:
to: '{oppslag.email}'
subject: En nabo har svart på oppslaget ditt
body: |-
Hei,
En nabo har svart på oppslaget ditt «{oppslag.hva}». Ta kontakt direkte: {email}
{hilsen}
Flere kan svare så lenge oppslaget står; du velger selv hvem du avtaler med. Når det er ordnet, tar du det ned her:
{site}/decide/dele-utstyr?chain={oppslag.id}&email={oppslag.email}
lest:
event: lest
transitions:
open:
- lest
- bucket: trafikkmeldinger - bucket: trafikkmeldinger
initial: open initial: open
states: states:
+23 -7
View File
@@ -201,26 +201,42 @@ needs:
trukket: trukket trukket: trukket
- id: dele-utstyr - id: dele-utstyr
who: en nabo som har noe å låne ut, eller trenger å låne noe who: en nabo som har noe å låne ut, eller trenger å låne noe
wants: et oppslag som naboene ser wants: et oppslag naboene ser med en gang
enters: / enters: /
via: Få hjelp av naboer, eller gi en hånd selv via: Få hjelp av naboer, eller gi en hånd selv
lands_in: oppslag lands_in: oppslag
handled_by: styret handled_by: redaktor
stages: stages:
- open - open
- lagt_ut
- tatt_ned - tatt_ned
done_when: done_when:
- lagt_ut
- tatt_ned - tatt_ned
success: success:
- lagt_ut - tatt_ned
max_steps: 2 max_steps: 2
max_fields: 4 max_fields: 4
stage_words: stage_words:
open: mottatt open: ute
lagt_ut: lagt ut
tatt_ned: tatt ned tatt_ned: tatt ned
- id: melde-seg
who: en nabo som kan låne ut, eller vil låne, det et oppslag gjelder
wants: at den som la ut oppslaget får vite det
enters: /status/oppslag/[key]
via: Si fra til den som la ut oppslaget
lands_in: svar
handled_by: redaktor
stages:
- open
- lest
done_when:
- lest
success:
- lest
max_steps: 1
max_fields: 2
stage_words:
open: sendt
lest: lest
- id: utlegg - id: utlegg
who: en i en komité som har lagt ut for noe who: en i en komité som har lagt ut for noe
wants: pengene tilbake wants: pengene tilbake
+6 -2
View File
@@ -28,16 +28,20 @@ alternatives:
empty: Ingenting er meldt ødelagt akkurat nå. Ser du noe, si fra. empty: Ingenting er meldt ødelagt akkurat nå. Ser du noe, si fra.
jq: 'sort_by(.submitted_ms) | reverse | .[:3] | .[] | .responses |= {hva: .hva, hvor: .hvor}' jq: 'sort_by(.submitted_ms) | reverse | .[:3] | .[] | .responses |= {hva: .hva, hvor: .hvor}'
- name: Oppslagstavla for naboer - name: Oppslagstavla for naboer
description: Utstyr som er til låns, og det naboene leter etter. [Hele oppslagstavla](/status/oppslag) description: Utstyr som er til låns, og det naboene leter etter. Svar rett fra oppslaget. [Hele oppslagstavla](/status/oppslag)
icon: lucide:list icon: lucide:list
resource: resource:
source: source:
kind: kv kind: kv
bucket: oppslag bucket: oppslag
public: true public: true
states: [] states:
- open
empty: Tavla er tom nå. Legg gjerne ut det første oppslaget. empty: Tavla er tom nå. Legg gjerne ut det første oppslaget.
jq: 'sort_by(.submitted_ms) | reverse | .[:3] | .[] | .responses |= {har_eller_trenger: .har_eller_trenger, hva: .hva}' jq: 'sort_by(.submitted_ms) | reverse | .[:3] | .[] | .responses |= {har_eller_trenger: .har_eller_trenger, hva: .hva}'
link:
to: /status/oppslag/{id}
label: Jeg kan låne ut eller låne denne
- name: Farlige steder i trafikken - name: Farlige steder i trafikken
description: Det naboer har meldt fra om, og hva velet har gjort med det. [Alle trafikkmeldinger](/status/trafikkmeldinger) description: Det naboer har meldt fra om, og hva velet har gjort med det. [Alle trafikkmeldinger](/status/trafikkmeldinger)
icon: lucide:car icon: lucide:car
+3 -3
View File
@@ -94,10 +94,10 @@ alternatives:
record_as: oppslag record_as: oppslag
features: features:
- name: Fra oppslag til avtale - name: Fra oppslag til avtale
description: Oppslaget legges ut for naboene å se. Når det er ordnet eller ikke lenger aktuelt, tas det ned igjen. description: Oppslaget står på tavla til du tar det ned selv, redaktøren gjør det, eller en måned har gått.
icon: lucide:clipboard-list icon: lucide:clipboard-list
- name: Hvem ser dette - name: Hvem ser dette
description: Styret legger ut oppslaget og kan nås på post@tomtervel.no i mellomtiden. description: Alle som åpner tavla, uten navn og e-post. Naboer som kan låne ut, eller vil låne, svarer deg rett på e-post.
icon: lucide:users icon: lucide:users
- name: Lån eller utlån - name: Lån eller utlån
requirements: requirements:
@@ -122,4 +122,4 @@ alternatives:
description: Skriv kort hva det gjelder, så folk skjønner det med en gang. description: Skriv kort hva det gjelder, så folk skjønner det med en gang.
icon: lucide:package icon: lucide:package
encouragements: encouragements:
- Vi legger det ut så naboene kan se det. - Det står på tavla med en gang.
+7 -7
View File
@@ -1,10 +1,10 @@
name: Hva skjer med det jeg har lagt ut? name: Hva skjer med oppslaget ditt?
description: Takk for at du la ut noe naboene kan låne. Vi legger det ut på oppslaget så snart vi kan. description: Det står på tavla nå, uten navn og e-post. Naboer som kan låne ut, eller vil låne, svarer deg på e-post.
alternatives: alternatives:
- name: Styret legger det ut for deg - name: Naboene svarer deg direkte
description: En i styret legger utstyret ut på naboenes oppslag, så andre kan se det og spørre om å låne. description: Hvert svar kommer som e-post med naboens adresse. Du velger selv hvem du avtaler med, og tar ned oppslaget når det er ordnet; lenken står i e-posten. Spørsmål går til styret på post@tomtervel.no.
- name: Se alt naboene deler - name: Se oppslagstavla
description: Se hva andre i Tomter har lagt ut til utlån akkurat nå. description: Det som står ute akkurat nå.
action: /status/oppslag action: /status/oppslag
consequence: consequence:
- Se hva naboer deler - Til tavla
+5
View File
@@ -0,0 +1,5 @@
name: Hva skjer nå?
description: Svaret ditt er sendt til den som la ut oppslaget.
alternatives:
- name: Den som la ut oppslaget tar kontakt
description: E-posten din gikk rett til dem. Hører du ikke noe, kan det være at noen andre var først ute. Spørsmål går til styret på post@tomtervel.no.
+1
View File
@@ -0,0 +1 @@
qualifies: redaktor
+79
View File
@@ -0,0 +1,79 @@
name: Hva står på oppslagstavla nå?
description: Redaktøren tar ned oppslag som er ordnet eller ikke hører hjemme, og ser svarene som har gått.
responsible:
name: Styret i Tomter Vel
contact: post@tomtervel.no
alternatives:
- name: Oppslag som står ute
description: Det naboene har lagt ut om noe de har eller trenger.
action: /redaktor
consequence:
- Bekreft
features:
- name: Oppslag
description: Hver rad er ett oppslag. Ta det ned når det er ordnet eller ikke hører hjemme.
resource:
source:
kind: kv
bucket: oppslag
requires_group: redaktor
transitions:
- from: open
to: tatt_ned
label: Ta ned oppslaget
- name: Svar som har gått
description: Hvert svar gikk rett til den som la ut oppslaget; her ser du at det skjedde.
action: /redaktor
consequence:
- Bekreft
features:
- name: Svar
description: Hver rad er ett svar, med e-posten til den som svarte. Merk som lest når du har sett det.
resource:
source:
kind: kv
bucket: svar
requires_group: redaktor
transitions:
- from: open
to: lest
label: Lest
- name: Inviter noen inn som redaktør
description: De får en konto, plass blant redaktørene, og en engangslenke der de selv velger passord eller passnøkkel.
action: /redaktor
consequence:
- Inviter
invite:
group: redaktor
features:
- name: Hvem
description: Navnet deres, og adressen kontoen og engangslenken går til.
requirements:
- name: name
label: Navn
- name: email
label: E-post
type: email
- name: Sendte invitasjoner
description: Hver invitasjon og hvor den står. En lenke som går ut ubrukt, kan sendes på nytt.
action: /redaktor
consequence:
- Bekreft
features:
- name: Hvem som er invitert
description: Hver rad er én invitasjon. Den blir ferdig av seg selv når personen logger inn, og står som utløpt når lenken gikk ut ubrukt.
resource:
source:
kind: kv
bucket: portal_invites
requires_group: redaktor
transitions:
- from: open
to: done
label: Er inne
- from: expired
to: open
label: Send på nytt
- from: expired
to: done
label: Er inne
+38
View File
@@ -0,0 +1,38 @@
name: Vil du låne ut, eller låne, det som står i oppslaget?
description: Du svarer på ett oppslag. Den som la det ut får e-posten din med en gang, og tar kontakt.
responsible:
name: Styret i Tomter Vel
contact: post@tomtervel.no
alternatives:
- name: Si fra til den som la ut oppslaget
description: Legg igjen e-posten din, så får de vite at du kan låne ut, eller vil låne.
action: /received/melde-seg
consequence:
- Send svar
record_as: svar
features:
- name: Hva skjer
description: E-posten din går rett til den som la ut oppslaget. Dere avtaler resten dere imellom.
icon: lucide:mail
- name: Hvem ser dette
description: Den som la ut oppslaget, og redaktøren.
icon: lucide:users
- name: Ditt svar
requirements:
- name: email
label: E-post
type: email
placeholder: ola@eksempel.no
value: '{user.email}'
- name: hilsen
label: En hilsen, om du vil
type: textarea
optional: true
placeholder: Jeg har en stige du kan låne i helga
- name: oppslag
type: record
of: oppslag
value: '{key}'
icon: lucide:package
encouragements:
- Flere kan svare; den som la ut velger selv.
+5 -1
View File
@@ -14,6 +14,10 @@ alternatives:
kind: kv kind: kv
bucket: oppslag bucket: oppslag
public: true public: true
states: [] states:
- open
empty: Ingenting her ennå. empty: Ingenting her ennå.
jq: 'sort_by(.submitted_ms) | reverse | .[] | .responses |= {har_eller_trenger: .har_eller_trenger, hva: .hva}' jq: 'sort_by(.submitted_ms) | reverse | .[] | .responses |= {har_eller_trenger: .har_eller_trenger, hva: .hva}'
link:
to: /status/oppslag/{id}
label: Jeg kan låne ut eller låne denne
+16 -20
View File
@@ -38,26 +38,6 @@ alternatives:
- from: open - from: open
to: avslatt to: avslatt
label: Avslå søknaden label: Avslå søknaden
- name: Utstyr til utlån blant naboer
description: Her ligger det naboer har å låne ut eller trenger å låne, klart til å legges ut.
action: /styret
consequence:
- Lagre
features:
- name: Oppslag
description: Hver rad er én sak. Knappene fører opp det du nettopp har gjort med den.
resource:
source:
kind: kv
bucket: oppslag
requires_group: styret
transitions:
- from: open
to: lagt_ut
label: Legg ut oppslaget
- from: open
to: tatt_ned
label: Ta ned oppslaget
- name: Meldinger om trafikkfarer - name: Meldinger om trafikkfarer
description: Her samles meldinger om farlige steder i trafikken, klare til å tas videre med kommunen eller veieier. description: Her samles meldinger om farlige steder i trafikken, klare til å tas videre med kommunen eller veieier.
action: /styret action: /styret
@@ -168,6 +148,22 @@ alternatives:
- name: email - name: email
label: E-post label: E-post
type: email type: email
- name: Inviter noen inn som redaktør
description: De får en konto, plass blant redaktørene, og en engangslenke der de selv velger passord eller passnøkkel.
action: /styret
consequence:
- Inviter
invite:
group: redaktor
features:
- name: Hvem
description: Navnet deres, og adressen kontoen og engangslenken går til.
requirements:
- name: name
label: Navn
- name: email
label: E-post
type: email
- name: Inviter noen inn i styret - name: Inviter noen inn i styret
description: De får en konto, plass i styret, og en engangslenke der de selv velger passord eller passnøkkel. Send lenken videre til dem. description: De får en konto, plass i styret, og en engangslenke der de selv velger passord eller passnøkkel. Send lenken videre til dem.
action: /styret action: /styret