Add portal_project_inquiries/portal_subscribers durable storage, review dashboard alternatives, newsletter compose
Lint and reload / lint-and-reload (push) Successful in 3s

- index.yaml: record_as on "I want something built" and "Keep me
  posted" - those submissions previously only existed as a NATS
  event, nothing durable, despite promising a reply/subscription.
- review.yaml: consolidated into one dashboard question with four
  alternatives (Applicants, Inquiries, Subscribers, Compose
  newsletter) rather than separate pages per resource.
- Compose newsletter has no record_as/resource of its own - an
  automation (n8n) filters portal.answers.submitted directly for
  question_id == "/review" && alternative == "Compose newsletter",
  matching events.rs's own "gain a second subscriber" design.
- lint.sh: allow type: prosekit (the new rich-text requirement kind).
This commit is contained in:
Bendik Aagaard Lynghaug
2026-08-05 13:46:17 +02:00
parent 1f0d930768
commit 6ed0b65bc2
3 changed files with 47 additions and 8 deletions
+7 -6
View File
@@ -39,15 +39,16 @@ for f in "$dir"/*.yaml; do
fail=1
fi
# "textarea" and "file" are the two values content.rs special-cases;
# anything else is passed straight through as an HTML <input type>
# attribute, so this is the real set of valid values, not a guess.
# "textarea", "file", and "prosekit" are the three values
# content.rs/app.rs special-case; anything else is passed straight
# through as an HTML <input type> attribute, so this is the real set
# of valid values, not a guess.
bad_types=$(jq -r '
[.alternatives[]?.features[]?.requirements[]?
| select(.type != null and (.type | IN(
"text", "textarea", "file", "email", "tel", "url", "number",
"password", "date", "datetime-local", "time", "month", "week",
"color", "range", "checkbox", "radio", "hidden", "search"
"text", "textarea", "file", "prosekit", "email", "tel", "url",
"number", "password", "date", "datetime-local", "time", "month",
"week", "color", "range", "checkbox", "radio", "hidden", "search"
) | not))
| .type]
| unique | .[]
+2
View File
@@ -9,6 +9,7 @@ alternatives:
reads the whole brief before answering.
action: /project
consequence: [Tell us what you're after]
record_as: portal_project_inquiries
encouragements:
- We read every word before breaking ground.
features:
@@ -31,6 +32,7 @@ alternatives:
there's something worth saying.
action: /subscribed
consequence: [Subscribe]
record_as: portal_subscribers
encouragements:
- Consider yourself posted.
features:
+38 -2
View File
@@ -1,9 +1,9 @@
id: /review
route: ^/review
name: Who's applied?
name: The review desk
qualifies: owners
description: >
Sign in as an organizational owner to see who's applied.
Sign in as an organizational owner to see what's come in.
alternatives:
- name: Applicants
description: ""
@@ -18,3 +18,39 @@ alternatives:
label: Invite
- to: declined
label: Decline
- name: Inquiries
description: ""
features:
- name: ""
description: ""
resource:
bucket: portal_project_inquiries
requires_group: owners
transitions:
- to: handled
label: Mark handled
- name: Subscribers
description: ""
features:
- name: ""
description: ""
resource:
bucket: portal_subscribers
requires_group: owners
- name: Compose newsletter
description: >
Sends to everyone in Subscribers - picked up by an automation
watching this question, not portal itself.
consequence: [Send]
features:
- name: ""
description: ""
requirements:
- name: subject
label: Subject
- name: body
label: Body
type: prosekit