The front door opens modestly, and everything sits on it
Lint and reload / lint (push) Skipped

No doors: the page first says what UHHM does, two cards for the two
roles it exists for (a brief, and the redoal network), each headed by
what that role gets, then what there is to look at (what was built,
the relay's live count), and only then the six offers. The client can
withdraw a brief and the person on the network says when a case is
resolved, so both roles have a move after sending. Rebuilt by
portal-trainer from plans/uhhm.yaml, round 5.

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:15:06 +02:00
co-authored by Claude Fable 5.1
parent 5b657828e1
commit 8b4e6e053b
6 changed files with 249 additions and 228 deletions
+10 -10
View File
@@ -7,14 +7,14 @@ needs:
id: commission
lands_in: projects
max_fields: 4
max_steps: 2
max_steps: 1
stages:
- open
- accepted
- declined
success:
- accepted
via: You run an organization that needs software built
via: 'Have us build it: send the brief'
wants: a considered reply to a brief, from people who read the whole thing
who: an organization with a problem it wants software to solve
- done_when:
@@ -25,7 +25,7 @@ needs:
id: trial
lands_in: trials
max_fields: 6
max_steps: 2
max_steps: 1
stages:
- open
- approved
@@ -33,7 +33,7 @@ needs:
- declined
success:
- previewed
via: You run an organization that needs software built
via: See your own business as a site, before you buy anything
wants: a first draft of a site for their own roles, built from their own words and approved by a person first
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
- done_when:
@@ -44,7 +44,7 @@ needs:
id: collaborate
lands_in: applicants
max_fields: 3
max_steps: 2
max_steps: 1
stages:
- open
- invited
@@ -53,7 +53,7 @@ needs:
- declined
success:
- departed
via: You want to join us, follow us, or fix a page on this site
via: Work with us
wants: to be read as a person, and invited in if there is a fit
who: someone who wants to work with us on what we build
- done_when:
@@ -63,12 +63,12 @@ needs:
id: subscribe
lands_in: subscribers
max_fields: 2
max_steps: 2
max_steps: 1
stages:
- open
- unsubscribed
success: []
via: You want to join us, follow us, or fix a page on this site
via: Hear from us now and then
wants: a note now and then, and an easy way out
who: someone who wants to hear from us when there is something to say
- done_when:
@@ -79,14 +79,14 @@ needs:
id: propose
lands_in: development_proposals
max_fields: 3
max_steps: 2
max_steps: 1
stages:
- open
- approved
- rejected
success:
- approved
via: You want to join us, follow us, or fix a page on this site
via: Suggest a change to this website
wants: the change read by a person and, if approved, made
who: a visitor who sees how a page on this site should change
- done_when:
-94
View File
@@ -1,94 +0,0 @@
alternatives:
- action: /received/commission
consequence:
- Send the brief
description: You know the problem and want it solved, whether it is infrastructure, a tool, or the first version of a product. Write it up for people who read the whole thing.
encouragements:
- Someone here reads every brief in full before writing back.
features:
- description: We read your brief and either take it on or tell you honestly if it's not a fit.
icon: lucide:route
name: What happens next
- description: One of the owners reads it; write to bl@uhhm.no if you'd rather reach us directly.
icon: lucide:user-check
name: Who reads this
- description: The more of the problem you put in, the better the reply.
icon: lucide:briefcase
name: Tell us the problem
requirements:
- label: Your name
name: name
placeholder: Sara Nilsen
type: text
- label: Your email
name: email
placeholder: sara@company.com
type: email
- label: The problem you want solved
name: project
placeholder: Our drivers log hours on paper and it takes a day to get them into payroll.
type: textarea
- label: Your organization
name: organization
placeholder: Nilsen Transport AS
type: text
- label: Who we should talk to
name: org_contact
optional: true
placeholder: Sara Nilsen, ops manager
type: text
name: 'Have us build it: send the brief'
record_as: projects
- action: /received/trial
consequence:
- Start the draft
description: Describe how requests, approvals and handovers move through your business today. We approve it by hand and build a working draft of a site for your own roles, for you to click through.
encouragements:
- A person looks at what you send before anything gets built.
features:
- description: We look at what you sent and, if it's a fit, build a draft from your own roles and words for you to see before anything moves further.
icon: lucide:route
name: What happens next
- description: An owner looks at what you send; write to bl@uhhm.no if you'd rather reach us directly.
icon: lucide:user-check
name: Who reads this
- description: Answer in your own words - there's no wrong way to describe your business.
icon: lucide:layers
name: Describe your business
requirements:
- label: Your business
name: business
placeholder: Nilsen Transport AS
type: text
- label: Your email
name: email
placeholder: sara@company.com
type: email
- label: What you do
name: what_we_do
placeholder: We move freight for local businesses and handle the paperwork for them.
type: textarea
- label: Who comes to you
name: who_comes_to_us
placeholder: Local businesses that need something moved on short notice.
type: textarea
- label: What you keep track of
name: what_we_keep_track_of
placeholder: Bookings, driver hours, and which loads are still waiting on a signature.
type: textarea
- label: Who's involved
name: who_is_involved
placeholder: Drivers, dispatchers, and the customers waiting on their delivery.
type: textarea
- label: What slows you down
name: what_slows_us_down
optional: true
placeholder: Approvals sit in someone's inbox for days before anyone acts on them.
type: textarea
name: See your own business as a site, before you buy anything
record_as: trials
description: Have a problem software should solve, or want to see your own way of working as a site before you pay anyone?
name: Do you have a brief, or do you want to see your business as a site first?
responsible:
contact: bl@uhhm.no
name: Bendik Aagaard Lynghaug
+9
View File
@@ -0,0 +1,9 @@
alternatives:
- description: ''
name: Declined
self_transition:
bucket: projects
label: Declined
to: declined
description: ''
name: What would you like to do?
+9
View File
@@ -0,0 +1,9 @@
alternatives:
- description: ''
name: Resolved
self_transition:
bucket: custody_requests
label: Resolved
to: resolved
description: ''
name: What would you like to do?
+221 -14
View File
@@ -1,22 +1,229 @@
alternatives:
- action: /build
consequence:
- Start here
description: Send us a brief, or first describe how work flows through your business and see it as a working site before you pay for anything.
- description: Two things, both built here and both running.
features:
- description: ''
- description: 'UHHM builds and carries the redoal network: the gesture math, the relay, the first node, and the portal this page runs on. Run a node, build on it, or have a recording removed, and you say when it is resolved.'
name: A network that answers to you
- description: 'Infrastructure, tools and products for organizations that can say what problem they have. Bring the brief, or first see your own way of working as a working site, before you pay for anything. The brief stays yours: you can withdraw it yourself.'
icon: lucide:layers
name: A considered reply to your brief, and software that fits the argument
name: What UHHM does
- description: Nothing to fill in here. What is already out in the world, and the network as it runs right now.
features:
- description: A few things already out in the world.
icon: lucide:hammer
name: For a business or an organization with a job for us
name: You run an organization that needs software built
- action: /join
name: What we have built
resource:
jq: |
.[] | {name: .name, description: .description, url: (if .website != null and .website != "" then .website elif .private then null else .html_url end)}
public: true
source:
kind: gitea_starred
username: bl
- description: Straight from the relay, the first node of the network.
icon: lucide:activity
name: The redoal network, live
resource:
empty: The first voice has not echoed yet.
jq: |
{ "name": (.voices_echoed | tostring),
"description": "voices echoed so far" }
public: true
source:
kind: url
url: https://relay.redoal.com/pulse
name: Have a look around first
- action: /received/commission
consequence:
- Start here
description: A developer, designer or student who wants in; someone who wants a note now and then; or a reader who would reword a page on uhhm.no.
- Send the brief
description: You know the problem and want it solved, whether it is infrastructure, a tool, or the first version of a product. Write it up for people who read the whole thing.
encouragements:
- Someone here reads every brief in full before writing back.
features:
- description: ''
- description: We read your brief and either take it on or tell you honestly if it's not a fit.
icon: lucide:route
name: What happens next
- description: One of the owners reads it; write to bl@uhhm.no if you'd rather reach us directly.
icon: lucide:user-check
name: Who reads this
- description: The more of the problem you put in, the better the reply.
icon: lucide:briefcase
name: Tell us the problem
requirements:
- label: Your name
name: name
placeholder: Sara Nilsen
type: text
- label: Your email
name: email
placeholder: sara@company.com
type: email
- label: The problem you want solved
name: project
placeholder: Our drivers log hours on paper and it takes a day to get them into payroll.
type: textarea
- label: Your organization
name: organization
placeholder: Nilsen Transport AS
type: text
- label: Who we should talk to
name: org_contact
optional: true
placeholder: Sara Nilsen, ops manager
type: text
name: 'Have us build it: send the brief'
record_as: projects
- action: /received/trial
consequence:
- Start the draft
description: Describe how requests, approvals and handovers move through your business today. We approve it by hand and build a working draft of a site for your own roles, for you to click through.
encouragements:
- A person looks at what you send before anything gets built.
features:
- description: We look at what you sent and, if it's a fit, build a draft from your own roles and words for you to see before anything moves further.
icon: lucide:route
name: What happens next
- description: An owner looks at what you send; write to bl@uhhm.no if you'd rather reach us directly.
icon: lucide:user-check
name: Who reads this
- description: Answer in your own words - there's no wrong way to describe your business.
icon: lucide:layers
name: Describe your business
requirements:
- label: Your business
name: business
placeholder: Nilsen Transport AS
type: text
- label: Your email
name: email
placeholder: sara@company.com
type: email
- label: What you do
name: what_we_do
placeholder: We move freight for local businesses and handle the paperwork for them.
type: textarea
- label: Who comes to you
name: who_comes_to_us
placeholder: Local businesses that need something moved on short notice.
type: textarea
- label: What you keep track of
name: what_we_keep_track_of
placeholder: Bookings, driver hours, and which loads are still waiting on a signature.
type: textarea
- label: Who's involved
name: who_is_involved
placeholder: Drivers, dispatchers, and the customers waiting on their delivery.
type: textarea
- label: What slows you down
name: what_slows_us_down
optional: true
placeholder: Approvals sit in someone's inbox for days before anyone acts on them.
type: textarea
name: See your own business as a site, before you buy anything
record_as: trials
- action: /received/collaborate
consequence:
- Get in touch
description: 'A developer, a designer, a student: say what you would want to build with us, and we read it as a person and invite you in if there is a fit.'
encouragements:
- A person reads this, not a form filter — worth the ten minutes.
features:
- description: We read what you send and get back to you. If there's a fit, we invite you in and you start working with us — and if things ever change, that's fine too.
icon: lucide:route
name: What happens next
- description: One of the owners reads this directly — for anything urgent, write to bl@uhhm.no.
icon: lucide:user-check
name: Who reads this
- description: Tell us who you are and what kind of work you're after.
icon: lucide:handshake
name: For a person, on their own behalf
name: You want to join us, follow us, or fix a page on this site
name: Say hello
requirements:
- label: Name
name: name
placeholder: Your name
type: text
- label: Email
name: email
placeholder: you@example.com
type: email
- label: What kind of work
name: interest
placeholder: Backend work, or something design-heavy
type: textarea
- label: Tell us more
name: note
optional: true
placeholder: A bit about what you'd want to work on, or a link to your work
type: textarea
name: Work with us
record_as: applicants
- action: /received/subscribe
consequence:
- Sign up
description: You'd rather hear from us now and then than check back on your own.
encouragements:
- One click unsubscribes you later, no questions asked.
features:
- description: You're on the list. We write when there's something worth saying, and you can leave the list whenever you like.
icon: lucide:bell
name: What happens next
- description: An owner sends these notes directly — write to bl@uhhm.no if you'd rather ask something first.
icon: lucide:user-check
name: Who reads this
- description: Just your email, or your name too if you'd like.
icon: lucide:mail
name: Stay in the loop
requirements:
- label: Name
name: name
placeholder: Your name
type: text
- label: Email
name: email
placeholder: you@example.com
type: email
name: Hear from us now and then
record_as: subscribers
- action: /received/propose
consequence:
- Send change
description: You have spotted a page on uhhm.no that should read differently, and you know roughly how.
encouragements:
- Even a rough version helps — we can tidy the wording ourselves.
features:
- description: Someone here reads your proposal and either makes the change or explains why not. Either way, you'll hear back.
icon: lucide:route
name: What happens next
- description: An owner reads every proposal before anything changes — reach us at bl@uhhm.no if it's time-sensitive.
icon: lucide:user-check
name: Who reads this
- description: Point us to the page and show us the change.
icon: lucide:pencil
name: Propose a change
requirements:
- label: Your name
name: submitted_by
placeholder: Your name
type: text
- label: Email
name: email
optional: true
placeholder: you@example.com
type: email
- label: Which page
name: page
optional: true
placeholder: questions/join/index.yaml
type: text
- label: Why this is better
name: rationale
placeholder: The current heading doesn't say what you actually get
type: textarea
- label: Your proposed text
name: proposed_yaml
placeholder: 'heading: "A clearer way to say this"'
type: textarea
name: Suggest a change to this website
record_as: development_proposals
- action: /received/custody
consequence:
- Send to a custodian
@@ -57,7 +264,7 @@ alternatives:
name: 'You are on the redoal network: a node, an app, or a recording that concerns you'
record_as: custody_requests
description: UHHM builds software for organisations that can say what problem they have, and keeps the redoal network underneath.
name: Who are you, and what do you need from UHHM?
name: What is UHHM, and what can you get here?
responsible:
contact: bl@uhhm.no
name: Bendik Aagaard Lynghaug
-110
View File
@@ -1,110 +0,0 @@
alternatives:
- action: /received/collaborate
consequence:
- Get in touch
description: 'A developer, a designer, a student: say what you would want to build with us, and we read it as a person and invite you in if there is a fit.'
encouragements:
- A person reads this, not a form filter — worth the ten minutes.
features:
- description: We read what you send and get back to you. If there's a fit, we invite you in and you start working with us — and if things ever change, that's fine too.
icon: lucide:route
name: What happens next
- description: One of the owners reads this directly — for anything urgent, write to bl@uhhm.no.
icon: lucide:user-check
name: Who reads this
- description: Tell us who you are and what kind of work you're after.
icon: lucide:handshake
name: Say hello
requirements:
- label: Name
name: name
placeholder: Your name
type: text
- label: Email
name: email
placeholder: you@example.com
type: email
- label: What kind of work
name: interest
placeholder: Backend work, or something design-heavy
type: textarea
- label: Tell us more
name: note
optional: true
placeholder: A bit about what you'd want to work on, or a link to your work
type: textarea
name: Work with us
record_as: applicants
- action: /received/subscribe
consequence:
- Sign up
description: You'd rather hear from us now and then than check back on your own.
encouragements:
- One click unsubscribes you later, no questions asked.
features:
- description: You're on the list. We write when there's something worth saying, and you can leave the list whenever you like.
icon: lucide:bell
name: What happens next
- description: An owner sends these notes directly — write to bl@uhhm.no if you'd rather ask something first.
icon: lucide:user-check
name: Who reads this
- description: Just your email, or your name too if you'd like.
icon: lucide:mail
name: Stay in the loop
requirements:
- label: Name
name: name
placeholder: Your name
type: text
- label: Email
name: email
placeholder: you@example.com
type: email
name: Hear from us now and then
record_as: subscribers
- action: /received/propose
consequence:
- Send change
description: You have spotted a page on uhhm.no that should read differently, and you know roughly how.
encouragements:
- Even a rough version helps — we can tidy the wording ourselves.
features:
- description: Someone here reads your proposal and either makes the change or explains why not. Either way, you'll hear back.
icon: lucide:route
name: What happens next
- description: An owner reads every proposal before anything changes — reach us at bl@uhhm.no if it's time-sensitive.
icon: lucide:user-check
name: Who reads this
- description: Point us to the page and show us the change.
icon: lucide:pencil
name: Propose a change
requirements:
- label: Your name
name: submitted_by
placeholder: Your name
type: text
- label: Email
name: email
optional: true
placeholder: you@example.com
type: email
- label: Which page
name: page
optional: true
placeholder: questions/join/index.yaml
type: text
- label: Why this is better
name: rationale
placeholder: The current heading doesn't say what you actually get
type: textarea
- label: Your proposed text
name: proposed_yaml
placeholder: 'heading: "A clearer way to say this"'
type: textarea
name: Suggest a change to this website
record_as: development_proposals
description: 'Three ways to be part of what UHHM builds: work with us, hear from us, or fix something on this site.'
name: How do you want to be part of this?
responsible:
contact: bl@uhhm.no
name: Bendik Aagaard Lynghaug