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
102 lines
3.1 KiB
Markdown
102 lines
3.1 KiB
Markdown
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 }
|