From 92666990038699ebc05cbe1b9231596d8cb8a38b Mon Sep 17 00:00:00 2001 From: Bendik Aagaard Lynghaug Date: Mon, 21 Sep 2026 16:29:14 +0200 Subject: [PATCH] needs.yaml: what UHHM needs this site to do, as a checkable spec Five needs (commission, follow, collaborate, improve-site as planned, track-prospect) and nine personas in their own words, for portal's question_lint needs pass (uhhm/portal 188f9bf). The runtime never reads this file; older lint binaries ignore it. Co-Authored-By: Claude Fable 5.1 Claude-Session: https://claude.ai/code/session_01L4jrCgLiKKHAEFuZUJjckH --- needs.yaml | 127 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 127 insertions(+) create mode 100644 needs.yaml diff --git a/needs.yaml b/needs.yaml new file mode 100644 index 0000000..a8ab2fe --- /dev/null +++ b/needs.yaml @@ -0,0 +1,127 @@ +# What UHHM, as a business, needs this site to do - stated apart from +# how the pages word it. `question_lint` checks every need against the +# pages and aggregates.yaml (portal `src/needs.rs`): a path of +# submissions gets the visitor's answer into `lands_in` within the +# effort budget, `handled_by` has a desk over that bucket, and every +# `done_when` state is reachable through the moves the desk offers. +# +# The personas are visitors in their own words - never the site's. +# `question_lint --needs-tasks` turns each page on their path into a +# typed choice for an answering engine; `--needs-score` grades its +# picks. A misroute means the page said one thing and they heard +# another. The runtime never reads this file. +needs: + - id: commission + who: someone with a problem software could solve, and a budget + wants: UHHM to take the work on + via: Good software begins with a clear argument + lands_in: projects + handled_by: owners + done_when: [accepted, declined] + max_steps: 1 + # name, email, the build, the organization - the page argues for + # each of the four; a fifth would need the same argument. + max_fields: 4 + + - id: follow + who: someone curious who isn't ready to get involved + wants: to hear when something ships + via: Attention is earned + lands_in: subscribers + handled_by: owners + # Being on the list is the finished state; leaving is theirs to do. + done_when: [open, unsubscribed] + max_steps: 1 + max_fields: 2 + + - id: collaborate + who: a developer, designer or researcher + wants: to work with UHHM + via: Work happens through dialogue, not tickets + lands_in: applicants + handled_by: owners + done_when: [active, declined] + max_steps: 1 + max_fields: 3 + + - id: improve-site + who: anyone using this site + wants: the site itself to change + enters: /develop/proposal + # Announced, not open: the automation that turns a proposal into a + # pull request is still being built, so the alternative is disabled. + planned: true + lands_in: development_proposals + handled_by: owners + done_when: [approved, rejected] + max_steps: 1 + max_fields: 3 + + - id: track-prospect + who: an owner who met an organization worth following up + wants: the relationship written down and walked to an outcome + enters: /review + enters_as: owners + via: Record a prospect + lands_in: organizations + handled_by: owners + done_when: [client, past_client] + max_steps: 1 + max_fields: 2 + +personas: + - id: architecture-firm + need: commission + text: > + We run a small architecture firm and our project files are + scattered across three cloud drives. We want to pay someone to + set up proper storage and backups we control ourselves. + + - id: climbing-gym-founder + need: commission + text: > + I have an idea for a booking app for climbing gyms and I'm + looking for a team that can build the first version with me. + + - id: municipality-buyer + need: commission + text: > + Our municipality needs an internal tool for tracking building + permits. We are looking for a vendor who can scope it and + deliver it. + + - id: exhibition-visitor + need: follow + text: > + I saw your drawing network at an exhibition and liked it. I don't + want to get involved, I'd just like to know when there is news. + + - id: tech-journalist + need: follow + text: > + I write about Nordic technology. Keep me posted on what you + release so I can cover it. + + - id: rust-developer + need: collaborate + text: > + I'm a Rust developer between jobs and I like that you build in + the open. I would love to contribute, and maybe join you. + + - id: interaction-designer + need: collaborate + text: > + I'm an interaction designer. I want to work with you on the + drawing interface. + + - id: student-intern + need: collaborate + text: > + I'm a computer science student looking for a summer internship + doing infrastructure work. + + - id: site-critic + need: improve-site + text: > + Your contact form never says how long a reply takes. You should + add that.