Work from another session, committed as found (tests green): - `plan` reads an intake into a plan.yaml (a model decides needs, stages, forms and budgets; a person reads the result before build). - Plans gain `doors` (a first question before the forms, when a front door would carry more than five needs), `groups` with labels that a select may draw its options from (`options_from: groups`), `private` fields kept off public pages, `multiple` selects, and `max_fields` as what the intake said the person will tolerate. - `card.rs`: an alternative as the visitor meets it, in text, so the answering visitor and `rate` read the served card, not the heading. - `rate` reads followup pages from the repo and reports "what happens next" as not measured rather than zero when it cannot. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01L4jrCgLiKKHAEFuZUJjckH
145 lines
4.9 KiB
YAML
145 lines
4.9 KiB
YAML
business: Nordvik Bygg
|
|
language: en
|
|
contact: { name: Ingrid Nordvik, email: ingrid@nordvikbygg.example }
|
|
|
|
about: >
|
|
We are twelve people. We survey old buildings, draw up rehabilitation
|
|
plans, handle the permit application, and do the building work with
|
|
our own carpenters plus subcontractors for electrical, plumbing and
|
|
scaffolding.
|
|
|
|
needs:
|
|
- id: enquiry
|
|
who: housing boards and private owners who have a problem with a building and want someone to look at it
|
|
wants: someone to look at the building and send a quote
|
|
lands_in: enquiry
|
|
handled_by: project_manager
|
|
stages: [open, surveyed, quoted, won, lost]
|
|
done_when: [won, lost]
|
|
success: [won]
|
|
skippable: []
|
|
moves_by: {}
|
|
watched_by: []
|
|
max_fields: 4
|
|
collects:
|
|
- { name: name }
|
|
- { name: phone, type: tel }
|
|
- { name: problem, type: textarea }
|
|
- { name: urgency, type: select, options: [This week, This month, No rush] }
|
|
|
|
- id: subcontractor_application
|
|
who: trade firms who want to be on our list of subcontractors
|
|
wants: to be on our list of subcontractors
|
|
lands_in: subcontractor
|
|
handled_by: project_manager
|
|
stages: [open, approved, rejected]
|
|
done_when: [approved, rejected]
|
|
success: [approved]
|
|
skippable: []
|
|
moves_by: {}
|
|
watched_by: []
|
|
max_fields: 5
|
|
collects:
|
|
- { name: company_name }
|
|
- { name: trade_approval }
|
|
- { name: insurance }
|
|
- { name: phone, type: tel }
|
|
- { name: email }
|
|
|
|
- id: job_application
|
|
who: carpenters and apprentices asking if we are hiring
|
|
wants: a job
|
|
lands_in: job_application
|
|
handled_by: project_manager
|
|
stages: [open, interviewed, hired, declined]
|
|
done_when: [hired, declined]
|
|
success: [hired]
|
|
skippable: []
|
|
moves_by: {}
|
|
watched_by: []
|
|
max_fields: 6
|
|
collects:
|
|
- { name: name }
|
|
- { name: phone, type: tel }
|
|
- { name: experience }
|
|
- { name: availability }
|
|
|
|
- id: site_incident
|
|
who: the crew, ours and the subcontractors' people, who report things
|
|
wants: for the safety officer to decide what is done about it and close it when it is fixed
|
|
lands_in: site_incident
|
|
handled_by: safety_officer
|
|
stages: [reported, decided, closed]
|
|
done_when: [closed]
|
|
success: [closed]
|
|
skippable: []
|
|
moves_by: {}
|
|
watched_by: []
|
|
max_fields: 3
|
|
collects:
|
|
- { name: description, type: textarea }
|
|
- { name: hazard_type, type: select, options: [Hazard, Near miss, Wrong materials] }
|
|
- { name: reported_by, type: text }
|
|
|
|
- id: permit_application
|
|
who: owners who already know what they want built and need drawings, a permit and a price
|
|
wants: drawings, a permit and a price
|
|
lands_in: permit
|
|
handled_by: project_manager
|
|
stages: [open, surveyed, quoted, won, lost]
|
|
done_when: [won, lost]
|
|
success: [won]
|
|
skippable: []
|
|
moves_by: {}
|
|
watched_by: []
|
|
max_fields: 5
|
|
collects:
|
|
- { name: name }
|
|
- { name: phone, type: tel }
|
|
- { name: problem, type: textarea }
|
|
- { name: urgency, type: select, options: [This week, This month, No rush] }
|
|
- { name: address }
|
|
|
|
# Held out from every model that writes words.
|
|
personas:
|
|
- id: housing-board-damp
|
|
need: win-survey-work
|
|
text: |
|
|
I chair the board of a housing cooperative from the seventies. Two ground-floor flats have damp in the walls and we don't know if it's drainage or the facade. We need someone to tell us.
|
|
- id: buyer-before-purchase
|
|
need: win-survey-work
|
|
text: |
|
|
We are about to buy an old timber house. Before we sign we want a professional to go through it and tell us what is wrong with it.
|
|
- id: attic-conversion
|
|
need: win-design-work
|
|
text: |
|
|
We want to turn our attic into two bedrooms and a bathroom. We need drawings and someone who handles the application to the municipality.
|
|
- id: shop-to-flat
|
|
need: win-design-work
|
|
text: |
|
|
I own a former shop on the ground floor and want to make it a flat. I have no idea what is allowed. Can you sort that out and give me a price?
|
|
- id: electrician-firm
|
|
need: vet-subcontractor
|
|
text: |
|
|
We are a four-person electrical firm, fully certified. We would like to get on your list so you call us when you need electricians.
|
|
- id: scaffolder
|
|
need: vet-subcontractor
|
|
text: |
|
|
I run a scaffolding company. How do I get to do jobs for you?
|
|
- id: carpenter-jobseeker
|
|
need: hire-crew
|
|
text: |
|
|
I'm a certified carpenter with eight years on rehabilitation jobs. Are you hiring?
|
|
- id: apprentice
|
|
need: hire-crew
|
|
text: |
|
|
I finish vocational school this spring and need an apprenticeship as a bricklayer.
|
|
- id: loose-railing
|
|
need: report-deviation
|
|
text: |
|
|
The railing on the third level of the scaffold on the north side is loose. Nobody got hurt but someone will.
|
|
- id: wrong-membrane
|
|
need: report-deviation
|
|
text: |
|
|
The bathroom membrane delivered today is not the one in the specification. We stopped work on it.
|