build: the front door opens modestly, and a featured role must have a move

`does:` on a plan, at most two features, each `for:` a need: the first
card of the front door says what the business does, one role each,
headed by what that role gets, and asks for nothing. `shows:` is the
second card, portal resource blocks passed through verbatim plus every
public view. Only then the offers, as more alternatives on the same
page; the front-door warning moves to seven and stops recommending
doors. `Plan::spectators()` warns when a featured need gives the
submitter neither a move nor a view. uhhm.no rounds 4 and 5 (flat,
at least as good per persona) and Tomter Vel flat (worse: ten offers
on one page, the close pairs collide) are in runs/.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01L4jrCgLiKKHAEFuZUJjckH
This commit is contained in:
Bendik Aagaard Lynghaug
2026-09-23 18:24:23 +02:00
co-authored by Claude Fable 5.1
parent 9e511b5b57
commit 9e7f16c489
148 changed files with 13367 additions and 579 deletions
+21 -18
View File
@@ -28,37 +28,47 @@ groups:
# invitere inn i seg selv. Portal oppretter kontoen og en engangslenke.
invites_by: [styret]
doors:
# Forsiden åpner beskjedent: to trekk, én rolle hver, ingen knapp,
# før tilbudene lenger ned på samme side. De to velet er til for: en
# husstand som blir medlem, og en nabo som trenger en hånd. Begge har
# noe å gjøre etterpå: medlemmet melder seg ut selv, den som fikk
# hjelp sier selv fra at det er ordnet.
does:
- id: medlem
who: en husstand i Tomter som vil bli medlem, betale kontingent, eller melde flytting, ny e-post eller utmelding
- id: melde-fra
who: noen som har sett noe farlig i trafikken, eller noe ødelagt på lekeplassen eller stien
- id: bidra
who: noen som vil stille opp på 17. mai, dugnad eller et arrangement, eller sitte i en komité
- id: naboer
who: en nabo som trenger en hånd med snømåking, handling eller skyss, kan gi en, eller har noe å låne ut
for: bli-medlem
text: >
Velet taler for Tomter overfor kommunen, holder lekeplassene og
stien i stand og samler naboene på 17. mai og dugnad. 157
husstander er med. Du melder deg inn her, og ut igjen selv når
du vil.
- id: nabo
for: trenger-hjelp
text: >
Trenger du en hånd med snømåking, handling eller skyss, kobler
nabohjelpsgruppa deg med en nabo som kan. Du sier selv fra når
det er ordnet.
needs:
- id: bli-medlem
who: en husstand i Tomter
wants: å bli medlem og få betalt kontingenten
door: medlem
lands_in: husstander
handled_by: kasserer
stages: [open, betalt, utmeldt]
done_when: [betalt, utmeldt]
success: [betalt]
# Medlemmet melder seg ut selv, gjennom sin egen lenke.
moves_by: { utmeldt: [submitter, kasserer] }
max_fields: 3
collects:
- { name: navn }
- { name: adresse }
- { name: epost, type: email }
- { name: email, type: email }
- { name: telefon, type: tel, optional: true }
- id: endre-medlemskap
who: et medlem som har flyttet, byttet e-post eller vil melde seg ut
wants: at velet har riktige opplysninger om dem
door: medlem
lands_in: medlemsendringer
handled_by: kasserer
stages: [open, oppdatert]
@@ -73,7 +83,6 @@ needs:
- id: trafikkfare
who: en som har sett et farlig sted i trafikken
wants: at velet tar det opp med kommunen eller den som eier veien
door: melde-fra
lands_in: trafikkmeldinger
handled_by: trafikk
stages: [open, tatt_opp, ordnet, avvist]
@@ -90,7 +99,6 @@ needs:
- id: anleggsfeil
who: en som ser at noe på lekeplassen eller stien er ødelagt
wants: at det blir fikset før noen skader seg
door: melde-fra
lands_in: anleggsfeil
handled_by: lekeplasser
stages: [open, tatt_tak_i, utbedret]
@@ -121,7 +129,6 @@ needs:
- id: hjelpe-til
who: en som vil hjelpe til på et arrangement eller en dugnad
wants: å bli satt opp på noe som passer dem
door: bidra
lands_in: frivillige
handled_by: arrangementer
stages: [open, kontaktet, satt_opp, takket_nei]
@@ -136,7 +143,6 @@ needs:
- id: komite
who: en som vil sitte i en komité
wants: en plass i den komiteen som driver med det de bryr seg om
door: bidra
lands_in: komitesoknader
handled_by: styret
stages: [open, plassert, avslatt]
@@ -154,7 +160,6 @@ needs:
- id: trenger-hjelp
who: en beboer som ikke får til noe selv for tiden, som snømåking, handling eller en skyss
wants: at en nabo stiller opp
door: naboer
lands_in: hjelpebehov
handled_by: nabohjelp
stages: [open, formidlet, ordnet, ikke_lost]
@@ -172,7 +177,6 @@ needs:
- id: kan-hjelpe
who: en nabo som kan stille opp når noen trenger det
wants: å bli spurt når det passer
door: naboer
lands_in: hjelpere
handled_by: nabohjelp
stages: [open, registrert, trukket]
@@ -190,7 +194,6 @@ needs:
- id: dele-utstyr
who: en nabo som har noe å låne ut, eller trenger å låne noe
wants: et oppslag som naboene ser
door: naboer
lands_in: oppslag
handled_by: styret
stages: [open, lagt_ut, tatt_ned]
+44 -10
View File
@@ -24,23 +24,59 @@ groups:
# Owners onboard into every desk; a custodian can vouch for another.
invites_by: [owners]
doors:
- id: build
who: an organization with a problem software should solve, or a business that wants to see its own workflow as a working site before paying anyone
- id: join
who: someone who wants to build with us, hear from us now and then, or change this site
# The front door opens modestly: one or two features, one role each,
# and no button, before the offers further down the same page. The
# two roles UHHM exists for: an organization with a problem, and the
# people on the redoal network it keeps.
does:
- id: software
for: commission
text: >
Software built around a clear argument. Infrastructure, tools
and products for organizations that can say what problem they
have - and a working draft of your own workflow as a site,
before you pay for anything.
- id: redoal
for: custody
text: >
The redoal network, built and carried here: the gesture math,
the relay, the first node, and the portal this site runs on.
UHHM answers for what that network keeps.
# Things to look at before asking for anything.
shows:
- id: built
text: A few things already out in the world.
resource:
public: true
source: { kind: gitea_starred, username: bl }
jq: >
.[] | {name: .name, description: .description,
url: (if .website != null and .website != "" then .website
elif .private then null
else .html_url end)}
- id: voices
text: Live from the redoal relay - what has been left at places so far.
resource:
public: true
source: { kind: url, url: https://relay.redoal.com/pulse }
jq: >
{ "name": (.voices_echoed | tostring),
"description": "voices echoed so far" }
empty: The first voice has not echoed yet.
needs:
- id: commission
who: an organization with a problem it wants software to solve
wants: a considered reply to a brief, from people who read the whole thing
door: build
lands_in: projects
handled_by: owners
stages: [open, accepted, declined]
done_when: [accepted, declined]
success: [accepted]
events: { open: submitted }
# The client plays too: they can withdraw the brief themselves.
moves_by: { declined: [submitter, owners] }
max_fields: 4
collects:
- { name: name }
@@ -54,7 +90,6 @@ needs:
- id: trial
who: someone who runs a business where requests, approvals and handovers get lost, and wants to see it as a site before committing to anything
wants: a first draft of a site for their own roles, built from their own words and approved by a person first
door: build
lands_in: trials
handled_by: owners
stages: [open, approved, previewed, declined]
@@ -78,7 +113,6 @@ needs:
- id: collaborate
who: someone who wants to work with us on what we build
wants: to be read as a person, and invited in if there is a fit
door: join
lands_in: applicants
handled_by: owners
stages: [open, invited, active, departed, declined]
@@ -95,7 +129,6 @@ needs:
- id: subscribe
who: someone who wants to hear from us when there is something to say
wants: a note now and then, and an easy way out
door: join
lands_in: subscribers
handled_by: owners
stages: [open, unsubscribed]
@@ -111,7 +144,6 @@ needs:
- id: propose
who: a visitor who sees how a page on this site should change
wants: the change read by a person and, if approved, made
door: join
lands_in: development_proposals
handled_by: owners
stages: [open, approved, rejected]
@@ -137,6 +169,8 @@ needs:
stages: [open, in_dialogue, resolved, declined]
done_when: [resolved, declined]
success: [resolved]
# The person affected says when it is resolved, not only the custodian.
moves_by: { resolved: [submitter, custodians] }
max_fields: 4
collects:
- { name: name }