diff --git a/runs/uhhm-2026-09-23/README.md b/runs/uhhm-2026-09-23/README.md index dcf4062..4335237 100644 --- a/runs/uhhm-2026-09-23/README.md +++ b/runs/uhhm-2026-09-23/README.md @@ -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. diff --git a/runs/uhhm-2026-09-23/rated-mails-before/rate.json b/runs/uhhm-2026-09-23/rated-mails-before/rate.json new file mode 100644 index 0000000..a104cc7 --- /dev/null +++ b/runs/uhhm-2026-09-23/rated-mails-before/rate.json @@ -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 + } +} \ No newline at end of file diff --git a/runs/uhhm-2026-09-23/site/aggregates.yaml b/runs/uhhm-2026-09-23/site/aggregates.yaml index 3d3e78a..fbde157 100644 --- a/runs/uhhm-2026-09-23/site/aggregates.yaml +++ b/runs/uhhm-2026-09-23/site/aggregates.yaml @@ -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: diff --git a/runs/uhhm-2026-09-23/site/llm/01-aggregates.yaml.md b/runs/uhhm-2026-09-23/site/llm/01-aggregates.yaml.md new file mode 100644 index 0000000..0cf9c65 --- /dev/null +++ b/runs/uhhm-2026-09-23/site/llm/01-aggregates.yaml.md @@ -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 +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": "", + "subject": "" + }, + "open": { + "body": "", + "subject": "" + }, + "resolved": { + "body": "", + "subject": "" + } + }, + "projects": { + "accepted": { + "body": "", + "subject": "" + }, + "declined": { + "body": "", + "subject": "" + }, + "open": { + "body": "", + "subject": "" + } + }, + "trials": { + "approved": { + "body": "", + "subject": "" + }, + "declined": { + "body": "", + "subject": "" + }, + "open": { + "body": "", + "subject": "" + }, + "previewed": { + "body": "", + "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" + } + } +} +``` diff --git a/runs/uhhm-2026-09-23/site/llm/01-questions_build_index.yaml.md b/runs/uhhm-2026-09-23/site/llm/01-questions_build_index.yaml.md deleted file mode 100644 index 8517c6a..0000000 --- a/runs/uhhm-2026-09-23/site/llm/01-questions_build_index.yaml.md +++ /dev/null @@ -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 -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": "", - "needs": { - "commission": { - "button": "", - "description": "", - "encouragement": "", - "form_description": "", - "form_title": "", - "heading": "", - "hints": { - "email": "", - "name": "", - "org_contact": "", - "organization": "", - "project": "" - }, - "icon": "", - "labels": { - "email": "", - "name": "", - "org_contact": "", - "organization": "", - "project": "" - }, - "road_description": "", - "road_icon": "", - "road_title": "", - "who_description": "", - "who_icon": "", - "who_title": "" - }, - "trial": { - "button": "", - "description": "", - "encouragement": "", - "form_description": "", - "form_title": "", - "heading": "", - "hints": { - "business": "", - "email": "", - "what_slows_us_down": "", - "what_we_do": "", - "what_we_keep_track_of": "", - "who_comes_to_us": "", - "who_is_involved": "" - }, - "icon": "", - "labels": { - "business": "", - "email": "", - "what_slows_us_down": "", - "what_we_do": "", - "what_we_keep_track_of": "", - "who_comes_to_us": "", - "who_is_involved": "" - }, - "road_description": "", - "road_icon": "", - "road_title": "", - "who_description": "", - "who_icon": "", - "who_title": "" - } - }, - "question": "" -} - -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?" -} -``` diff --git a/runs/uhhm-2026-09-23/site/llm/02-questions_custodians_index.yaml.md b/runs/uhhm-2026-09-23/site/llm/02-questions_custodians_index.yaml.md deleted file mode 100644 index c9aeeb9..0000000 --- a/runs/uhhm-2026-09-23/site/llm/02-questions_custodians_index.yaml.md +++ /dev/null @@ -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 -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": "", - "heading": "", - "moves": { - "in_dialogue->declined": "declined>", - "in_dialogue->resolved": "resolved>", - "open->declined": "declined>", - "open->in_dialogue": "in_dialogue>" - } - } - }, - "confirm": "", - "description": "", - "invited": { - "description": "", - "done": "", - "heading": "" - }, - "invites": { - "custodians": { - "button": "", - "description": "", - "form_title": "", - "heading": "", - "labels": { - "email": "", - "name": "" - } - } - }, - "links": {}, - "question": "" -} - -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?" -} -``` diff --git a/runs/uhhm-2026-09-23/site/llm/03-questions_decide_subscribe.yaml.md b/runs/uhhm-2026-09-23/site/llm/03-questions_decide_subscribe.yaml.md deleted file mode 100644 index 729c7c0..0000000 --- a/runs/uhhm-2026-09-23/site/llm/03-questions_decide_subscribe.yaml.md +++ /dev/null @@ -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 -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": "", - "moves": { - "unsubscribed": { - "button": "", - "description": "", - "heading": "" - } - }, - "question": "" -} - -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?" -} -``` diff --git a/runs/uhhm-2026-09-23/site/llm/04-questions_index.yaml.md b/runs/uhhm-2026-09-23/site/llm/04-questions_index.yaml.md deleted file mode 100644 index e11b912..0000000 --- a/runs/uhhm-2026-09-23/site/llm/04-questions_index.yaml.md +++ /dev/null @@ -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 -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": "", - "doors": { - "build": { - "button": "", - "description": "", - "for_whom": "", - "heading": "", - "icon": "" - }, - "join": { - "button": "", - "description": "", - "for_whom": "", - "heading": "", - "icon": "" - } - }, - "needs": { - "custody": { - "button": "", - "description": "", - "encouragement": "", - "form_description": "", - "form_title": "", - "heading": "", - "hints": { - "about": "", - "email": "", - "name": "", - "what": "" - }, - "icon": "", - "labels": { - "about": "", - "email": "", - "name": "", - "what": "" - }, - "road_description": "", - "road_icon": "", - "road_title": "", - "who_description": "", - "who_icon": "", - "who_title": "" - } - }, - "question": "" -} - -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?" -} -``` diff --git a/runs/uhhm-2026-09-23/site/llm/05-questions_join_index.yaml.md b/runs/uhhm-2026-09-23/site/llm/05-questions_join_index.yaml.md deleted file mode 100644 index 493c581..0000000 --- a/runs/uhhm-2026-09-23/site/llm/05-questions_join_index.yaml.md +++ /dev/null @@ -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 -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": "", - "needs": { - "collaborate": { - "button": "", - "description": "", - "encouragement": "", - "form_description": "", - "form_title": "", - "heading": "", - "hints": { - "email": "", - "interest": "", - "name": "", - "note": "" - }, - "icon": "", - "labels": { - "email": "", - "interest": "", - "name": "", - "note": "" - }, - "road_description": "", - "road_icon": "", - "road_title": "", - "who_description": "", - "who_icon": "", - "who_title": "" - }, - "propose": { - "button": "", - "description": "", - "encouragement": "", - "form_description": "", - "form_title": "", - "heading": "", - "hints": { - "email": "", - "page": "", - "proposed_yaml": "", - "rationale": "", - "submitted_by": "" - }, - "icon": "", - "labels": { - "email": "", - "page": "", - "proposed_yaml": "", - "rationale": "", - "submitted_by": "" - }, - "road_description": "", - "road_icon": "", - "road_title": "", - "who_description": "", - "who_icon": "", - "who_title": "" - }, - "subscribe": { - "button": "", - "description": "", - "encouragement": "", - "form_description": "", - "form_title": "", - "heading": "", - "hints": { - "email": "", - "name": "" - }, - "icon": "", - "labels": { - "email": "", - "name": "" - }, - "road_description": "", - "road_icon": "", - "road_title": "", - "who_description": "", - "who_icon": "", - "who_title": "" - } - }, - "question": "" -} - -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?" -} -``` diff --git a/runs/uhhm-2026-09-23/site/llm/06-questions_owners_index.yaml.md b/runs/uhhm-2026-09-23/site/llm/06-questions_owners_index.yaml.md deleted file mode 100644 index 56e3fe7..0000000 --- a/runs/uhhm-2026-09-23/site/llm/06-questions_owners_index.yaml.md +++ /dev/null @@ -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 -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": "", - "heading": "", - "moves": { - "active->declined": "declined>", - "active->departed": "departed>", - "invited->active": "active>", - "invited->declined": "declined>", - "open->declined": "declined>", - "open->invited": "invited>" - } - }, - "custody_requests": { - "description": "", - "heading": "", - "moves": {} - }, - "development_proposals": { - "description": "", - "heading": "", - "moves": { - "open->approved": "approved>", - "open->rejected": "rejected>" - } - }, - "organizations": { - "description": "", - "heading": "", - "moves": { - "client->past_client": "past_client>", - "prospect->client": "client>", - "prospect->past_client": "past_client>" - } - }, - "projects": { - "description": "", - "heading": "", - "moves": { - "open->accepted": "accepted>", - "open->declined": "declined>" - } - }, - "subscribers": { - "description": "", - "heading": "", - "moves": { - "open->unsubscribed": "unsubscribed>" - } - }, - "trials": { - "description": "", - "heading": "", - "moves": { - "approved->declined": "declined>", - "approved->previewed": "previewed>", - "open->approved": "approved>", - "open->declined": "declined>" - } - } - }, - "confirm": "", - "description": "", - "invited": { - "description": "", - "done": "", - "heading": "" - }, - "invites": { - "custodians": { - "button": "", - "description": "", - "form_title": "", - "heading": "", - "labels": { - "email": "", - "name": "" - } - }, - "owners": { - "button": "", - "description": "", - "form_title": "", - "heading": "", - "labels": { - "email": "", - "name": "" - } - } - }, - "links": { - "prospect": { - "button": "", - "description": "", - "heading": "" - } - }, - "question": "" -} - -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?" -} diff --git a/runs/uhhm-2026-09-23/site/llm/07-questions_owners_prospect-sent.yaml.md b/runs/uhhm-2026-09-23/site/llm/07-questions_owners_prospect-sent.yaml.md deleted file mode 100644 index 2bc4507..0000000 --- a/runs/uhhm-2026-09-23/site/llm/07-questions_owners_prospect-sent.yaml.md +++ /dev/null @@ -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 -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": "", - "description": "", - "next_description": "", - "next_heading": "", - "question": "" -} - -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?" -} -``` diff --git a/runs/uhhm-2026-09-23/site/llm/08-questions_owners_prospect.yaml.md b/runs/uhhm-2026-09-23/site/llm/08-questions_owners_prospect.yaml.md deleted file mode 100644 index 290d1f2..0000000 --- a/runs/uhhm-2026-09-23/site/llm/08-questions_owners_prospect.yaml.md +++ /dev/null @@ -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 -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": "", - "description": "", - "encouragement": "", - "form_description": "", - "form_title": "", - "heading": "", - "hints": { - "contact": "", - "name": "", - "note": "" - }, - "icon": "", - "labels": { - "contact": "", - "name": "", - "note": "" - }, - "page_description": "", - "question": "", - "road_description": "", - "road_icon": "", - "road_title": "", - "who_description": "", - "who_icon": "", - "who_title": "" -} - -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" -} -``` diff --git a/runs/uhhm-2026-09-23/site/llm/09-questions_received_collaborate.yaml.md b/runs/uhhm-2026-09-23/site/llm/09-questions_received_collaborate.yaml.md deleted file mode 100644 index 6f83c69..0000000 --- a/runs/uhhm-2026-09-23/site/llm/09-questions_received_collaborate.yaml.md +++ /dev/null @@ -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 -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": "", - "description": "", - "next_description": "", - "next_heading": "", - "question": "" -} - -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?" -} -``` diff --git a/runs/uhhm-2026-09-23/site/llm/10-questions_received_commission.yaml.md b/runs/uhhm-2026-09-23/site/llm/10-questions_received_commission.yaml.md deleted file mode 100644 index 225f61e..0000000 --- a/runs/uhhm-2026-09-23/site/llm/10-questions_received_commission.yaml.md +++ /dev/null @@ -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 -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": "", - "description": "", - "next_description": "", - "next_heading": "", - "question": "" -} - -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?" -} -``` diff --git a/runs/uhhm-2026-09-23/site/llm/11-questions_received_custody.yaml.md b/runs/uhhm-2026-09-23/site/llm/11-questions_received_custody.yaml.md deleted file mode 100644 index ee326dc..0000000 --- a/runs/uhhm-2026-09-23/site/llm/11-questions_received_custody.yaml.md +++ /dev/null @@ -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 -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": "", - "description": "", - "next_description": "", - "next_heading": "", - "question": "" -} - -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?" -} -``` diff --git a/runs/uhhm-2026-09-23/site/llm/12-questions_received_propose.yaml.md b/runs/uhhm-2026-09-23/site/llm/12-questions_received_propose.yaml.md deleted file mode 100644 index 1ddaf45..0000000 --- a/runs/uhhm-2026-09-23/site/llm/12-questions_received_propose.yaml.md +++ /dev/null @@ -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 -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": "", - "description": "", - "next_description": "", - "next_heading": "", - "question": "" -} - -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?" -} -``` diff --git a/runs/uhhm-2026-09-23/site/llm/13-questions_received_subscribe.yaml.md b/runs/uhhm-2026-09-23/site/llm/13-questions_received_subscribe.yaml.md deleted file mode 100644 index 2760f6f..0000000 --- a/runs/uhhm-2026-09-23/site/llm/13-questions_received_subscribe.yaml.md +++ /dev/null @@ -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 -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": "", - "description": "", - "next_description": "", - "next_heading": "", - "question": "" -} - -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?" -} -``` diff --git a/runs/uhhm-2026-09-23/site/llm/14-questions_received_trial.yaml.md b/runs/uhhm-2026-09-23/site/llm/14-questions_received_trial.yaml.md deleted file mode 100644 index 062e729..0000000 --- a/runs/uhhm-2026-09-23/site/llm/14-questions_received_trial.yaml.md +++ /dev/null @@ -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 -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": "", - "description": "", - "next_description": "", - "next_heading": "", - "question": "" -} - -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?" -} -``` diff --git a/runs/uhhm-2026-09-23/site/words.json b/runs/uhhm-2026-09-23/site/words.json index 70e6274..3a53bd4 100644 --- a/runs/uhhm-2026-09-23/site/words.json +++ b/runs/uhhm-2026-09-23/site/words.json @@ -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" } } }, diff --git a/runs/uhhm-2026-09-23/words-r7.json b/runs/uhhm-2026-09-23/words-r7.json new file mode 100644 index 0000000..3a53bd4 --- /dev/null +++ b/runs/uhhm-2026-09-23/words-r7.json @@ -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?" + } +} \ No newline at end of file diff --git a/src/build.rs b/src/build.rs index 6732a87..b434102 100644 --- a/src/build.rs +++ b/src/build.rs @@ -934,6 +934,29 @@ pub fn merge_words(fallback: &Value, given: &Value) -> Value { const SLOT: &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::(&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"], &[]);