build: a model may not lose the submitter's link; uhhm round 7, the mails

Sonnet wrote the ten uhhm mails and replaced the decide link with a
bare {chain}. keep_links puts the fallback's link line back into any
mail that lost it. The mails read easier than the fallbacks (LIX 9 to
33 against 18 to 28) and say something.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
Bendik Aagaard Lynghaug
2026-09-23 23:02:48 +02:00
co-authored by Claude Fable 5.1
parent b5f5c46ff2
commit 72a081ed59
21 changed files with 939 additions and 1468 deletions
+20
View File
@@ -101,3 +101,23 @@ from portal@uhhm.no. The subjects and bodies are the builder's
fallbacks (what happened, and the link to the submitter's own move
where they have one); a model has not reworded them yet. This is what
the `trainer-rebuild` branch carries.
## Round 7: the mails, worded by a model
`build --llm-for aggregates.yaml` lets Sonnet write the ten mails
alone, every other word as in round 5. It dropped the submitter's
link the first time (a bare `{chain}` in its place), so the builder
now puts the link back whenever a model loses it. `rate --repo` rates
each mail's prose on its own:
| Mail | Fallback LIX | Sonnet LIX |
|---|---|---|
| projects:open | 18 | 9 |
| trials:open | 18 | 13 |
| custody_requests:open | 25 | 32 |
| all ten, range | 18 to 28 | 9 to 33 |
Easier on the whole, and specific where the fallback was formulaic:
"Your brief is in front of us. We read the whole thing before we
reply, so it may take a few days." `words-r7.json` is the words as
used; the branch carries them.
@@ -0,0 +1,204 @@
{
"collaborate": {
"pages": [
{
"control": {
"asked": 0,
"next": 0,
"where": 0,
"which": 0
},
"control_ok": true,
"followup_shown": true,
"lix": 25.81998092513114,
"options": 8,
"overloaded": true,
"page": "/",
"personas": 3,
"required_fields": 3,
"understanding": {
"asked": 3,
"next": 3,
"where": 3,
"which": 3
}
}
],
"steps": 1
},
"commission": {
"pages": [
{
"control": {
"asked": 0,
"next": 0,
"where": 0,
"which": 0
},
"control_ok": true,
"followup_shown": true,
"lix": 26.73015873015873,
"options": 8,
"overloaded": true,
"page": "/",
"personas": 3,
"required_fields": 4,
"understanding": {
"asked": 3,
"next": 3,
"where": 3,
"which": 3
}
}
],
"steps": 1
},
"custody": {
"pages": [
{
"control": {
"asked": 0,
"next": 0,
"where": 0,
"which": 0
},
"control_ok": true,
"followup_shown": true,
"lix": 27.915853336850432,
"options": 8,
"overloaded": true,
"page": "/",
"personas": 3,
"required_fields": 4,
"understanding": {
"asked": 3,
"next": 3,
"where": 3,
"which": 3
}
}
],
"steps": 1
},
"mail custody_requests:declined": {
"lix": 28.275,
"words": 31
},
"mail custody_requests:open": {
"lix": 25.15,
"words": 31
},
"mail custody_requests:resolved": {
"lix": 28.275,
"words": 31
},
"mail projects:accepted": {
"lix": 22.666666666666668,
"words": 29
},
"mail projects:declined": {
"lix": 22.666666666666668,
"words": 29
},
"mail projects:open": {
"lix": 18.391941391941394,
"words": 35
},
"mail trials:approved": {
"lix": 20.757894736842104,
"words": 36
},
"mail trials:declined": {
"lix": 20.757894736842104,
"words": 36
},
"mail trials:open": {
"lix": 18.126315789473686,
"words": 36
},
"mail trials:previewed": {
"lix": 20.757894736842104,
"words": 36
},
"propose": {
"pages": [
{
"control": {
"asked": 0,
"next": 0,
"where": 0,
"which": 0
},
"control_ok": true,
"followup_shown": true,
"lix": 27.536719122556033,
"options": 8,
"overloaded": true,
"page": "/",
"personas": 2,
"required_fields": 3,
"understanding": {
"asked": 2,
"next": 2,
"where": 2,
"which": 2
}
}
],
"steps": 1
},
"subscribe": {
"pages": [
{
"control": {
"asked": 0,
"next": 0,
"where": 0,
"which": 0
},
"control_ok": true,
"followup_shown": true,
"lix": 26.73015873015873,
"options": 8,
"overloaded": true,
"page": "/",
"personas": 2,
"required_fields": 2,
"understanding": {
"asked": 2,
"next": 2,
"where": 2,
"which": 1
}
}
],
"steps": 1
},
"trial": {
"pages": [
{
"control": {
"asked": 0,
"next": 0,
"where": 0,
"which": 0
},
"control_ok": true,
"followup_shown": true,
"lix": 27.441049146931498,
"options": 8,
"overloaded": true,
"page": "/",
"personas": 2,
"required_fields": 6,
"understanding": {
"asked": 2,
"next": 2,
"where": 2,
"which": 2
}
}
],
"steps": 1
}
}
+20 -69
View File
@@ -28,37 +28,22 @@ aggregates:
declined:
event: declined
mail:
body: |-
Hello {name},
What you sent about an answer from a custodian, and action where the network keeps something it should not is now declined.
Bendik Aagaard Lynghaug at bl@uhhm.no
subject: 'UHHM: Declined'
body: We've read your message and decided this isn't something we can take on as custodians. If you think we've missed something, write back and tell us.
subject: On your message to the custodians
to: submitter
in_dialogue:
event: in_dialogue
open:
event: received
mail:
body: |-
Hello {name},
We have received what you sent about an answer from a custodian, and action where the network keeps something it should not.
Bendik Aagaard Lynghaug at bl@uhhm.no
subject: 'UHHM: Open'
body: Your message reached the custodians of the first node. We read everything that comes in - expect a real reply, not an autoresponder.
subject: We have your message
to: submitter
resolved:
event: resolved
mail:
body: |-
Hello {name},
What you sent about an answer from a custodian, and action where the network keeps something it should not is now resolved.
Bendik Aagaard Lynghaug at bl@uhhm.no
subject: 'UHHM: Resolved'
body: This is resolved. Here's what we found and what we did about it - write back if it isn't settled from where you sit.
subject: Your case is resolved
to: submitter
transitions:
in_dialogue:
@@ -101,37 +86,23 @@ aggregates:
accepted:
event: accepted
mail:
body: |-
Hello {name},
What you sent about a considered reply to a brief, from people who read the whole thing is now accepted.
Bendik Aagaard Lynghaug at bl@uhhm.no
subject: 'UHHM: Accepted'
body: We want to take this on. Next we'll be in touch to talk through scope, timing and how we'll work together.
subject: We'd like to take this on
to: submitter
declined:
event: declined
mail:
body: |-
Hello {name},
What you sent about a considered reply to a brief, from people who read the whole thing is now declined.
Bendik Aagaard Lynghaug at bl@uhhm.no
subject: 'UHHM: Declined'
body: We've read your brief and this isn't one we're taking on. It isn't a judgment on the problem - just not a fit for us right now.
subject: On your brief
to: submitter
open:
event: submitted
mail:
body: |-
Hello {name},
We have received what you sent about a considered reply to a brief, from people who read the whole thing.
Your brief is in front of us. We read the whole thing before we reply, so it may take a few days - you'll hear from us either way.
What you can do next: {site}/decide/commission?chain={chain}&email={email}
Bendik Aagaard Lynghaug at bl@uhhm.no
subject: 'UHHM: Open'
subject: We have your brief
to: submitter
transitions:
open:
@@ -155,46 +126,26 @@ aggregates:
approved:
event: approved
mail:
body: |-
Hello,
What you sent about a first draft of a site for their own roles, built from their own words and approved by a person first is now approved.
Bendik Aagaard Lynghaug at bl@uhhm.no
subject: 'UHHM: Approved'
body: Your draft is approved and on its way. We built it from your own words - have a look when it's ready and tell us what to change.
subject: Your draft is approved
to: submitter
declined:
event: declined
mail:
body: |-
Hello,
What you sent about a first draft of a site for their own roles, built from their own words and approved by a person first is now declined.
Bendik Aagaard Lynghaug at bl@uhhm.no
subject: 'UHHM: Declined'
body: We've decided not to build this draft. If the situation changes, get back in touch and we'll take another look.
subject: On your draft
to: submitter
open:
event: received
mail:
body: |-
Hello,
We have received what you sent about a first draft of a site for their own roles, built from their own words and approved by a person first.
Bendik Aagaard Lynghaug at bl@uhhm.no
subject: 'UHHM: Open'
body: We have what you sent. A person will read it and build your draft, or tell you why not - you'll hear from us either way.
subject: We're looking at your draft
to: submitter
previewed:
event: previewed
mail:
body: |-
Hello,
What you sent about a first draft of a site for their own roles, built from their own words and approved by a person first is now previewed.
Bendik Aagaard Lynghaug at bl@uhhm.no
subject: 'UHHM: Previewed'
body: Your draft is ready to look at. It's built from your own words - the link below takes you straight to it.
subject: Your draft is ready to view
to: submitter
transitions:
approved:
@@ -0,0 +1,132 @@
You write the words for one page of a website for this business.
Business: UHHM
About: UHHM builds software around a clear argument: infrastructure, tools and products for organizations that can say what problem they have. It also builds and carries the redoal network - the gesture math, the relay, the first node, and the portal this site runs on - and answers for what that network keeps.
Contact: Bendik Aagaard Lynghaug <bl@uhhm.no>
Language to write in: en
Everyone the site serves:
- commission: an organization with a problem it wants software to solve - wants: a considered reply to a brief, from people who read the whole thing. Handled by owners. Stages: open -> accepted -> declined.
- trial: 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. Handled by owners. Stages: open -> approved -> previewed -> declined.
- collaborate: 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. Handled by owners. Stages: open -> invited -> active -> departed -> declined.
- subscribe: someone who wants to hear from us when there is something to say - wants: a note now and then, and an easy way out. Handled by owners. Stages: open -> unsubscribed.
- propose: a visitor who sees how a page on this site should change - wants: the change read by a person and, if approved, made. Handled by owners. Stages: open -> approved -> rejected.
- custody: someone who runs, builds on, or is affected by the redoal network and needs the people who keep its first node - wants: an answer from a custodian, and action where the network keeps something it should not. Handled by custodians. Stages: open -> in_dialogue -> resolved -> declined.
- prospect: an owner who has met an organization worth following up - wants: it written down and walked through its states from the desk. Handled by owners. Stages: prospect -> client -> past_client.
The page: aggregates.yaml
It is the mails the site sends. Under each bucket, each stage that sends one has a `subject` and a `body`: the mail a person gets the moment their case enters that stage, saying what happened and what, if anything, they can do now. Plain text, short, in the business's voice. Keep every `{...}` placeholder exactly as it is - `{site}`, `{chain}`, `{email}` and any field name are filled in by the site - and keep any line with a link in it.
Below is the page as JSON. Every value is a slot that says what to write there. Return the same JSON with every slot replaced by your words. Keep every key exactly as it is. A slot left as it is counts as no answer.
Rules for the words:
- `question` is a question the reader could ask themselves.
- A heading says what the reader gets, in the reader's own words, and must work without its description.
- Lead with what a thing enables. No negations in headings. No trade jargon the reader would not use.
- Descriptions are one or two short sentences. Labels and buttons are a few words.
- The button says what pressing it does; the encouragement says what happens next or how little it takes; the form's guidance line says what to have ready. Placeholders are example answers in the reader's words.
- An icon is one name from this list, chosen for what the reader is doing, or empty: house, building-2, store, school, map-pin, route, footprints, trees, leaf, snowflake, sun, users, user, user-plus, user-check, baby, heart-handshake, hand-helping, handshake, smile, mail, phone, message-circle, megaphone, bell, send, inbox, alert-triangle, siren, shield, construction, hammer, wrench, ruler, package, truck, car, bus, train-front, bike, calendar, clock, file-text, clipboard-list, receipt, wallet, coins, banknote, credit-card, key, lock, search, star, gift, shopping-cart, lightbulb, flag, thumbs-up, check-circle, briefcase, stethoscope, activity, camera, pencil, refresh-cw, list, layers, vote, scale
- Write the way people in this trade and country actually speak.
{
"custody_requests": {
"declined": {
"body": "<WRITE: a form label for the field `body`>",
"subject": "<WRITE: a form label for the field `subject`>"
},
"open": {
"body": "<WRITE: a form label for the field `body`>",
"subject": "<WRITE: a form label for the field `subject`>"
},
"resolved": {
"body": "<WRITE: a form label for the field `body`>",
"subject": "<WRITE: a form label for the field `subject`>"
}
},
"projects": {
"accepted": {
"body": "<WRITE: a form label for the field `body`>",
"subject": "<WRITE: a form label for the field `subject`>"
},
"declined": {
"body": "<WRITE: a form label for the field `body`>",
"subject": "<WRITE: a form label for the field `subject`>"
},
"open": {
"body": "<WRITE: a form label for the field `body`>",
"subject": "<WRITE: a form label for the field `subject`>"
}
},
"trials": {
"approved": {
"body": "<WRITE: a form label for the field `body`>",
"subject": "<WRITE: a form label for the field `subject`>"
},
"declined": {
"body": "<WRITE: a form label for the field `body`>",
"subject": "<WRITE: a form label for the field `subject`>"
},
"open": {
"body": "<WRITE: a form label for the field `body`>",
"subject": "<WRITE: a form label for the field `subject`>"
},
"previewed": {
"body": "<WRITE: a form label for the field `body`>",
"subject": "<WRITE: a form label for the field `subject`>"
}
}
}
Reply with the JSON object only.
=== REPLY ===
```json
{
"custody_requests": {
"declined": {
"body": "We've read your message and decided this isn't something we can take on as custodians. If you think we've missed something, write back and tell us.",
"subject": "On your message to the custodians"
},
"open": {
"body": "Your message reached the custodians of the first node. We read everything that comes in - expect a real reply, not an autoresponder.",
"subject": "We have your message"
},
"resolved": {
"body": "This is resolved. Here's what we found and what we did about it - write back if it isn't settled from where you sit.",
"subject": "Your case is resolved"
}
},
"projects": {
"accepted": {
"body": "We want to take this on. Next we'll be in touch to talk through scope, timing and how we'll work together.",
"subject": "We'd like to take this on"
},
"declined": {
"body": "We've read your brief and this isn't one we're taking on. It isn't a judgment on the problem - just not a fit for us right now.",
"subject": "On your brief"
},
"open": {
"body": "Your brief is in front of us. We read the whole thing before we reply, so it may take a few days - you'll hear from us either way.",
"subject": "We have your brief"
}
},
"trials": {
"approved": {
"body": "Your draft is approved and on its way. We built it from your own words - have a look when it's ready and tell us what to change.",
"subject": "Your draft is approved"
},
"declined": {
"body": "We've decided not to build this draft. If the situation changes, get back in touch and we'll take another look.",
"subject": "On your draft"
},
"open": {
"body": "We have what you sent. A person will read it and build your draft, or tell you why not - you'll hear from us either way.",
"subject": "We're looking at your draft"
},
"previewed": {
"body": "Your draft is ready to look at. It's built from your own words - the link below takes you straight to it.",
"subject": "Your draft is ready to view"
}
}
}
```
@@ -1,174 +0,0 @@
You write the words for one page of a website for this business.
Business: UHHM
About: UHHM builds software around a clear argument: infrastructure, tools and products for organizations that can say what problem they have. It also builds and carries the redoal network - the gesture math, the relay, the first node, and the portal this site runs on - and answers for what that network keeps.
Contact: Bendik Aagaard Lynghaug <bl@uhhm.no>
Language to write in: en
Everyone the site serves:
- door build: for 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; behind it: commission, trial
- door join: for someone who wants to build with us, hear from us now and then, or change this site; behind it: collaborate, subscribe, propose
- commission: an organization with a problem it wants software to solve - wants: a considered reply to a brief, from people who read the whole thing. Handled by owners. Stages: open -> accepted -> declined.
- trial: 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. Handled by owners. Stages: open -> approved -> previewed -> declined.
- collaborate: 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. Handled by owners. Stages: open -> invited -> active -> departed -> declined.
- subscribe: someone who wants to hear from us when there is something to say - wants: a note now and then, and an easy way out. Handled by owners. Stages: open -> unsubscribed.
- propose: a visitor who sees how a page on this site should change - wants: the change read by a person and, if approved, made. Handled by owners. Stages: open -> approved -> rejected.
- custody: someone who runs, builds on, or is affected by the redoal network and needs the people who keep its first node - wants: an answer from a custodian, and action where the network keeps something it should not. Handled by custodians. Stages: open -> in_dialogue -> resolved -> declined.
- prospect: an owner who has met an organization worth following up - wants: it written down and walked through its states from the desk. Handled by owners. Stages: prospect -> client -> past_client.
The page: questions/build/index.yaml
It is a page one kind of visitor reaches from the front door. `question` is what this page asks them; under `needs`, each entry is one alternative they can pick, with the form behind it.
Below is the page as JSON. Every value is a slot that says what to write there. Return the same JSON with every slot replaced by your words. Keep every key exactly as it is. A slot left as it is counts as no answer.
Rules for the words:
- `question` is a question the reader could ask themselves.
- A heading says what the reader gets, in the reader's own words, and must work without its description.
- Lead with what a thing enables. No negations in headings. No trade jargon the reader would not use.
- Descriptions are one or two short sentences. Labels and buttons are a few words.
- The button says what pressing it does; the encouragement says what happens next or how little it takes; the form's guidance line says what to have ready. Placeholders are example answers in the reader's words.
- An icon is one name from this list, chosen for what the reader is doing, or empty: house, building-2, store, school, map-pin, route, footprints, trees, leaf, snowflake, sun, users, user, user-plus, user-check, baby, heart-handshake, hand-helping, handshake, smile, mail, phone, message-circle, megaphone, bell, send, inbox, alert-triangle, siren, shield, construction, hammer, wrench, ruler, package, truck, car, bus, train-front, bike, calendar, clock, file-text, clipboard-list, receipt, wallet, coins, banknote, credit-card, key, lock, search, star, gift, shopping-cart, lightbulb, flag, thumbs-up, check-circle, briefcase, stethoscope, activity, camera, pencil, refresh-cw, list, layers, vote, scale
- Write the way people in this trade and country actually speak.
{
"description": "<WRITE: one or two short sentences>",
"needs": {
"commission": {
"button": "<WRITE: a button, one to three words, saying what pressing it does>",
"description": "<WRITE: one or two short sentences>",
"encouragement": "<WRITE: one reassuring sentence: what happens with what they send, or how little it takes; or empty>",
"form_description": "<WRITE: one short line of guidance above the form, or empty>",
"form_title": "<WRITE: a title for the form, two to four words>",
"heading": "<WRITE: a heading, at most eight words, saying what the reader gets>",
"hints": {
"email": "<WRITE: an example answer for the field `email`, as a placeholder; or empty>",
"name": "<WRITE: an example answer for the field `name`, as a placeholder; or empty>",
"org_contact": "<WRITE: an example answer for the field `org_contact`, as a placeholder; or empty>",
"organization": "<WRITE: an example answer for the field `organization`, as a placeholder; or empty>",
"project": "<WRITE: an example answer for the field `project`, as a placeholder; or empty>"
},
"icon": "<WRITE: an icon name from the list at the end, the one that fits this best; or empty>",
"labels": {
"email": "<WRITE: a form label for the field `email`>",
"name": "<WRITE: a form label for the field `name`>",
"org_contact": "<WRITE: a form label for the field `org_contact`>",
"organization": "<WRITE: a form label for the field `organization`>",
"project": "<WRITE: a form label for the field `project`>"
},
"road_description": "<WRITE: one or two sentences walking the reader through the stages this goes through, in order (the stages are listed above), in their words>",
"road_icon": "<WRITE: an icon name from the list at the end that fits this section; or empty>",
"road_title": "<WRITE: a short title, two to four words, for the line that says what happens after sending>",
"who_description": "<WRITE: one sentence: who reads what they send, and how to reach them meanwhile>",
"who_icon": "<WRITE: an icon name from the list at the end that fits this section; or empty>",
"who_title": "<WRITE: a short title, two to four words, for the line that says who reads it>"
},
"trial": {
"button": "<WRITE: a button, one to three words, saying what pressing it does>",
"description": "<WRITE: one or two short sentences>",
"encouragement": "<WRITE: one reassuring sentence: what happens with what they send, or how little it takes; or empty>",
"form_description": "<WRITE: one short line of guidance above the form, or empty>",
"form_title": "<WRITE: a title for the form, two to four words>",
"heading": "<WRITE: a heading, at most eight words, saying what the reader gets>",
"hints": {
"business": "<WRITE: an example answer for the field `business`, as a placeholder; or empty>",
"email": "<WRITE: an example answer for the field `email`, as a placeholder; or empty>",
"what_slows_us_down": "<WRITE: an example answer for the field `what_slows_us_down`, as a placeholder; or empty>",
"what_we_do": "<WRITE: an example answer for the field `what_we_do`, as a placeholder; or empty>",
"what_we_keep_track_of": "<WRITE: an example answer for the field `what_we_keep_track_of`, as a placeholder; or empty>",
"who_comes_to_us": "<WRITE: an example answer for the field `who_comes_to_us`, as a placeholder; or empty>",
"who_is_involved": "<WRITE: an example answer for the field `who_is_involved`, as a placeholder; or empty>"
},
"icon": "<WRITE: an icon name from the list at the end, the one that fits this best; or empty>",
"labels": {
"business": "<WRITE: a form label for the field `business`>",
"email": "<WRITE: a form label for the field `email`>",
"what_slows_us_down": "<WRITE: a form label for the field `what_slows_us_down`>",
"what_we_do": "<WRITE: a form label for the field `what_we_do`>",
"what_we_keep_track_of": "<WRITE: a form label for the field `what_we_keep_track_of`>",
"who_comes_to_us": "<WRITE: a form label for the field `who_comes_to_us`>",
"who_is_involved": "<WRITE: a form label for the field `who_is_involved`>"
},
"road_description": "<WRITE: one or two sentences walking the reader through the stages this goes through, in order (the stages are listed above), in their words>",
"road_icon": "<WRITE: an icon name from the list at the end that fits this section; or empty>",
"road_title": "<WRITE: a short title, two to four words, for the line that says what happens after sending>",
"who_description": "<WRITE: one sentence: who reads what they send, and how to reach them meanwhile>",
"who_icon": "<WRITE: an icon name from the list at the end that fits this section; or empty>",
"who_title": "<WRITE: a short title, two to four words, for the line that says who reads it>"
}
},
"question": "<WRITE: the one question this page asks its reader>"
}
Reply with the JSON object only.
=== REPLY ===
```json
{
"description": "Have a problem software should solve, or want to see your own way of working as a site before you pay anyone?",
"needs": {
"commission": {
"button": "Send the brief",
"description": "You know the problem and want it solved. Write it up and send it to people who will read the whole thing.",
"encouragement": "Someone here reads every brief in full before writing back.",
"form_description": "The more of the problem you put in, the better the reply.",
"form_title": "Tell us the problem",
"heading": "A considered reply to your brief",
"hints": {
"email": "sara@company.com",
"name": "Sara Nilsen",
"org_contact": "Sara Nilsen, ops manager",
"organization": "Nilsen Transport AS",
"project": "Our drivers log hours on paper and it takes a day to get them into payroll."
},
"icon": "briefcase",
"labels": {
"email": "Your email",
"name": "Your name",
"org_contact": "Who we should talk to",
"organization": "Your organization",
"project": "The problem you want solved"
},
"road_description": "We read your brief and either take it on or tell you honestly if it's not a fit.",
"road_icon": "route",
"road_title": "What happens next",
"who_description": "One of the owners reads it; write to bl@uhhm.no if you'd rather reach us directly.",
"who_icon": "user-check",
"who_title": "Who reads this"
},
"trial": {
"button": "Start the draft",
"description": "See your own requests, approvals and handovers as a working site, before you commit to anything.",
"encouragement": "A person looks at what you send before anything gets built.",
"form_description": "Answer in your own words - there's no wrong way to describe your business.",
"form_title": "Describe your business",
"heading": "A first draft of your own site",
"hints": {
"business": "Nilsen Transport AS",
"email": "sara@company.com",
"what_slows_us_down": "Approvals sit in someone's inbox for days before anyone acts on them.",
"what_we_do": "We move freight for local businesses and handle the paperwork for them.",
"what_we_keep_track_of": "Bookings, driver hours, and which loads are still waiting on a signature.",
"who_comes_to_us": "Local businesses that need something moved on short notice.",
"who_is_involved": "Drivers, dispatchers, and the customers waiting on their delivery."
},
"icon": "layers",
"labels": {
"business": "Your business",
"email": "Your email",
"what_slows_us_down": "What slows you down",
"what_we_do": "What you do",
"what_we_keep_track_of": "What you keep track of",
"who_comes_to_us": "Who comes to you",
"who_is_involved": "Who's involved"
},
"road_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.",
"road_icon": "route",
"road_title": "What happens next",
"who_description": "An owner looks at what you send; write to bl@uhhm.no if you'd rather reach us directly.",
"who_icon": "user-check",
"who_title": "Who reads this"
}
},
"question": "Do you already know the problem, or do you want to see your own business as a site first?"
}
```
@@ -1,108 +0,0 @@
You write the words for one page of a website for this business.
Business: UHHM
About: UHHM builds software around a clear argument: infrastructure, tools and products for organizations that can say what problem they have. It also builds and carries the redoal network - the gesture math, the relay, the first node, and the portal this site runs on - and answers for what that network keeps.
Contact: Bendik Aagaard Lynghaug <bl@uhhm.no>
Language to write in: en
Everyone the site serves:
- door build: for 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; behind it: commission, trial
- door join: for someone who wants to build with us, hear from us now and then, or change this site; behind it: collaborate, subscribe, propose
- commission: an organization with a problem it wants software to solve - wants: a considered reply to a brief, from people who read the whole thing. Handled by owners. Stages: open -> accepted -> declined.
- trial: 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. Handled by owners. Stages: open -> approved -> previewed -> declined.
- collaborate: 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. Handled by owners. Stages: open -> invited -> active -> departed -> declined.
- subscribe: someone who wants to hear from us when there is something to say - wants: a note now and then, and an easy way out. Handled by owners. Stages: open -> unsubscribed.
- propose: a visitor who sees how a page on this site should change - wants: the change read by a person and, if approved, made. Handled by owners. Stages: open -> approved -> rejected.
- custody: someone who runs, builds on, or is affected by the redoal network and needs the people who keep its first node - wants: an answer from a custodian, and action where the network keeps something it should not. Handled by custodians. Stages: open -> in_dialogue -> resolved -> declined.
- prospect: an owner who has met an organization worth following up - wants: it written down and walked through its states from the desk. Handled by owners. Stages: prospect -> client -> past_client.
The page: questions/custodians/index.yaml
It is a desk: the page one role inside the business works from. Under `buckets`, each entry is a list of cases; `moves` are the buttons that move a case from one stage to the next (key `from->to`), so label each with what the person has just done. Under `links` are pages this role can open. Under `invites`, each entry is a form that invites a person into that group - they get an account and a one-time link - and `invited` is the list of invites sent.
Below is the page as JSON. Every value is a slot that says what to write there. Return the same JSON with every slot replaced by your words. Keep every key exactly as it is. A slot left as it is counts as no answer.
Rules for the words:
- `question` is a question the reader could ask themselves.
- A heading says what the reader gets, in the reader's own words, and must work without its description.
- Lead with what a thing enables. No negations in headings. No trade jargon the reader would not use.
- Descriptions are one or two short sentences. Labels and buttons are a few words.
- The button says what pressing it does; the encouragement says what happens next or how little it takes; the form's guidance line says what to have ready. Placeholders are example answers in the reader's words.
- An icon is one name from this list, chosen for what the reader is doing, or empty: house, building-2, store, school, map-pin, route, footprints, trees, leaf, snowflake, sun, users, user, user-plus, user-check, baby, heart-handshake, hand-helping, handshake, smile, mail, phone, message-circle, megaphone, bell, send, inbox, alert-triangle, siren, shield, construction, hammer, wrench, ruler, package, truck, car, bus, train-front, bike, calendar, clock, file-text, clipboard-list, receipt, wallet, coins, banknote, credit-card, key, lock, search, star, gift, shopping-cart, lightbulb, flag, thumbs-up, check-circle, briefcase, stethoscope, activity, camera, pencil, refresh-cw, list, layers, vote, scale
- Write the way people in this trade and country actually speak.
{
"buckets": {
"custody_requests": {
"description": "<WRITE: one or two short sentences>",
"heading": "<WRITE: a heading, at most eight words, saying what the reader gets>",
"moves": {
"in_dialogue->declined": "<WRITE: a button, two to four words, for a case going in_dialogue->declined>",
"in_dialogue->resolved": "<WRITE: a button, two to four words, for a case going in_dialogue->resolved>",
"open->declined": "<WRITE: a button, two to four words, for a case going open->declined>",
"open->in_dialogue": "<WRITE: a button, two to four words, for a case going open->in_dialogue>"
}
}
},
"confirm": "<WRITE: a button, one to three words, saying what pressing it does>",
"description": "<WRITE: one or two short sentences>",
"invited": {
"description": "<WRITE: one or two short sentences>",
"done": "<WRITE: a form label for the field `done`>",
"heading": "<WRITE: a heading, at most eight words, saying what the reader gets>"
},
"invites": {
"custodians": {
"button": "<WRITE: a button, one to three words, saying what pressing it does>",
"description": "<WRITE: one or two short sentences>",
"form_title": "<WRITE: a title for the form, two to four words>",
"heading": "<WRITE: a heading, at most eight words, saying what the reader gets>",
"labels": {
"email": "<WRITE: a form label for the field `email`>",
"name": "<WRITE: a form label for the field `name`>"
}
}
},
"links": {},
"question": "<WRITE: the one question this page asks its reader>"
}
Reply with the JSON object only.
=== REPLY ===
```json
{
"buckets": {
"custody_requests": {
"description": "Cases from people who use, build on, or answer for something the redoal network touches, and need a custodian's word on it.",
"heading": "Custody cases waiting on you",
"moves": {
"in_dialogue->declined": "Close, no action",
"in_dialogue->resolved": "Mark resolved",
"open->declined": "Decline case",
"open->in_dialogue": "Open dialogue"
}
}
},
"confirm": "Send invite",
"description": "The desk for custodians: open custody cases, and the people invited to answer them.",
"invited": {
"description": "Custodians invited but not yet signed in.",
"done": "Signed in",
"heading": "Invited custodians"
},
"invites": {
"custodians": {
"button": "Invite custodian",
"description": "Give someone an account and a one-time link to join as a custodian.",
"form_title": "Invite a custodian",
"heading": "Bring in another custodian",
"labels": {
"email": "Email",
"name": "Name"
}
}
},
"links": {},
"question": "What does the network owe the people it affects, right now?"
}
```
@@ -1,60 +0,0 @@
You write the words for one page of a website for this business.
Business: UHHM
About: UHHM builds software around a clear argument: infrastructure, tools and products for organizations that can say what problem they have. It also builds and carries the redoal network - the gesture math, the relay, the first node, and the portal this site runs on - and answers for what that network keeps.
Contact: Bendik Aagaard Lynghaug <bl@uhhm.no>
Language to write in: en
Everyone the site serves:
- door build: for 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; behind it: commission, trial
- door join: for someone who wants to build with us, hear from us now and then, or change this site; behind it: collaborate, subscribe, propose
- commission: an organization with a problem it wants software to solve - wants: a considered reply to a brief, from people who read the whole thing. Handled by owners. Stages: open -> accepted -> declined.
- trial: 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. Handled by owners. Stages: open -> approved -> previewed -> declined.
- collaborate: 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. Handled by owners. Stages: open -> invited -> active -> departed -> declined.
- subscribe: someone who wants to hear from us when there is something to say - wants: a note now and then, and an easy way out. Handled by owners. Stages: open -> unsubscribed.
- propose: a visitor who sees how a page on this site should change - wants: the change read by a person and, if approved, made. Handled by owners. Stages: open -> approved -> rejected.
- custody: someone who runs, builds on, or is affected by the redoal network and needs the people who keep its first node - wants: an answer from a custodian, and action where the network keeps something it should not. Handled by custodians. Stages: open -> in_dialogue -> resolved -> declined.
- prospect: an owner who has met an organization worth following up - wants: it written down and walked through its states from the desk. Handled by owners. Stages: prospect -> client -> past_client.
The page: questions/decide/subscribe.yaml
It is a page the person who sent a form reaches later, through a private link, to make a decision that is theirs: under `moves`, each entry is one thing they can decide.
Below is the page as JSON. Every value is a slot that says what to write there. Return the same JSON with every slot replaced by your words. Keep every key exactly as it is. A slot left as it is counts as no answer.
Rules for the words:
- `question` is a question the reader could ask themselves.
- A heading says what the reader gets, in the reader's own words, and must work without its description.
- Lead with what a thing enables. No negations in headings. No trade jargon the reader would not use.
- Descriptions are one or two short sentences. Labels and buttons are a few words.
- The button says what pressing it does; the encouragement says what happens next or how little it takes; the form's guidance line says what to have ready. Placeholders are example answers in the reader's words.
- An icon is one name from this list, chosen for what the reader is doing, or empty: house, building-2, store, school, map-pin, route, footprints, trees, leaf, snowflake, sun, users, user, user-plus, user-check, baby, heart-handshake, hand-helping, handshake, smile, mail, phone, message-circle, megaphone, bell, send, inbox, alert-triangle, siren, shield, construction, hammer, wrench, ruler, package, truck, car, bus, train-front, bike, calendar, clock, file-text, clipboard-list, receipt, wallet, coins, banknote, credit-card, key, lock, search, star, gift, shopping-cart, lightbulb, flag, thumbs-up, check-circle, briefcase, stethoscope, activity, camera, pencil, refresh-cw, list, layers, vote, scale
- Write the way people in this trade and country actually speak.
{
"description": "<WRITE: one or two short sentences>",
"moves": {
"unsubscribed": {
"button": "<WRITE: a button, one to three words, saying what pressing it does>",
"description": "<WRITE: one or two short sentences>",
"heading": "<WRITE: a heading, at most eight words, saying what the reader gets>"
}
},
"question": "<WRITE: the one question this page asks its reader>"
}
Reply with the JSON object only.
=== REPLY ===
```json
{
"description": "You're on our list. Change your mind whenever you like.",
"moves": {
"unsubscribed": {
"button": "Unsubscribe",
"description": "You'll stop hearing from us. Nothing else changes.",
"heading": "Stop getting notes from us"
}
},
"question": "Do you want to keep hearing from us?"
}
```
@@ -1,136 +0,0 @@
You write the words for one page of a website for this business.
Business: UHHM
About: UHHM builds software around a clear argument: infrastructure, tools and products for organizations that can say what problem they have. It also builds and carries the redoal network - the gesture math, the relay, the first node, and the portal this site runs on - and answers for what that network keeps.
Contact: Bendik Aagaard Lynghaug <bl@uhhm.no>
Language to write in: en
Everyone the site serves:
- door build: for 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; behind it: commission, trial
- door join: for someone who wants to build with us, hear from us now and then, or change this site; behind it: collaborate, subscribe, propose
- commission: an organization with a problem it wants software to solve - wants: a considered reply to a brief, from people who read the whole thing. Handled by owners. Stages: open -> accepted -> declined.
- trial: 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. Handled by owners. Stages: open -> approved -> previewed -> declined.
- collaborate: 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. Handled by owners. Stages: open -> invited -> active -> departed -> declined.
- subscribe: someone who wants to hear from us when there is something to say - wants: a note now and then, and an easy way out. Handled by owners. Stages: open -> unsubscribed.
- propose: a visitor who sees how a page on this site should change - wants: the change read by a person and, if approved, made. Handled by owners. Stages: open -> approved -> rejected.
- custody: someone who runs, builds on, or is affected by the redoal network and needs the people who keep its first node - wants: an answer from a custodian, and action where the network keeps something it should not. Handled by custodians. Stages: open -> in_dialogue -> resolved -> declined.
- prospect: an owner who has met an organization worth following up - wants: it written down and walked through its states from the desk. Handled by owners. Stages: prospect -> client -> past_client.
The page: questions/index.yaml
It is the front door: the first page any visitor sees. `question` is the page's one question. Under `doors`, each entry is one alternative that leads to a page of its own for one kind of visitor: its heading must let that visitor recognise themselves from the heading alone. Under `needs`, each entry is one alternative with a form behind it.
Below is the page as JSON. Every value is a slot that says what to write there. Return the same JSON with every slot replaced by your words. Keep every key exactly as it is. A slot left as it is counts as no answer.
Rules for the words:
- `question` is a question the reader could ask themselves.
- A heading says what the reader gets, in the reader's own words, and must work without its description.
- Lead with what a thing enables. No negations in headings. No trade jargon the reader would not use.
- Descriptions are one or two short sentences. Labels and buttons are a few words.
- The button says what pressing it does; the encouragement says what happens next or how little it takes; the form's guidance line says what to have ready. Placeholders are example answers in the reader's words.
- An icon is one name from this list, chosen for what the reader is doing, or empty: house, building-2, store, school, map-pin, route, footprints, trees, leaf, snowflake, sun, users, user, user-plus, user-check, baby, heart-handshake, hand-helping, handshake, smile, mail, phone, message-circle, megaphone, bell, send, inbox, alert-triangle, siren, shield, construction, hammer, wrench, ruler, package, truck, car, bus, train-front, bike, calendar, clock, file-text, clipboard-list, receipt, wallet, coins, banknote, credit-card, key, lock, search, star, gift, shopping-cart, lightbulb, flag, thumbs-up, check-circle, briefcase, stethoscope, activity, camera, pencil, refresh-cw, list, layers, vote, scale
- Write the way people in this trade and country actually speak.
{
"description": "<WRITE: one or two short sentences>",
"doors": {
"build": {
"button": "<WRITE: a button, one to three words, saying what pressing it does>",
"description": "<WRITE: one or two short sentences>",
"for_whom": "<WRITE: a few words naming who this is for, addressed to them; or empty>",
"heading": "<WRITE: a heading, at most eight words, saying what the reader gets>",
"icon": "<WRITE: an icon name from the list at the end, the one that fits this best; or empty>"
},
"join": {
"button": "<WRITE: a button, one to three words, saying what pressing it does>",
"description": "<WRITE: one or two short sentences>",
"for_whom": "<WRITE: a few words naming who this is for, addressed to them; or empty>",
"heading": "<WRITE: a heading, at most eight words, saying what the reader gets>",
"icon": "<WRITE: an icon name from the list at the end, the one that fits this best; or empty>"
}
},
"needs": {
"custody": {
"button": "<WRITE: a button, one to three words, saying what pressing it does>",
"description": "<WRITE: one or two short sentences>",
"encouragement": "<WRITE: one reassuring sentence: what happens with what they send, or how little it takes; or empty>",
"form_description": "<WRITE: one short line of guidance above the form, or empty>",
"form_title": "<WRITE: a title for the form, two to four words>",
"heading": "<WRITE: a heading, at most eight words, saying what the reader gets>",
"hints": {
"about": "<WRITE: an example answer for the field `about`, as a placeholder; or empty>",
"email": "<WRITE: an example answer for the field `email`, as a placeholder; or empty>",
"name": "<WRITE: an example answer for the field `name`, as a placeholder; or empty>",
"what": "<WRITE: an example answer for the field `what`, as a placeholder; or empty>"
},
"icon": "<WRITE: an icon name from the list at the end, the one that fits this best; or empty>",
"labels": {
"about": "<WRITE: a form label for the field `about`>",
"email": "<WRITE: a form label for the field `email`>",
"name": "<WRITE: a form label for the field `name`>",
"what": "<WRITE: a form label for the field `what`>"
},
"road_description": "<WRITE: one or two sentences walking the reader through the stages this goes through, in order (the stages are listed above), in their words>",
"road_icon": "<WRITE: an icon name from the list at the end that fits this section; or empty>",
"road_title": "<WRITE: a short title, two to four words, for the line that says what happens after sending>",
"who_description": "<WRITE: one sentence: who reads what they send, and how to reach them meanwhile>",
"who_icon": "<WRITE: an icon name from the list at the end that fits this section; or empty>",
"who_title": "<WRITE: a short title, two to four words, for the line that says who reads it>"
}
},
"question": "<WRITE: the one question this page asks its reader>"
}
Reply with the JSON object only.
=== REPLY ===
```json
{
"description": "UHHM builds software for organisations that can say what problem they have, and keeps the redoal network underneath.",
"doors": {
"build": {
"button": "Start here",
"description": "Send us the problem, or try your own workflow as a working site before you pay for anything.",
"for_whom": "For an organisation with a problem, or a business sizing us up",
"heading": "Get software built around your problem",
"icon": "hammer"
},
"join": {
"button": "Start here",
"description": "Build with us, hear from us now and then, or tell us what should change on this page.",
"for_whom": "For anyone who wants in, on their own terms",
"heading": "Work with us, or just stay in touch",
"icon": "handshake"
}
},
"needs": {
"custody": {
"button": "Send to a custodian",
"description": "For anyone who runs on, builds on, or is affected by the redoal network and needs to reach the people who keep its first node.",
"encouragement": "A custodian reads every message that comes in here.",
"form_description": "Tell us what the network is doing, or not doing, and how we can reach you.",
"form_title": "Reach a custodian",
"heading": "Get an answer from the people who keep the network",
"hints": {
"about": "We run our order system on a relay node and it's been dropping messages since Tuesday",
"email": "you@yourcompany.com",
"name": "Your name",
"what": "A relay node is misbehaving"
},
"icon": "shield",
"labels": {
"about": "What's going on",
"email": "Email",
"name": "Name",
"what": "In short"
},
"road_description": "We open it and start a dialogue with you. Once we understand what the network is keeping that it shouldn't, we work it through to resolved, or tell you plainly if we can't.",
"road_icon": "route",
"road_title": "What happens next",
"who_title": "Who reads this",
"who_icon": "user-check",
"who_description": "A custodian reads it directly; if it's urgent, write to bl@uhhm.no in the meantime."
}
},
"question": "What brings you here?"
}
```
@@ -1,208 +0,0 @@
You write the words for one page of a website for this business.
Business: UHHM
About: UHHM builds software around a clear argument: infrastructure, tools and products for organizations that can say what problem they have. It also builds and carries the redoal network - the gesture math, the relay, the first node, and the portal this site runs on - and answers for what that network keeps.
Contact: Bendik Aagaard Lynghaug <bl@uhhm.no>
Language to write in: en
Everyone the site serves:
- door build: for 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; behind it: commission, trial
- door join: for someone who wants to build with us, hear from us now and then, or change this site; behind it: collaborate, subscribe, propose
- commission: an organization with a problem it wants software to solve - wants: a considered reply to a brief, from people who read the whole thing. Handled by owners. Stages: open -> accepted -> declined.
- trial: 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. Handled by owners. Stages: open -> approved -> previewed -> declined.
- collaborate: 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. Handled by owners. Stages: open -> invited -> active -> departed -> declined.
- subscribe: someone who wants to hear from us when there is something to say - wants: a note now and then, and an easy way out. Handled by owners. Stages: open -> unsubscribed.
- propose: a visitor who sees how a page on this site should change - wants: the change read by a person and, if approved, made. Handled by owners. Stages: open -> approved -> rejected.
- custody: someone who runs, builds on, or is affected by the redoal network and needs the people who keep its first node - wants: an answer from a custodian, and action where the network keeps something it should not. Handled by custodians. Stages: open -> in_dialogue -> resolved -> declined.
- prospect: an owner who has met an organization worth following up - wants: it written down and walked through its states from the desk. Handled by owners. Stages: prospect -> client -> past_client.
The page: questions/join/index.yaml
It is a page one kind of visitor reaches from the front door. `question` is what this page asks them; under `needs`, each entry is one alternative they can pick, with the form behind it.
Below is the page as JSON. Every value is a slot that says what to write there. Return the same JSON with every slot replaced by your words. Keep every key exactly as it is. A slot left as it is counts as no answer.
Rules for the words:
- `question` is a question the reader could ask themselves.
- A heading says what the reader gets, in the reader's own words, and must work without its description.
- Lead with what a thing enables. No negations in headings. No trade jargon the reader would not use.
- Descriptions are one or two short sentences. Labels and buttons are a few words.
- The button says what pressing it does; the encouragement says what happens next or how little it takes; the form's guidance line says what to have ready. Placeholders are example answers in the reader's words.
- An icon is one name from this list, chosen for what the reader is doing, or empty: house, building-2, store, school, map-pin, route, footprints, trees, leaf, snowflake, sun, users, user, user-plus, user-check, baby, heart-handshake, hand-helping, handshake, smile, mail, phone, message-circle, megaphone, bell, send, inbox, alert-triangle, siren, shield, construction, hammer, wrench, ruler, package, truck, car, bus, train-front, bike, calendar, clock, file-text, clipboard-list, receipt, wallet, coins, banknote, credit-card, key, lock, search, star, gift, shopping-cart, lightbulb, flag, thumbs-up, check-circle, briefcase, stethoscope, activity, camera, pencil, refresh-cw, list, layers, vote, scale
- Write the way people in this trade and country actually speak.
{
"description": "<WRITE: one or two short sentences>",
"needs": {
"collaborate": {
"button": "<WRITE: a button, one to three words, saying what pressing it does>",
"description": "<WRITE: one or two short sentences>",
"encouragement": "<WRITE: one reassuring sentence: what happens with what they send, or how little it takes; or empty>",
"form_description": "<WRITE: one short line of guidance above the form, or empty>",
"form_title": "<WRITE: a title for the form, two to four words>",
"heading": "<WRITE: a heading, at most eight words, saying what the reader gets>",
"hints": {
"email": "<WRITE: an example answer for the field `email`, as a placeholder; or empty>",
"interest": "<WRITE: an example answer for the field `interest`, as a placeholder; or empty>",
"name": "<WRITE: an example answer for the field `name`, as a placeholder; or empty>",
"note": "<WRITE: an example answer for the field `note`, as a placeholder; or empty>"
},
"icon": "<WRITE: an icon name from the list at the end, the one that fits this best; or empty>",
"labels": {
"email": "<WRITE: a form label for the field `email`>",
"interest": "<WRITE: a form label for the field `interest`>",
"name": "<WRITE: a form label for the field `name`>",
"note": "<WRITE: a form label for the field `note`>"
},
"road_description": "<WRITE: one or two sentences walking the reader through the stages this goes through, in order (the stages are listed above), in their words>",
"road_icon": "<WRITE: an icon name from the list at the end that fits this section; or empty>",
"road_title": "<WRITE: a short title, two to four words, for the line that says what happens after sending>",
"who_description": "<WRITE: one sentence: who reads what they send, and how to reach them meanwhile>",
"who_icon": "<WRITE: an icon name from the list at the end that fits this section; or empty>",
"who_title": "<WRITE: a short title, two to four words, for the line that says who reads it>"
},
"propose": {
"button": "<WRITE: a button, one to three words, saying what pressing it does>",
"description": "<WRITE: one or two short sentences>",
"encouragement": "<WRITE: one reassuring sentence: what happens with what they send, or how little it takes; or empty>",
"form_description": "<WRITE: one short line of guidance above the form, or empty>",
"form_title": "<WRITE: a title for the form, two to four words>",
"heading": "<WRITE: a heading, at most eight words, saying what the reader gets>",
"hints": {
"email": "<WRITE: an example answer for the field `email`, as a placeholder; or empty>",
"page": "<WRITE: an example answer for the field `page`, as a placeholder; or empty>",
"proposed_yaml": "<WRITE: an example answer for the field `proposed_yaml`, as a placeholder; or empty>",
"rationale": "<WRITE: an example answer for the field `rationale`, as a placeholder; or empty>",
"submitted_by": "<WRITE: an example answer for the field `submitted_by`, as a placeholder; or empty>"
},
"icon": "<WRITE: an icon name from the list at the end, the one that fits this best; or empty>",
"labels": {
"email": "<WRITE: a form label for the field `email`>",
"page": "<WRITE: a form label for the field `page`>",
"proposed_yaml": "<WRITE: a form label for the field `proposed_yaml`>",
"rationale": "<WRITE: a form label for the field `rationale`>",
"submitted_by": "<WRITE: a form label for the field `submitted_by`>"
},
"road_description": "<WRITE: one or two sentences walking the reader through the stages this goes through, in order (the stages are listed above), in their words>",
"road_icon": "<WRITE: an icon name from the list at the end that fits this section; or empty>",
"road_title": "<WRITE: a short title, two to four words, for the line that says what happens after sending>",
"who_description": "<WRITE: one sentence: who reads what they send, and how to reach them meanwhile>",
"who_icon": "<WRITE: an icon name from the list at the end that fits this section; or empty>",
"who_title": "<WRITE: a short title, two to four words, for the line that says who reads it>"
},
"subscribe": {
"button": "<WRITE: a button, one to three words, saying what pressing it does>",
"description": "<WRITE: one or two short sentences>",
"encouragement": "<WRITE: one reassuring sentence: what happens with what they send, or how little it takes; or empty>",
"form_description": "<WRITE: one short line of guidance above the form, or empty>",
"form_title": "<WRITE: a title for the form, two to four words>",
"heading": "<WRITE: a heading, at most eight words, saying what the reader gets>",
"hints": {
"email": "<WRITE: an example answer for the field `email`, as a placeholder; or empty>",
"name": "<WRITE: an example answer for the field `name`, as a placeholder; or empty>"
},
"icon": "<WRITE: an icon name from the list at the end, the one that fits this best; or empty>",
"labels": {
"email": "<WRITE: a form label for the field `email`>",
"name": "<WRITE: a form label for the field `name`>"
},
"road_description": "<WRITE: one or two sentences walking the reader through the stages this goes through, in order (the stages are listed above), in their words>",
"road_icon": "<WRITE: an icon name from the list at the end that fits this section; or empty>",
"road_title": "<WRITE: a short title, two to four words, for the line that says what happens after sending>",
"who_description": "<WRITE: one sentence: who reads what they send, and how to reach them meanwhile>",
"who_icon": "<WRITE: an icon name from the list at the end that fits this section; or empty>",
"who_title": "<WRITE: a short title, two to four words, for the line that says who reads it>"
}
},
"question": "<WRITE: the one question this page asks its reader>"
}
Reply with the JSON object only.
=== REPLY ===
```json
{
"description": "Three ways to be part of what UHHM builds: work with us, hear from us, or fix something on this site.",
"needs": {
"collaborate": {
"button": "Get in touch",
"description": "You want to build software with people who read the whole brief, not just the summary.",
"encouragement": "A person reads this, not a form filter — worth the ten minutes.",
"form_description": "Tell us who you are and what kind of work you're after.",
"form_title": "Say hello",
"heading": "Work with people who read the whole thing",
"hints": {
"email": "you@example.com",
"interest": "Backend work, or something design-heavy",
"name": "Your name",
"note": "A bit about what you'd want to work on, or a link to your work"
},
"icon": "handshake",
"labels": {
"email": "Email",
"interest": "What kind of work",
"name": "Name",
"note": "Tell us more"
},
"road_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.",
"road_icon": "route",
"road_title": "What happens next",
"who_description": "One of the owners reads this directly — for anything urgent, write to bl@uhhm.no.",
"who_icon": "user-check",
"who_title": "Who reads this"
},
"propose": {
"button": "Send change",
"description": "You've spotted something on this site that should read differently, and you know roughly how.",
"encouragement": "Even a rough version helps — we can tidy the wording ourselves.",
"form_description": "Point us to the page and show us the change.",
"form_title": "Propose a change",
"heading": "Get a page fixed the way you'd write it",
"hints": {
"email": "you@example.com",
"page": "questions/join/index.yaml",
"proposed_yaml": "heading: \"A clearer way to say this\"",
"rationale": "The current heading doesn't say what you actually get",
"submitted_by": "Your name"
},
"icon": "pencil",
"labels": {
"email": "Email",
"page": "Which page",
"proposed_yaml": "Your proposed text",
"rationale": "Why this is better",
"submitted_by": "Your name"
},
"road_description": "Someone here reads your proposal and either makes the change or explains why not. Either way, you'll hear back.",
"road_icon": "route",
"road_title": "What happens next",
"who_description": "An owner reads every proposal before anything changes — reach us at bl@uhhm.no if it's time-sensitive.",
"who_icon": "user-check",
"who_title": "Who reads this"
},
"subscribe": {
"button": "Sign up",
"description": "You'd rather hear from us now and then than check back on your own.",
"encouragement": "One click unsubscribes you later, no questions asked.",
"form_description": "Just your email, or your name too if you'd like.",
"form_title": "Stay in the loop",
"heading": "Hear from us only when there's something to say",
"hints": {
"email": "you@example.com",
"name": "Your name"
},
"icon": "mail",
"labels": {
"email": "Email",
"name": "Name"
},
"road_description": "You're on the list. We write when there's something worth saying, and you can leave the list whenever you like.",
"road_icon": "bell",
"road_title": "What happens next",
"who_description": "An owner sends these notes directly — write to bl@uhhm.no if you'd rather ask something first.",
"who_icon": "user-check",
"who_title": "Who reads this"
}
},
"question": "How do you want to be part of this?"
}
```
@@ -1,236 +0,0 @@
You write the words for one page of a website for this business.
Business: UHHM
About: UHHM builds software around a clear argument: infrastructure, tools and products for organizations that can say what problem they have. It also builds and carries the redoal network - the gesture math, the relay, the first node, and the portal this site runs on - and answers for what that network keeps.
Contact: Bendik Aagaard Lynghaug <bl@uhhm.no>
Language to write in: en
Everyone the site serves:
- door build: for 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; behind it: commission, trial
- door join: for someone who wants to build with us, hear from us now and then, or change this site; behind it: collaborate, subscribe, propose
- commission: an organization with a problem it wants software to solve - wants: a considered reply to a brief, from people who read the whole thing. Handled by owners. Stages: open -> accepted -> declined.
- trial: 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. Handled by owners. Stages: open -> approved -> previewed -> declined.
- collaborate: 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. Handled by owners. Stages: open -> invited -> active -> departed -> declined.
- subscribe: someone who wants to hear from us when there is something to say - wants: a note now and then, and an easy way out. Handled by owners. Stages: open -> unsubscribed.
- propose: a visitor who sees how a page on this site should change - wants: the change read by a person and, if approved, made. Handled by owners. Stages: open -> approved -> rejected.
- custody: someone who runs, builds on, or is affected by the redoal network and needs the people who keep its first node - wants: an answer from a custodian, and action where the network keeps something it should not. Handled by custodians. Stages: open -> in_dialogue -> resolved -> declined.
- prospect: an owner who has met an organization worth following up - wants: it written down and walked through its states from the desk. Handled by owners. Stages: prospect -> client -> past_client.
The page: questions/owners/index.yaml
It is a desk: the page one role inside the business works from. Under `buckets`, each entry is a list of cases; `moves` are the buttons that move a case from one stage to the next (key `from->to`), so label each with what the person has just done. Under `links` are pages this role can open. Under `invites`, each entry is a form that invites a person into that group - they get an account and a one-time link - and `invited` is the list of invites sent.
Below is the page as JSON. Every value is a slot that says what to write there. Return the same JSON with every slot replaced by your words. Keep every key exactly as it is. A slot left as it is counts as no answer.
Rules for the words:
- `question` is a question the reader could ask themselves.
- A heading says what the reader gets, in the reader's own words, and must work without its description.
- Lead with what a thing enables. No negations in headings. No trade jargon the reader would not use.
- Descriptions are one or two short sentences. Labels and buttons are a few words.
- The button says what pressing it does; the encouragement says what happens next or how little it takes; the form's guidance line says what to have ready. Placeholders are example answers in the reader's words.
- An icon is one name from this list, chosen for what the reader is doing, or empty: house, building-2, store, school, map-pin, route, footprints, trees, leaf, snowflake, sun, users, user, user-plus, user-check, baby, heart-handshake, hand-helping, handshake, smile, mail, phone, message-circle, megaphone, bell, send, inbox, alert-triangle, siren, shield, construction, hammer, wrench, ruler, package, truck, car, bus, train-front, bike, calendar, clock, file-text, clipboard-list, receipt, wallet, coins, banknote, credit-card, key, lock, search, star, gift, shopping-cart, lightbulb, flag, thumbs-up, check-circle, briefcase, stethoscope, activity, camera, pencil, refresh-cw, list, layers, vote, scale
- Write the way people in this trade and country actually speak.
{
"buckets": {
"applicants": {
"description": "<WRITE: one or two short sentences>",
"heading": "<WRITE: a heading, at most eight words, saying what the reader gets>",
"moves": {
"active->declined": "<WRITE: a button, two to four words, for a case going active->declined>",
"active->departed": "<WRITE: a button, two to four words, for a case going active->departed>",
"invited->active": "<WRITE: a button, two to four words, for a case going invited->active>",
"invited->declined": "<WRITE: a button, two to four words, for a case going invited->declined>",
"open->declined": "<WRITE: a button, two to four words, for a case going open->declined>",
"open->invited": "<WRITE: a button, two to four words, for a case going open->invited>"
}
},
"custody_requests": {
"description": "<WRITE: one or two short sentences>",
"heading": "<WRITE: a heading, at most eight words, saying what the reader gets>",
"moves": {}
},
"development_proposals": {
"description": "<WRITE: one or two short sentences>",
"heading": "<WRITE: a heading, at most eight words, saying what the reader gets>",
"moves": {
"open->approved": "<WRITE: a button, two to four words, for a case going open->approved>",
"open->rejected": "<WRITE: a button, two to four words, for a case going open->rejected>"
}
},
"organizations": {
"description": "<WRITE: one or two short sentences>",
"heading": "<WRITE: a heading, at most eight words, saying what the reader gets>",
"moves": {
"client->past_client": "<WRITE: a button, two to four words, for a case going client->past_client>",
"prospect->client": "<WRITE: a button, two to four words, for a case going prospect->client>",
"prospect->past_client": "<WRITE: a button, two to four words, for a case going prospect->past_client>"
}
},
"projects": {
"description": "<WRITE: one or two short sentences>",
"heading": "<WRITE: a heading, at most eight words, saying what the reader gets>",
"moves": {
"open->accepted": "<WRITE: a button, two to four words, for a case going open->accepted>",
"open->declined": "<WRITE: a button, two to four words, for a case going open->declined>"
}
},
"subscribers": {
"description": "<WRITE: one or two short sentences>",
"heading": "<WRITE: a heading, at most eight words, saying what the reader gets>",
"moves": {
"open->unsubscribed": "<WRITE: a button, two to four words, for a case going open->unsubscribed>"
}
},
"trials": {
"description": "<WRITE: one or two short sentences>",
"heading": "<WRITE: a heading, at most eight words, saying what the reader gets>",
"moves": {
"approved->declined": "<WRITE: a button, two to four words, for a case going approved->declined>",
"approved->previewed": "<WRITE: a button, two to four words, for a case going approved->previewed>",
"open->approved": "<WRITE: a button, two to four words, for a case going open->approved>",
"open->declined": "<WRITE: a button, two to four words, for a case going open->declined>"
}
}
},
"confirm": "<WRITE: a button, one to three words, saying what pressing it does>",
"description": "<WRITE: one or two short sentences>",
"invited": {
"description": "<WRITE: one or two short sentences>",
"done": "<WRITE: a form label for the field `done`>",
"heading": "<WRITE: a heading, at most eight words, saying what the reader gets>"
},
"invites": {
"custodians": {
"button": "<WRITE: a button, one to three words, saying what pressing it does>",
"description": "<WRITE: one or two short sentences>",
"form_title": "<WRITE: a title for the form, two to four words>",
"heading": "<WRITE: a heading, at most eight words, saying what the reader gets>",
"labels": {
"email": "<WRITE: a form label for the field `email`>",
"name": "<WRITE: a form label for the field `name`>"
}
},
"owners": {
"button": "<WRITE: a button, one to three words, saying what pressing it does>",
"description": "<WRITE: one or two short sentences>",
"form_title": "<WRITE: a title for the form, two to four words>",
"heading": "<WRITE: a heading, at most eight words, saying what the reader gets>",
"labels": {
"email": "<WRITE: a form label for the field `email`>",
"name": "<WRITE: a form label for the field `name`>"
}
}
},
"links": {
"prospect": {
"button": "<WRITE: a button, one to three words, saying what pressing it does>",
"description": "<WRITE: one or two short sentences>",
"heading": "<WRITE: a heading, at most eight words, saying what the reader gets>"
}
},
"question": "<WRITE: the one question this page asks its reader>"
}
Reply with the JSON object only.
=== REPLY ===
{
"buckets": {
"applicants": {
"description": "People who've asked to build with us, waiting on a decision or already working alongside us.",
"heading": "People who want to build with us",
"moves": {
"active->declined": "End collaboration",
"active->departed": "Mark departed",
"invited->active": "Confirm active",
"invited->declined": "Withdraw invite",
"open->declined": "Decline applicant",
"open->invited": "Send invite"
}
},
"custody_requests": {
"description": "Questions and issues raised with the people who keep the first node - custodians handle these, but you can see where each one stands.",
"heading": "What's been raised with custodians",
"moves": {}
},
"development_proposals": {
"description": "Changes visitors have proposed for pages on this site, waiting on a yes or no.",
"heading": "Proposed changes to the site",
"moves": {
"open->approved": "Approve change",
"open->rejected": "Reject change"
}
},
"organizations": {
"description": "Organizations you've met, tracked from first contact through to client and beyond.",
"heading": "Organizations you're tracking",
"moves": {
"client->past_client": "Mark past client",
"prospect->client": "Mark as client",
"prospect->past_client": "Mark not pursued"
}
},
"projects": {
"description": "Briefs sent in by organizations with a problem they want solved.",
"heading": "Briefs waiting on a reply",
"moves": {
"open->accepted": "Accept brief",
"open->declined": "Decline brief"
}
},
"subscribers": {
"description": "People who want to hear from you now and then.",
"heading": "Who's hearing from you",
"moves": {
"open->unsubscribed": "Unsubscribe them"
}
},
"trials": {
"description": "Businesses who want to see their own workflow as a working site before committing to anything.",
"heading": "Trial sites in progress",
"moves": {
"approved->declined": "Decline trial",
"approved->previewed": "Mark previewed",
"open->approved": "Approve trial",
"open->declined": "Decline trial"
}
}
},
"confirm": "Confirm",
"description": "Everything waiting on you: briefs, trials, applicants, subscribers, and proposals, all in one place.",
"invited": {
"description": "People you've invited in, and whether they've taken it up yet.",
"done": "Taken up",
"heading": "Invites you've sent"
},
"invites": {
"custodians": {
"button": "Send invite",
"description": "Bring someone in to help keep the first node and answer for the network.",
"form_title": "Invite a custodian",
"heading": "Bring in a custodian",
"labels": {
"email": "Their email",
"name": "Their name"
}
},
"owners": {
"button": "Send invite",
"description": "Bring someone in to work this desk alongside you.",
"form_title": "Invite an owner",
"heading": "Bring in another owner",
"labels": {
"email": "Their email",
"name": "Their name"
}
}
},
"links": {
"prospect": {
"button": "Add prospect",
"description": "Write down an organization worth following up, and track it from first contact onward.",
"heading": "Track a new organization"
}
},
"question": "What's waiting on me today?"
}
@@ -1,52 +0,0 @@
You write the words for one page of a website for this business.
Business: UHHM
About: UHHM builds software around a clear argument: infrastructure, tools and products for organizations that can say what problem they have. It also builds and carries the redoal network - the gesture math, the relay, the first node, and the portal this site runs on - and answers for what that network keeps.
Contact: Bendik Aagaard Lynghaug <bl@uhhm.no>
Language to write in: en
Everyone the site serves:
- door build: for 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; behind it: commission, trial
- door join: for someone who wants to build with us, hear from us now and then, or change this site; behind it: collaborate, subscribe, propose
- commission: an organization with a problem it wants software to solve - wants: a considered reply to a brief, from people who read the whole thing. Handled by owners. Stages: open -> accepted -> declined.
- trial: 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. Handled by owners. Stages: open -> approved -> previewed -> declined.
- collaborate: 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. Handled by owners. Stages: open -> invited -> active -> departed -> declined.
- subscribe: someone who wants to hear from us when there is something to say - wants: a note now and then, and an easy way out. Handled by owners. Stages: open -> unsubscribed.
- propose: a visitor who sees how a page on this site should change - wants: the change read by a person and, if approved, made. Handled by owners. Stages: open -> approved -> rejected.
- custody: someone who runs, builds on, or is affected by the redoal network and needs the people who keep its first node - wants: an answer from a custodian, and action where the network keeps something it should not. Handled by custodians. Stages: open -> in_dialogue -> resolved -> declined.
- prospect: an owner who has met an organization worth following up - wants: it written down and walked through its states from the desk. Handled by owners. Stages: prospect -> client -> past_client.
The page: questions/owners/prospect-sent.yaml
It is a page shown right after someone has sent a form. Say who reads it, when they answer, and what happens next.
Below is the page as JSON. Every value is a slot that says what to write there. Return the same JSON with every slot replaced by your words. Keep every key exactly as it is. A slot left as it is counts as no answer.
Rules for the words:
- `question` is a question the reader could ask themselves.
- A heading says what the reader gets, in the reader's own words, and must work without its description.
- Lead with what a thing enables. No negations in headings. No trade jargon the reader would not use.
- Descriptions are one or two short sentences. Labels and buttons are a few words.
- The button says what pressing it does; the encouragement says what happens next or how little it takes; the form's guidance line says what to have ready. Placeholders are example answers in the reader's words.
- An icon is one name from this list, chosen for what the reader is doing, or empty: house, building-2, store, school, map-pin, route, footprints, trees, leaf, snowflake, sun, users, user, user-plus, user-check, baby, heart-handshake, hand-helping, handshake, smile, mail, phone, message-circle, megaphone, bell, send, inbox, alert-triangle, siren, shield, construction, hammer, wrench, ruler, package, truck, car, bus, train-front, bike, calendar, clock, file-text, clipboard-list, receipt, wallet, coins, banknote, credit-card, key, lock, search, star, gift, shopping-cart, lightbulb, flag, thumbs-up, check-circle, briefcase, stethoscope, activity, camera, pencil, refresh-cw, list, layers, vote, scale
- Write the way people in this trade and country actually speak.
{
"back": "<WRITE: a button, one to three words, saying what pressing it does>",
"description": "<WRITE: one or two short sentences>",
"next_description": "<WRITE: one or two short sentences>",
"next_heading": "<WRITE: a heading, at most eight words, saying what the reader gets>",
"question": "<WRITE: the one question this page asks its reader>"
}
Reply with the JSON object only.
=== REPLY ===
```json
{
"back": "Back to site",
"description": "Thanks — we've got your prospect written down, and it now moves through the desk with everything else we're tracking.",
"next_description": "An owner walks it from prospect to client, and on to past client, as the relationship moves.",
"next_heading": "It's on the desk now",
"question": "What happens to this now?"
}
```
@@ -1,92 +0,0 @@
You write the words for one page of a website for this business.
Business: UHHM
About: UHHM builds software around a clear argument: infrastructure, tools and products for organizations that can say what problem they have. It also builds and carries the redoal network - the gesture math, the relay, the first node, and the portal this site runs on - and answers for what that network keeps.
Contact: Bendik Aagaard Lynghaug <bl@uhhm.no>
Language to write in: en
Everyone the site serves:
- door build: for 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; behind it: commission, trial
- door join: for someone who wants to build with us, hear from us now and then, or change this site; behind it: collaborate, subscribe, propose
- commission: an organization with a problem it wants software to solve - wants: a considered reply to a brief, from people who read the whole thing. Handled by owners. Stages: open -> accepted -> declined.
- trial: 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. Handled by owners. Stages: open -> approved -> previewed -> declined.
- collaborate: 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. Handled by owners. Stages: open -> invited -> active -> departed -> declined.
- subscribe: someone who wants to hear from us when there is something to say - wants: a note now and then, and an easy way out. Handled by owners. Stages: open -> unsubscribed.
- propose: a visitor who sees how a page on this site should change - wants: the change read by a person and, if approved, made. Handled by owners. Stages: open -> approved -> rejected.
- custody: someone who runs, builds on, or is affected by the redoal network and needs the people who keep its first node - wants: an answer from a custodian, and action where the network keeps something it should not. Handled by custodians. Stages: open -> in_dialogue -> resolved -> declined.
- prospect: an owner who has met an organization worth following up - wants: it written down and walked through its states from the desk. Handled by owners. Stages: prospect -> client -> past_client.
The page: questions/owners/prospect.yaml
It is a page only one role inside the business can open, holding one form.
Below is the page as JSON. Every value is a slot that says what to write there. Return the same JSON with every slot replaced by your words. Keep every key exactly as it is. A slot left as it is counts as no answer.
Rules for the words:
- `question` is a question the reader could ask themselves.
- A heading says what the reader gets, in the reader's own words, and must work without its description.
- Lead with what a thing enables. No negations in headings. No trade jargon the reader would not use.
- Descriptions are one or two short sentences. Labels and buttons are a few words.
- The button says what pressing it does; the encouragement says what happens next or how little it takes; the form's guidance line says what to have ready. Placeholders are example answers in the reader's words.
- An icon is one name from this list, chosen for what the reader is doing, or empty: house, building-2, store, school, map-pin, route, footprints, trees, leaf, snowflake, sun, users, user, user-plus, user-check, baby, heart-handshake, hand-helping, handshake, smile, mail, phone, message-circle, megaphone, bell, send, inbox, alert-triangle, siren, shield, construction, hammer, wrench, ruler, package, truck, car, bus, train-front, bike, calendar, clock, file-text, clipboard-list, receipt, wallet, coins, banknote, credit-card, key, lock, search, star, gift, shopping-cart, lightbulb, flag, thumbs-up, check-circle, briefcase, stethoscope, activity, camera, pencil, refresh-cw, list, layers, vote, scale
- Write the way people in this trade and country actually speak.
{
"button": "<WRITE: a button, one to three words, saying what pressing it does>",
"description": "<WRITE: one or two short sentences>",
"encouragement": "<WRITE: one reassuring sentence: what happens with what they send, or how little it takes; or empty>",
"form_description": "<WRITE: one short line of guidance above the form, or empty>",
"form_title": "<WRITE: a title for the form, two to four words>",
"heading": "<WRITE: a heading, at most eight words, saying what the reader gets>",
"hints": {
"contact": "<WRITE: an example answer for the field `contact`, as a placeholder; or empty>",
"name": "<WRITE: an example answer for the field `name`, as a placeholder; or empty>",
"note": "<WRITE: an example answer for the field `note`, as a placeholder; or empty>"
},
"icon": "<WRITE: an icon name from the list at the end, the one that fits this best; or empty>",
"labels": {
"contact": "<WRITE: a form label for the field `contact`>",
"name": "<WRITE: a form label for the field `name`>",
"note": "<WRITE: a form label for the field `note`>"
},
"page_description": "<WRITE: one or two short sentences>",
"question": "<WRITE: the one question this page asks its reader>",
"road_description": "<WRITE: one or two sentences walking the reader through the stages this goes through, in order (the stages are listed above), in their words>",
"road_icon": "<WRITE: an icon name from the list at the end that fits this section; or empty>",
"road_title": "<WRITE: a short title, two to four words, for the line that says what happens after sending>",
"who_description": "<WRITE: one sentence: who reads what they send, and how to reach them meanwhile>",
"who_icon": "<WRITE: an icon name from the list at the end that fits this section; or empty>",
"who_title": "<WRITE: a short title, two to four words, for the line that says who reads it>"
}
Reply with the JSON object only.
=== REPLY ===
```json
{
"button": "Add to prospects",
"description": "One line per organization worth watching, moved through the stages as things develop.",
"encouragement": "Takes a minute, and it's yours to update later.",
"form_description": "Name the organization and where things stand.",
"form_title": "New prospect",
"heading": "Keep an organization on your radar",
"hints": {
"contact": "met at the bakers' conference, [email protected]",
"name": "Nordvik Bakery",
"note": "wants a booking flow, follow up after harvest season"
},
"icon": "briefcase",
"labels": {
"contact": "Contact",
"name": "Organization",
"note": "Note"
},
"page_description": "Write down an organization worth following up, and move it through client and past client as things develop.",
"question": "Is there an organization I should be keeping track of?",
"road_description": "It sits as a prospect until something moves - then you mark it client, and later past client if the work ends.",
"road_icon": "route",
"road_title": "Moves as you update it",
"who_description": "Only you see this, so keep it wherever you check next.",
"who_icon": "user",
"who_title": "Just for you"
}
```
@@ -1,52 +0,0 @@
You write the words for one page of a website for this business.
Business: UHHM
About: UHHM builds software around a clear argument: infrastructure, tools and products for organizations that can say what problem they have. It also builds and carries the redoal network - the gesture math, the relay, the first node, and the portal this site runs on - and answers for what that network keeps.
Contact: Bendik Aagaard Lynghaug <bl@uhhm.no>
Language to write in: en
Everyone the site serves:
- door build: for 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; behind it: commission, trial
- door join: for someone who wants to build with us, hear from us now and then, or change this site; behind it: collaborate, subscribe, propose
- commission: an organization with a problem it wants software to solve - wants: a considered reply to a brief, from people who read the whole thing. Handled by owners. Stages: open -> accepted -> declined.
- trial: 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. Handled by owners. Stages: open -> approved -> previewed -> declined.
- collaborate: 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. Handled by owners. Stages: open -> invited -> active -> departed -> declined.
- subscribe: someone who wants to hear from us when there is something to say - wants: a note now and then, and an easy way out. Handled by owners. Stages: open -> unsubscribed.
- propose: a visitor who sees how a page on this site should change - wants: the change read by a person and, if approved, made. Handled by owners. Stages: open -> approved -> rejected.
- custody: someone who runs, builds on, or is affected by the redoal network and needs the people who keep its first node - wants: an answer from a custodian, and action where the network keeps something it should not. Handled by custodians. Stages: open -> in_dialogue -> resolved -> declined.
- prospect: an owner who has met an organization worth following up - wants: it written down and walked through its states from the desk. Handled by owners. Stages: prospect -> client -> past_client.
The page: questions/received/collaborate.yaml
It is a page shown right after someone has sent a form. Say who reads it, when they answer, and what happens next.
Below is the page as JSON. Every value is a slot that says what to write there. Return the same JSON with every slot replaced by your words. Keep every key exactly as it is. A slot left as it is counts as no answer.
Rules for the words:
- `question` is a question the reader could ask themselves.
- A heading says what the reader gets, in the reader's own words, and must work without its description.
- Lead with what a thing enables. No negations in headings. No trade jargon the reader would not use.
- Descriptions are one or two short sentences. Labels and buttons are a few words.
- The button says what pressing it does; the encouragement says what happens next or how little it takes; the form's guidance line says what to have ready. Placeholders are example answers in the reader's words.
- An icon is one name from this list, chosen for what the reader is doing, or empty: house, building-2, store, school, map-pin, route, footprints, trees, leaf, snowflake, sun, users, user, user-plus, user-check, baby, heart-handshake, hand-helping, handshake, smile, mail, phone, message-circle, megaphone, bell, send, inbox, alert-triangle, siren, shield, construction, hammer, wrench, ruler, package, truck, car, bus, train-front, bike, calendar, clock, file-text, clipboard-list, receipt, wallet, coins, banknote, credit-card, key, lock, search, star, gift, shopping-cart, lightbulb, flag, thumbs-up, check-circle, briefcase, stethoscope, activity, camera, pencil, refresh-cw, list, layers, vote, scale
- Write the way people in this trade and country actually speak.
{
"back": "<WRITE: a button, one to three words, saying what pressing it does>",
"description": "<WRITE: one or two short sentences>",
"next_description": "<WRITE: one or two short sentences>",
"next_heading": "<WRITE: a heading, at most eight words, saying what the reader gets>",
"question": "<WRITE: the one question this page asks its reader>"
}
Reply with the JSON object only.
=== REPLY ===
```json
{
"back": "Back to site",
"description": "Your note is in. An owner reads every one and will get back to you if there's a fit worth exploring.",
"next_description": "If it looks like a fit, we'll reach out to talk about where you could help.",
"next_heading": "We'll write if there's a fit",
"question": "What happens to what I just sent?"
}
```
@@ -1,52 +0,0 @@
You write the words for one page of a website for this business.
Business: UHHM
About: UHHM builds software around a clear argument: infrastructure, tools and products for organizations that can say what problem they have. It also builds and carries the redoal network - the gesture math, the relay, the first node, and the portal this site runs on - and answers for what that network keeps.
Contact: Bendik Aagaard Lynghaug <bl@uhhm.no>
Language to write in: en
Everyone the site serves:
- door build: for 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; behind it: commission, trial
- door join: for someone who wants to build with us, hear from us now and then, or change this site; behind it: collaborate, subscribe, propose
- commission: an organization with a problem it wants software to solve - wants: a considered reply to a brief, from people who read the whole thing. Handled by owners. Stages: open -> accepted -> declined.
- trial: 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. Handled by owners. Stages: open -> approved -> previewed -> declined.
- collaborate: 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. Handled by owners. Stages: open -> invited -> active -> departed -> declined.
- subscribe: someone who wants to hear from us when there is something to say - wants: a note now and then, and an easy way out. Handled by owners. Stages: open -> unsubscribed.
- propose: a visitor who sees how a page on this site should change - wants: the change read by a person and, if approved, made. Handled by owners. Stages: open -> approved -> rejected.
- custody: someone who runs, builds on, or is affected by the redoal network and needs the people who keep its first node - wants: an answer from a custodian, and action where the network keeps something it should not. Handled by custodians. Stages: open -> in_dialogue -> resolved -> declined.
- prospect: an owner who has met an organization worth following up - wants: it written down and walked through its states from the desk. Handled by owners. Stages: prospect -> client -> past_client.
The page: questions/received/commission.yaml
It is a page shown right after someone has sent a form. Say who reads it, when they answer, and what happens next.
Below is the page as JSON. Every value is a slot that says what to write there. Return the same JSON with every slot replaced by your words. Keep every key exactly as it is. A slot left as it is counts as no answer.
Rules for the words:
- `question` is a question the reader could ask themselves.
- A heading says what the reader gets, in the reader's own words, and must work without its description.
- Lead with what a thing enables. No negations in headings. No trade jargon the reader would not use.
- Descriptions are one or two short sentences. Labels and buttons are a few words.
- The button says what pressing it does; the encouragement says what happens next or how little it takes; the form's guidance line says what to have ready. Placeholders are example answers in the reader's words.
- An icon is one name from this list, chosen for what the reader is doing, or empty: house, building-2, store, school, map-pin, route, footprints, trees, leaf, snowflake, sun, users, user, user-plus, user-check, baby, heart-handshake, hand-helping, handshake, smile, mail, phone, message-circle, megaphone, bell, send, inbox, alert-triangle, siren, shield, construction, hammer, wrench, ruler, package, truck, car, bus, train-front, bike, calendar, clock, file-text, clipboard-list, receipt, wallet, coins, banknote, credit-card, key, lock, search, star, gift, shopping-cart, lightbulb, flag, thumbs-up, check-circle, briefcase, stethoscope, activity, camera, pencil, refresh-cw, list, layers, vote, scale
- Write the way people in this trade and country actually speak.
{
"back": "<WRITE: a button, one to three words, saying what pressing it does>",
"description": "<WRITE: one or two short sentences>",
"next_description": "<WRITE: one or two short sentences>",
"next_heading": "<WRITE: a heading, at most eight words, saying what the reader gets>",
"question": "<WRITE: the one question this page asks its reader>"
}
Reply with the JSON object only.
=== REPLY ===
```json
{
"back": "Back to home",
"description": "Your brief is in. An owner reads every commission end to end before replying.",
"next_description": "Expect a reply within a few working days, either way, straight to your inbox.",
"next_heading": "A real reply from someone who read it",
"question": "What happens now that we've sent our brief?"
}
```
@@ -1,52 +0,0 @@
You write the words for one page of a website for this business.
Business: UHHM
About: UHHM builds software around a clear argument: infrastructure, tools and products for organizations that can say what problem they have. It also builds and carries the redoal network - the gesture math, the relay, the first node, and the portal this site runs on - and answers for what that network keeps.
Contact: Bendik Aagaard Lynghaug <bl@uhhm.no>
Language to write in: en
Everyone the site serves:
- door build: for 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; behind it: commission, trial
- door join: for someone who wants to build with us, hear from us now and then, or change this site; behind it: collaborate, subscribe, propose
- commission: an organization with a problem it wants software to solve - wants: a considered reply to a brief, from people who read the whole thing. Handled by owners. Stages: open -> accepted -> declined.
- trial: 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. Handled by owners. Stages: open -> approved -> previewed -> declined.
- collaborate: 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. Handled by owners. Stages: open -> invited -> active -> departed -> declined.
- subscribe: someone who wants to hear from us when there is something to say - wants: a note now and then, and an easy way out. Handled by owners. Stages: open -> unsubscribed.
- propose: a visitor who sees how a page on this site should change - wants: the change read by a person and, if approved, made. Handled by owners. Stages: open -> approved -> rejected.
- custody: someone who runs, builds on, or is affected by the redoal network and needs the people who keep its first node - wants: an answer from a custodian, and action where the network keeps something it should not. Handled by custodians. Stages: open -> in_dialogue -> resolved -> declined.
- prospect: an owner who has met an organization worth following up - wants: it written down and walked through its states from the desk. Handled by owners. Stages: prospect -> client -> past_client.
The page: questions/received/custody.yaml
It is a page shown right after someone has sent a form. Say who reads it, when they answer, and what happens next.
Below is the page as JSON. Every value is a slot that says what to write there. Return the same JSON with every slot replaced by your words. Keep every key exactly as it is. A slot left as it is counts as no answer.
Rules for the words:
- `question` is a question the reader could ask themselves.
- A heading says what the reader gets, in the reader's own words, and must work without its description.
- Lead with what a thing enables. No negations in headings. No trade jargon the reader would not use.
- Descriptions are one or two short sentences. Labels and buttons are a few words.
- The button says what pressing it does; the encouragement says what happens next or how little it takes; the form's guidance line says what to have ready. Placeholders are example answers in the reader's words.
- An icon is one name from this list, chosen for what the reader is doing, or empty: house, building-2, store, school, map-pin, route, footprints, trees, leaf, snowflake, sun, users, user, user-plus, user-check, baby, heart-handshake, hand-helping, handshake, smile, mail, phone, message-circle, megaphone, bell, send, inbox, alert-triangle, siren, shield, construction, hammer, wrench, ruler, package, truck, car, bus, train-front, bike, calendar, clock, file-text, clipboard-list, receipt, wallet, coins, banknote, credit-card, key, lock, search, star, gift, shopping-cart, lightbulb, flag, thumbs-up, check-circle, briefcase, stethoscope, activity, camera, pencil, refresh-cw, list, layers, vote, scale
- Write the way people in this trade and country actually speak.
{
"back": "<WRITE: a button, one to three words, saying what pressing it does>",
"description": "<WRITE: one or two short sentences>",
"next_description": "<WRITE: one or two short sentences>",
"next_heading": "<WRITE: a heading, at most eight words, saying what the reader gets>",
"question": "<WRITE: the one question this page asks its reader>"
}
Reply with the JSON object only.
=== REPLY ===
```json
{
"back": "Back to the site",
"description": "A custodian reads every message about the redoal network and what it keeps.",
"next_description": "Expect a reply once your report has been looked at and the network checked.",
"next_heading": "A custodian is on it",
"question": "Who looks after what the network keeps?"
}
```
@@ -1,52 +0,0 @@
You write the words for one page of a website for this business.
Business: UHHM
About: UHHM builds software around a clear argument: infrastructure, tools and products for organizations that can say what problem they have. It also builds and carries the redoal network - the gesture math, the relay, the first node, and the portal this site runs on - and answers for what that network keeps.
Contact: Bendik Aagaard Lynghaug <bl@uhhm.no>
Language to write in: en
Everyone the site serves:
- door build: for 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; behind it: commission, trial
- door join: for someone who wants to build with us, hear from us now and then, or change this site; behind it: collaborate, subscribe, propose
- commission: an organization with a problem it wants software to solve - wants: a considered reply to a brief, from people who read the whole thing. Handled by owners. Stages: open -> accepted -> declined.
- trial: 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. Handled by owners. Stages: open -> approved -> previewed -> declined.
- collaborate: 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. Handled by owners. Stages: open -> invited -> active -> departed -> declined.
- subscribe: someone who wants to hear from us when there is something to say - wants: a note now and then, and an easy way out. Handled by owners. Stages: open -> unsubscribed.
- propose: a visitor who sees how a page on this site should change - wants: the change read by a person and, if approved, made. Handled by owners. Stages: open -> approved -> rejected.
- custody: someone who runs, builds on, or is affected by the redoal network and needs the people who keep its first node - wants: an answer from a custodian, and action where the network keeps something it should not. Handled by custodians. Stages: open -> in_dialogue -> resolved -> declined.
- prospect: an owner who has met an organization worth following up - wants: it written down and walked through its states from the desk. Handled by owners. Stages: prospect -> client -> past_client.
The page: questions/received/propose.yaml
It is a page shown right after someone has sent a form. Say who reads it, when they answer, and what happens next.
Below is the page as JSON. Every value is a slot that says what to write there. Return the same JSON with every slot replaced by your words. Keep every key exactly as it is. A slot left as it is counts as no answer.
Rules for the words:
- `question` is a question the reader could ask themselves.
- A heading says what the reader gets, in the reader's own words, and must work without its description.
- Lead with what a thing enables. No negations in headings. No trade jargon the reader would not use.
- Descriptions are one or two short sentences. Labels and buttons are a few words.
- The button says what pressing it does; the encouragement says what happens next or how little it takes; the form's guidance line says what to have ready. Placeholders are example answers in the reader's words.
- An icon is one name from this list, chosen for what the reader is doing, or empty: house, building-2, store, school, map-pin, route, footprints, trees, leaf, snowflake, sun, users, user, user-plus, user-check, baby, heart-handshake, hand-helping, handshake, smile, mail, phone, message-circle, megaphone, bell, send, inbox, alert-triangle, siren, shield, construction, hammer, wrench, ruler, package, truck, car, bus, train-front, bike, calendar, clock, file-text, clipboard-list, receipt, wallet, coins, banknote, credit-card, key, lock, search, star, gift, shopping-cart, lightbulb, flag, thumbs-up, check-circle, briefcase, stethoscope, activity, camera, pencil, refresh-cw, list, layers, vote, scale
- Write the way people in this trade and country actually speak.
{
"back": "<WRITE: a button, one to three words, saying what pressing it does>",
"description": "<WRITE: one or two short sentences>",
"next_description": "<WRITE: one or two short sentences>",
"next_heading": "<WRITE: a heading, at most eight words, saying what the reader gets>",
"question": "<WRITE: the one question this page asks its reader>"
}
Reply with the JSON object only.
=== REPLY ===
```json
{
"back": "Back home",
"description": "Your proposal is in. Someone here will read it and decide whether it fits before anything changes on the page.",
"next_description": "We'll write back once it's been read — approved and made live, or turned down with a reason.",
"next_heading": "A read, then a decision",
"question": "What happens to my proposal now?"
}
```
@@ -1,52 +0,0 @@
You write the words for one page of a website for this business.
Business: UHHM
About: UHHM builds software around a clear argument: infrastructure, tools and products for organizations that can say what problem they have. It also builds and carries the redoal network - the gesture math, the relay, the first node, and the portal this site runs on - and answers for what that network keeps.
Contact: Bendik Aagaard Lynghaug <bl@uhhm.no>
Language to write in: en
Everyone the site serves:
- door build: for 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; behind it: commission, trial
- door join: for someone who wants to build with us, hear from us now and then, or change this site; behind it: collaborate, subscribe, propose
- commission: an organization with a problem it wants software to solve - wants: a considered reply to a brief, from people who read the whole thing. Handled by owners. Stages: open -> accepted -> declined.
- trial: 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. Handled by owners. Stages: open -> approved -> previewed -> declined.
- collaborate: 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. Handled by owners. Stages: open -> invited -> active -> departed -> declined.
- subscribe: someone who wants to hear from us when there is something to say - wants: a note now and then, and an easy way out. Handled by owners. Stages: open -> unsubscribed.
- propose: a visitor who sees how a page on this site should change - wants: the change read by a person and, if approved, made. Handled by owners. Stages: open -> approved -> rejected.
- custody: someone who runs, builds on, or is affected by the redoal network and needs the people who keep its first node - wants: an answer from a custodian, and action where the network keeps something it should not. Handled by custodians. Stages: open -> in_dialogue -> resolved -> declined.
- prospect: an owner who has met an organization worth following up - wants: it written down and walked through its states from the desk. Handled by owners. Stages: prospect -> client -> past_client.
The page: questions/received/subscribe.yaml
It is a page shown right after someone has sent a form. Say who reads it, when they answer, and what happens next.
Below is the page as JSON. Every value is a slot that says what to write there. Return the same JSON with every slot replaced by your words. Keep every key exactly as it is. A slot left as it is counts as no answer.
Rules for the words:
- `question` is a question the reader could ask themselves.
- A heading says what the reader gets, in the reader's own words, and must work without its description.
- Lead with what a thing enables. No negations in headings. No trade jargon the reader would not use.
- Descriptions are one or two short sentences. Labels and buttons are a few words.
- The button says what pressing it does; the encouragement says what happens next or how little it takes; the form's guidance line says what to have ready. Placeholders are example answers in the reader's words.
- An icon is one name from this list, chosen for what the reader is doing, or empty: house, building-2, store, school, map-pin, route, footprints, trees, leaf, snowflake, sun, users, user, user-plus, user-check, baby, heart-handshake, hand-helping, handshake, smile, mail, phone, message-circle, megaphone, bell, send, inbox, alert-triangle, siren, shield, construction, hammer, wrench, ruler, package, truck, car, bus, train-front, bike, calendar, clock, file-text, clipboard-list, receipt, wallet, coins, banknote, credit-card, key, lock, search, star, gift, shopping-cart, lightbulb, flag, thumbs-up, check-circle, briefcase, stethoscope, activity, camera, pencil, refresh-cw, list, layers, vote, scale
- Write the way people in this trade and country actually speak.
{
"back": "<WRITE: a button, one to three words, saying what pressing it does>",
"description": "<WRITE: one or two short sentences>",
"next_description": "<WRITE: one or two short sentences>",
"next_heading": "<WRITE: a heading, at most eight words, saying what the reader gets>",
"question": "<WRITE: the one question this page asks its reader>"
}
Reply with the JSON object only.
=== REPLY ===
```json
{
"back": "Back to site",
"description": "You'll hear from us when there's something worth saying, not on a schedule.",
"next_description": "You're on the list. Every note has an unsubscribe link if it stops being useful.",
"next_heading": "You're on the list",
"question": "What happens now that I've subscribed?"
}
```
@@ -1,52 +0,0 @@
You write the words for one page of a website for this business.
Business: UHHM
About: UHHM builds software around a clear argument: infrastructure, tools and products for organizations that can say what problem they have. It also builds and carries the redoal network - the gesture math, the relay, the first node, and the portal this site runs on - and answers for what that network keeps.
Contact: Bendik Aagaard Lynghaug <bl@uhhm.no>
Language to write in: en
Everyone the site serves:
- door build: for 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; behind it: commission, trial
- door join: for someone who wants to build with us, hear from us now and then, or change this site; behind it: collaborate, subscribe, propose
- commission: an organization with a problem it wants software to solve - wants: a considered reply to a brief, from people who read the whole thing. Handled by owners. Stages: open -> accepted -> declined.
- trial: 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. Handled by owners. Stages: open -> approved -> previewed -> declined.
- collaborate: 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. Handled by owners. Stages: open -> invited -> active -> departed -> declined.
- subscribe: someone who wants to hear from us when there is something to say - wants: a note now and then, and an easy way out. Handled by owners. Stages: open -> unsubscribed.
- propose: a visitor who sees how a page on this site should change - wants: the change read by a person and, if approved, made. Handled by owners. Stages: open -> approved -> rejected.
- custody: someone who runs, builds on, or is affected by the redoal network and needs the people who keep its first node - wants: an answer from a custodian, and action where the network keeps something it should not. Handled by custodians. Stages: open -> in_dialogue -> resolved -> declined.
- prospect: an owner who has met an organization worth following up - wants: it written down and walked through its states from the desk. Handled by owners. Stages: prospect -> client -> past_client.
The page: questions/received/trial.yaml
It is a page shown right after someone has sent a form. Say who reads it, when they answer, and what happens next.
Below is the page as JSON. Every value is a slot that says what to write there. Return the same JSON with every slot replaced by your words. Keep every key exactly as it is. A slot left as it is counts as no answer.
Rules for the words:
- `question` is a question the reader could ask themselves.
- A heading says what the reader gets, in the reader's own words, and must work without its description.
- Lead with what a thing enables. No negations in headings. No trade jargon the reader would not use.
- Descriptions are one or two short sentences. Labels and buttons are a few words.
- The button says what pressing it does; the encouragement says what happens next or how little it takes; the form's guidance line says what to have ready. Placeholders are example answers in the reader's words.
- An icon is one name from this list, chosen for what the reader is doing, or empty: house, building-2, store, school, map-pin, route, footprints, trees, leaf, snowflake, sun, users, user, user-plus, user-check, baby, heart-handshake, hand-helping, handshake, smile, mail, phone, message-circle, megaphone, bell, send, inbox, alert-triangle, siren, shield, construction, hammer, wrench, ruler, package, truck, car, bus, train-front, bike, calendar, clock, file-text, clipboard-list, receipt, wallet, coins, banknote, credit-card, key, lock, search, star, gift, shopping-cart, lightbulb, flag, thumbs-up, check-circle, briefcase, stethoscope, activity, camera, pencil, refresh-cw, list, layers, vote, scale
- Write the way people in this trade and country actually speak.
{
"back": "<WRITE: a button, one to three words, saying what pressing it does>",
"description": "<WRITE: one or two short sentences>",
"next_description": "<WRITE: one or two short sentences>",
"next_heading": "<WRITE: a heading, at most eight words, saying what the reader gets>",
"question": "<WRITE: the one question this page asks its reader>"
}
Reply with the JSON object only.
=== REPLY ===
```json
{
"back": "Back to site",
"description": "We read every trial request ourselves before anything gets built.",
"next_description": "If it looks like a fit, we'll draft your site from your own words and send it back for your say before anything goes live.",
"next_heading": "A first draft, built from your own words",
"question": "What happens now that you've sent this?"
}
```
+20 -20
View File
@@ -2,48 +2,48 @@
"aggregates.yaml": {
"custody_requests": {
"declined": {
"body": "Hello {name},\n\nWhat you sent about an answer from a custodian, and action where the network keeps something it should not is now declined.\n\nBendik Aagaard Lynghaug at bl@uhhm.no",
"subject": "UHHM: Declined"
"body": "We've read your message and decided this isn't something we can take on as custodians. If you think we've missed something, write back and tell us.",
"subject": "On your message to the custodians"
},
"open": {
"body": "Hello {name},\n\nWe have received what you sent about an answer from a custodian, and action where the network keeps something it should not.\n\nBendik Aagaard Lynghaug at bl@uhhm.no",
"subject": "UHHM: Open"
"body": "Your message reached the custodians of the first node. We read everything that comes in - expect a real reply, not an autoresponder.",
"subject": "We have your message"
},
"resolved": {
"body": "Hello {name},\n\nWhat you sent about an answer from a custodian, and action where the network keeps something it should not is now resolved.\n\nBendik Aagaard Lynghaug at bl@uhhm.no",
"subject": "UHHM: Resolved"
"body": "This is resolved. Here's what we found and what we did about it - write back if it isn't settled from where you sit.",
"subject": "Your case is resolved"
}
},
"projects": {
"accepted": {
"body": "Hello {name},\n\nWhat you sent about a considered reply to a brief, from people who read the whole thing is now accepted.\n\nBendik Aagaard Lynghaug at bl@uhhm.no",
"subject": "UHHM: Accepted"
"body": "We want to take this on. Next we'll be in touch to talk through scope, timing and how we'll work together.",
"subject": "We'd like to take this on"
},
"declined": {
"body": "Hello {name},\n\nWhat you sent about a considered reply to a brief, from people who read the whole thing is now declined.\n\nBendik Aagaard Lynghaug at bl@uhhm.no",
"subject": "UHHM: Declined"
"body": "We've read your brief and this isn't one we're taking on. It isn't a judgment on the problem - just not a fit for us right now.",
"subject": "On your brief"
},
"open": {
"body": "Hello {name},\n\nWe have received what you sent about a considered reply to a brief, from people who read the whole thing.\n\nWhat you can do next: {site}/decide/commission?chain={chain}&email={email}\n\nBendik Aagaard Lynghaug at bl@uhhm.no",
"subject": "UHHM: Open"
"body": "Your brief is in front of us. We read the whole thing before we reply, so it may take a few days - you'll hear from us either way.\n\nWhat you can do next: {site}/decide/commission?chain={chain}&email={email}",
"subject": "We have your brief"
}
},
"trials": {
"approved": {
"body": "Hello,\n\nWhat you sent about a first draft of a site for their own roles, built from their own words and approved by a person first is now approved.\n\nBendik Aagaard Lynghaug at bl@uhhm.no",
"subject": "UHHM: Approved"
"body": "Your draft is approved and on its way. We built it from your own words - have a look when it's ready and tell us what to change.",
"subject": "Your draft is approved"
},
"declined": {
"body": "Hello,\n\nWhat you sent about a first draft of a site for their own roles, built from their own words and approved by a person first is now declined.\n\nBendik Aagaard Lynghaug at bl@uhhm.no",
"subject": "UHHM: Declined"
"body": "We've decided not to build this draft. If the situation changes, get back in touch and we'll take another look.",
"subject": "On your draft"
},
"open": {
"body": "Hello,\n\nWe have received what you sent about a first draft of a site for their own roles, built from their own words and approved by a person first.\n\nBendik Aagaard Lynghaug at bl@uhhm.no",
"subject": "UHHM: Open"
"body": "We have what you sent. A person will read it and build your draft, or tell you why not - you'll hear from us either way.",
"subject": "We're looking at your draft"
},
"previewed": {
"body": "Hello,\n\nWhat you sent about a first draft of a site for their own roles, built from their own words and approved by a person first is now previewed.\n\nBendik Aagaard Lynghaug at bl@uhhm.no",
"subject": "UHHM: Previewed"
"body": "Your draft is ready to look at. It's built from your own words - the link below takes you straight to it.",
"subject": "Your draft is ready to view"
}
}
},
+501
View File
@@ -0,0 +1,501 @@
{
"aggregates.yaml": {
"custody_requests": {
"declined": {
"body": "We've read your message and decided this isn't something we can take on as custodians. If you think we've missed something, write back and tell us.",
"subject": "On your message to the custodians"
},
"open": {
"body": "Your message reached the custodians of the first node. We read everything that comes in - expect a real reply, not an autoresponder.",
"subject": "We have your message"
},
"resolved": {
"body": "This is resolved. Here's what we found and what we did about it - write back if it isn't settled from where you sit.",
"subject": "Your case is resolved"
}
},
"projects": {
"accepted": {
"body": "We want to take this on. Next we'll be in touch to talk through scope, timing and how we'll work together.",
"subject": "We'd like to take this on"
},
"declined": {
"body": "We've read your brief and this isn't one we're taking on. It isn't a judgment on the problem - just not a fit for us right now.",
"subject": "On your brief"
},
"open": {
"body": "Your brief is in front of us. We read the whole thing before we reply, so it may take a few days - you'll hear from us either way.\n\nWhat you can do next: {site}/decide/commission?chain={chain}&email={email}",
"subject": "We have your brief"
}
},
"trials": {
"approved": {
"body": "Your draft is approved and on its way. We built it from your own words - have a look when it's ready and tell us what to change.",
"subject": "Your draft is approved"
},
"declined": {
"body": "We've decided not to build this draft. If the situation changes, get back in touch and we'll take another look.",
"subject": "On your draft"
},
"open": {
"body": "We have what you sent. A person will read it and build your draft, or tell you why not - you'll hear from us either way.",
"subject": "We're looking at your draft"
},
"previewed": {
"body": "Your draft is ready to look at. It's built from your own words - the link below takes you straight to it.",
"subject": "Your draft is ready to view"
}
}
},
"questions/custodians/index.yaml": {
"buckets": {
"custody_requests": {
"description": "Cases from people who use, build on, or answer for something the redoal network touches, and need a custodian's word on it.",
"heading": "Custody cases waiting on you",
"moves": {
"in_dialogue->declined": "Close, no action",
"in_dialogue->resolved": "Mark resolved",
"open->declined": "Decline case",
"open->in_dialogue": "Open dialogue"
}
}
},
"confirm": "Confirm",
"description": "The desk for custodians: open custody cases, and the people invited to answer them.",
"invited": {
"description": "Custodians invited but not yet signed in.",
"done": "Signed in",
"heading": "Invited custodians"
},
"invites": {
"custodians": {
"button": "Invite custodian",
"description": "Give someone an account and a one-time link to join as a custodian.",
"form_title": "Invite a custodian",
"heading": "Bring in another custodian",
"labels": {
"email": "Email",
"name": "Name"
}
}
},
"links": {},
"question": "What is waiting on the custodians?"
},
"questions/decide/commission.yaml": {
"description": "",
"moves": {
"declined": {
"button": "Declined",
"description": "",
"heading": "Declined"
}
},
"question": "What would you like to do?"
},
"questions/decide/custody.yaml": {
"description": "",
"moves": {
"resolved": {
"button": "Resolved",
"description": "",
"heading": "Resolved"
}
},
"question": "What would you like to do?"
},
"questions/decide/subscribe.yaml": {
"description": "You're on our list. Change your mind whenever you like.",
"moves": {
"unsubscribed": {
"button": "Unsubscribe",
"description": "You'll stop hearing from us. Nothing else changes.",
"heading": "Stop getting notes from us"
}
},
"question": "Do you want to keep hearing from us?"
},
"questions/index.yaml": {
"description": "UHHM builds software for organisations that can say what problem they have, and keeps the redoal network underneath.",
"doors": {},
"needs": {
"collaborate": {
"button": "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.",
"encouragement": "A person reads this, not a form filter — worth the ten minutes.",
"form_description": "Tell us who you are and what kind of work you're after.",
"form_title": "Say hello",
"heading": "Work with us",
"hints": {
"email": "you@example.com",
"interest": "Backend work, or something design-heavy",
"name": "Your name",
"note": "A bit about what you'd want to work on, or a link to your work"
},
"icon": "handshake",
"labels": {
"email": "Email",
"interest": "What kind of work",
"name": "Name",
"note": "Tell us more"
},
"road_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.",
"road_icon": "route",
"road_title": "What happens next",
"who_description": "One of the owners reads this directly — for anything urgent, write to bl@uhhm.no.",
"who_icon": "user-check",
"who_title": "Who reads this"
},
"commission": {
"button": "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.",
"encouragement": "Someone here reads every brief in full before writing back.",
"form_description": "The more of the problem you put in, the better the reply.",
"form_title": "Tell us the problem",
"heading": "Have us build it: send the brief",
"hints": {
"email": "sara@company.com",
"name": "Sara Nilsen",
"org_contact": "Sara Nilsen, ops manager",
"organization": "Nilsen Transport AS",
"project": "Our drivers log hours on paper and it takes a day to get them into payroll."
},
"icon": "briefcase",
"labels": {
"email": "Your email",
"name": "Your name",
"org_contact": "Who we should talk to",
"organization": "Your organization",
"project": "The problem you want solved"
},
"road_description": "We read your brief and either take it on or tell you honestly if it's not a fit.",
"road_icon": "route",
"road_title": "What happens next",
"who_description": "One of the owners reads it; write to bl@uhhm.no if you'd rather reach us directly.",
"who_icon": "user-check",
"who_title": "Who reads this"
},
"custody": {
"button": "Send to a custodian",
"description": "UHHM hosts the redoal network's first node and answers for what it keeps. Write here if you run a node, build on the network, or want something it holds about you looked at.",
"encouragement": "A custodian reads every message that comes in here.",
"form_description": "Say which of the four it is, and what you need, in a few lines.",
"form_title": "Reach a custodian",
"heading": "You are on the redoal network: a node, an app, or a recording that concerns you",
"hints": {
"about": "We run our order system on a relay node and it's been dropping messages since Tuesday",
"email": "you@yourcompany.com",
"name": "Your name",
"what": "A relay node is misbehaving"
},
"icon": "shield",
"labels": {
"about": "What's going on",
"email": "Email",
"name": "Name",
"what": "In short"
},
"road_description": "A custodian opens a dialogue with you. A node gets its peer, a builder gets an answer, and something the network should not keep gets removed. Either way you hear what was decided.",
"road_icon": "route",
"road_title": "What happens next",
"who_description": "A custodian reads it directly; if it's urgent, write to bl@uhhm.no in the meantime.",
"who_icon": "user-check",
"who_title": "Who reads this"
},
"propose": {
"button": "Send change",
"description": "You have spotted a page on uhhm.no that should read differently, and you know roughly how.",
"encouragement": "Even a rough version helps — we can tidy the wording ourselves.",
"form_description": "Point us to the page and show us the change.",
"form_title": "Propose a change",
"heading": "Suggest a change to this website",
"hints": {
"email": "you@example.com",
"page": "questions/join/index.yaml",
"proposed_yaml": "heading: \"A clearer way to say this\"",
"rationale": "The current heading doesn't say what you actually get",
"submitted_by": "Your name"
},
"icon": "pencil",
"labels": {
"email": "Email",
"page": "Which page",
"proposed_yaml": "Your proposed text",
"rationale": "Why this is better",
"submitted_by": "Your name"
},
"road_description": "Someone here reads your proposal and either makes the change or explains why not. Either way, you'll hear back.",
"road_icon": "route",
"road_title": "What happens next",
"who_description": "An owner reads every proposal before anything changes — reach us at bl@uhhm.no if it's time-sensitive.",
"who_icon": "user-check",
"who_title": "Who reads this"
},
"subscribe": {
"button": "Sign up",
"description": "You'd rather hear from us now and then than check back on your own.",
"encouragement": "One click unsubscribes you later, no questions asked.",
"form_description": "Just your email, or your name too if you'd like.",
"form_title": "Stay in the loop",
"heading": "Hear from us now and then",
"hints": {
"email": "you@example.com",
"name": "Your name"
},
"icon": "mail",
"labels": {
"email": "Email",
"name": "Name"
},
"road_description": "You're on the list. We write when there's something worth saying, and you can leave the list whenever you like.",
"road_icon": "bell",
"road_title": "What happens next",
"who_description": "An owner sends these notes directly — write to bl@uhhm.no if you'd rather ask something first.",
"who_icon": "user-check",
"who_title": "Who reads this"
},
"trial": {
"button": "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.",
"encouragement": "A person looks at what you send before anything gets built.",
"form_description": "Answer in your own words - there's no wrong way to describe your business.",
"form_title": "Describe your business",
"heading": "See your own business as a site, before you buy anything",
"hints": {
"business": "Nilsen Transport AS",
"email": "sara@company.com",
"what_slows_us_down": "Approvals sit in someone's inbox for days before anyone acts on them.",
"what_we_do": "We move freight for local businesses and handle the paperwork for them.",
"what_we_keep_track_of": "Bookings, driver hours, and which loads are still waiting on a signature.",
"who_comes_to_us": "Local businesses that need something moved on short notice.",
"who_is_involved": "Drivers, dispatchers, and the customers waiting on their delivery."
},
"icon": "layers",
"labels": {
"business": "Your business",
"email": "Your email",
"what_slows_us_down": "What slows you down",
"what_we_do": "What you do",
"what_we_keep_track_of": "What you keep track of",
"who_comes_to_us": "Who comes to you",
"who_is_involved": "Who's involved"
},
"road_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.",
"road_icon": "route",
"road_title": "What happens next",
"who_description": "An owner looks at what you send; write to bl@uhhm.no if you'd rather reach us directly.",
"who_icon": "user-check",
"who_title": "Who reads this"
}
},
"opener": {
"description": "Two things, both built here and both running.",
"features": {
"redoal": {
"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.",
"heading": "A network that answers to you",
"icon": "waypoints"
},
"software": {
"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.",
"heading": "A considered reply to your brief, and software that fits the argument",
"icon": "layers"
}
},
"heading": "What UHHM does"
},
"question": "What is UHHM, and what can you get here?",
"shopping": {
"description": "Nothing to fill in here. What is already out in the world, and the network as it runs right now.",
"heading": "Have a look around first",
"items": {
"built": {
"description": "A few things already out in the world.",
"heading": "What we have built",
"icon": "hammer"
},
"voices": {
"description": "Straight from the relay, the first node of the network.",
"heading": "The redoal network, live",
"icon": "activity"
}
}
}
},
"questions/owners/index.yaml": {
"buckets": {
"applicants": {
"description": "People who've asked to build with us, waiting on a decision or already working alongside us.",
"heading": "People who want to build with us",
"moves": {
"active->declined": "End collaboration",
"active->departed": "Mark departed",
"invited->active": "Confirm active",
"invited->declined": "Withdraw invite",
"open->declined": "Decline applicant",
"open->invited": "Send invite"
}
},
"custody_requests": {
"description": "Questions and issues raised with the people who keep the first node - custodians handle these, but you can see where each one stands.",
"heading": "What's been raised with custodians",
"moves": {}
},
"development_proposals": {
"description": "Changes visitors have proposed for pages on this site, waiting on a yes or no.",
"heading": "Proposed changes to the site",
"moves": {
"open->approved": "Approve change",
"open->rejected": "Reject change"
}
},
"organizations": {
"description": "Organizations you've met, tracked from first contact through to client and beyond.",
"heading": "Organizations you're tracking",
"moves": {
"client->past_client": "Mark past client",
"prospect->client": "Mark as client",
"prospect->past_client": "Mark not pursued"
}
},
"projects": {
"description": "Briefs sent in by organizations with a problem they want solved.",
"heading": "Briefs waiting on a reply",
"moves": {
"open->accepted": "Accept brief",
"open->declined": "Decline brief"
}
},
"subscribers": {
"description": "People who want to hear from you now and then.",
"heading": "Who's hearing from you",
"moves": {
"open->unsubscribed": "Unsubscribe them"
}
},
"trials": {
"description": "Businesses who want to see their own workflow as a working site before committing to anything.",
"heading": "Trial sites in progress",
"moves": {
"approved->declined": "Decline trial",
"approved->previewed": "Mark previewed",
"open->approved": "Approve trial",
"open->declined": "Decline trial"
}
}
},
"confirm": "Confirm",
"description": "Everything waiting on you: briefs, trials, applicants, subscribers, and proposals, all in one place.",
"invited": {
"description": "People you've invited in, and whether they've taken it up yet.",
"done": "Taken up",
"heading": "Invites you've sent"
},
"invites": {
"custodians": {
"button": "Send invite",
"description": "Bring someone in to help keep the first node and answer for the network.",
"form_title": "Invite a custodian",
"heading": "Bring in a custodian",
"labels": {
"email": "Their email",
"name": "Their name"
}
},
"owners": {
"button": "Send invite",
"description": "Bring someone in to work this desk alongside you.",
"form_title": "Invite an owner",
"heading": "Bring in another owner",
"labels": {
"email": "Their email",
"name": "Their name"
}
}
},
"links": {
"prospect": {
"button": "Add prospect",
"description": "Write down an organization worth following up, and track it from first contact onward.",
"heading": "Track a new organization"
}
},
"question": "What's waiting on me today?"
},
"questions/owners/prospect-sent.yaml": {
"back": "Back to site",
"description": "Thanks — we've got your prospect written down, and it now moves through the desk with everything else we're tracking.",
"next_description": "An owner walks it from prospect to client, and on to past client, as the relationship moves.",
"next_heading": "It's on the desk now",
"question": "What happens to this now?"
},
"questions/owners/prospect.yaml": {
"button": "Add to prospects",
"description": "One line per organization worth watching, moved through the stages as things develop.",
"encouragement": "Takes a minute, and it's yours to update later.",
"form_description": "Name the organization and where things stand.",
"form_title": "New prospect",
"heading": "Keep an organization on your radar",
"hints": {
"contact": "met at the bakers' conference, [email protected]",
"name": "Nordvik Bakery",
"note": "wants a booking flow, follow up after harvest season"
},
"icon": "briefcase",
"labels": {
"contact": "Contact",
"name": "Organization",
"note": "Note"
},
"page_description": "Write down an organization worth following up, and move it through client and past client as things develop.",
"question": "Is there an organization I should be keeping track of?",
"road_description": "It sits as a prospect until something moves - then you mark it client, and later past client if the work ends.",
"road_icon": "route",
"road_title": "Moves as you update it",
"who_description": "Only you see this, so keep it wherever you check next.",
"who_icon": "user",
"who_title": "Just for you"
},
"questions/received/collaborate.yaml": {
"back": "Back to site",
"description": "Your note is in. An owner reads every one and will get back to you if there's a fit worth exploring.",
"next_description": "If it looks like a fit, we'll reach out to talk about where you could help.",
"next_heading": "We'll write if there's a fit",
"question": "What happens to what I just sent?"
},
"questions/received/commission.yaml": {
"back": "Back to home",
"description": "Your brief is in. An owner reads every commission end to end before replying.",
"next_description": "Expect a reply within a few working days, either way, straight to your inbox.",
"next_heading": "A real reply from someone who read it",
"question": "What happens now that we've sent our brief?"
},
"questions/received/custody.yaml": {
"back": "Back to the site",
"description": "A custodian reads every message about the redoal network and what it keeps.",
"next_description": "Expect a reply once your report has been looked at and the network checked.",
"next_heading": "A custodian is on it",
"question": "Who looks after what the network keeps?"
},
"questions/received/propose.yaml": {
"back": "Back home",
"description": "Your proposal is in. Someone here will read it and decide whether it fits before anything changes on the page.",
"next_description": "We'll write back once it's been read — approved and made live, or turned down with a reason.",
"next_heading": "A read, then a decision",
"question": "What happens to my proposal now?"
},
"questions/received/subscribe.yaml": {
"back": "Back to site",
"description": "You'll hear from us when there's something worth saying, not on a schedule.",
"next_description": "You're on the list. Every note has an unsubscribe link if it stops being useful.",
"next_heading": "You're on the list",
"question": "What happens now that I've subscribed?"
},
"questions/received/trial.yaml": {
"back": "Back to site",
"description": "We read every trial request ourselves before anything gets built.",
"next_description": "If it looks like a fit, we'll draft your site from your own words and send it back for your say before anything goes live.",
"next_heading": "A first draft, built from your own words",
"question": "What happens now that you've sent this?"
}
}
+42 -1
View File
@@ -934,6 +934,29 @@ pub fn merge_words(fallback: &Value, given: &Value) -> Value {
const SLOT: &str = "<WRITE";
/// A mail's link to the submitter's own move is structure, not
/// wording: a model told to keep it still drops it (Sonnet replaced
/// the whole line with a bare `{chain}`). Wherever the fallback body
/// had a `{site}/decide/…` line and the model's has none, the line is
/// put back at the end, and a `{chain}` left on a line of its own is
/// removed.
fn keep_links(fallback: &Value, merged: &mut Value) {
let (Some(fb), Some(mb)) = (fallback.as_object(), merged.as_object_mut()) else { return };
for (bucket, stages) in fb {
let Some(ms) = mb.get_mut(bucket).and_then(Value::as_object_mut) else { continue };
for (stage, spec) in stages.as_object().into_iter().flatten() {
let Some(link) = spec["body"].as_str().and_then(|b| b.lines().find(|l| l.contains("{site}/decide/"))) else { continue };
let Some(body) = ms.get_mut(stage).and_then(|m| m.get_mut("body")) else { continue };
let Some(text) = body.as_str() else { continue };
if text.contains("/decide/") {
continue;
}
let kept: Vec<&str> = text.lines().filter(|l| l.trim() != "{chain}").collect();
*body = Value::String(format!("{}\n\n{link}", kept.join("\n").trim_end()));
}
}
}
/// The page's wording with every string replaced by a slot that says
/// what belongs there. Shown to the model in place of the fallbacks:
/// fallbacks read like finished copy, and a small model hands finished
@@ -1487,7 +1510,11 @@ pub fn run(argv: &[String]) -> anyhow::Result<()> {
std::fs::write(out.join(format!("llm/{:02}-{}.md", n + 1, path.replace('/', "_"))), format!("{prompt}\n\n=== REPLY ===\n{reply}"))?;
match first_object(&reply) {
Some(given) => {
words.insert(path.clone(), merge_words(fallback, &given));
let mut merged = merge_words(fallback, &given);
if path == "aggregates.yaml" {
keep_links(fallback, &mut merged);
}
words.insert(path.clone(), merged);
eprintln!("words: {path}");
}
None => eprintln!("words: {path} - no usable reply, keeping the fallback"),
@@ -1565,6 +1592,20 @@ mod tests {
assert!(serde_yaml::from_str::<Plan>(&no_from).unwrap().validate().unwrap_err().to_string().contains("mail: { from"));
}
#[test]
fn a_models_mail_keeps_the_submitters_link() {
let fallback = json!({ "leaks": { "open": { "subject": "s", "body": "Hello,\n\nGot it.\n\nWhat you can do next: {site}/decide/leak?chain={chain}&email={email}\n\nI at i@b.example" } } });
let mut merged = json!({ "leaks": { "open": { "subject": "Got it", "body": "Hi,\n\nWe have it.\n\n{chain}" } } });
keep_links(&fallback, &mut merged);
let body = merged["leaks"]["open"]["body"].as_str().unwrap();
assert!(body.ends_with("What you can do next: {site}/decide/leak?chain={chain}&email={email}"));
assert!(!body.contains("\n{chain}"));
// A body that kept its link is left alone.
let mut fine = json!({ "leaks": { "open": { "subject": "s", "body": "Withdraw here: {site}/decide/leak?chain={chain}&email={email}" } } });
keep_links(&fallback, &mut fine);
assert_eq!(fine["leaks"]["open"]["body"], "Withdraw here: {site}/decide/leak?chain={chain}&email={email}");
}
#[test]
fn a_live_sites_event_names_survive_a_rebuild() {
let mut n = need(&["open", "invited", "active", "departed", "declined"], &["departed", "declined"], &["departed"], &[]);