Files
Jules a7e5eedf35 feat: add "How did you first hear about Logos?" field to funnel forms
* feat: add @repo/funnel package for shared hear-about constants

Single source of truth for the "How did you first hear about Logos?"
question, options, and id -> label map used by apps/web and apps/civi-crm.

* feat: map hear-about answer to a Notion select on intake

Unknown option ids are dropped so tampering cannot create new select
options; field defs without a CiviCRM fieldName are skipped in
buildAfformValues so the Afform payload is unchanged.

* feat: add required hear-about field to the three funnel forms

Injected below the chat name/service row on coalition-partner,
activist-builder and activist-leader-steward. Web/Notion-only: defs
without a fieldName are filtered out of the CiviCRM fields payload.

* docs: document hear-about field in funnel reference

* refactor: extract resolveHearAboutLabel from Notion builder

Share the option-id -> label resolution so the route can reuse the
builder's exact accept/write predicate.

* fix: enforce required hear-about field server-side

Reject funnel submissions whose hear-about answer is missing or not a
known option id, instead of relying on client-side validation alone.
2026-07-08 19:39:42 +09:00

19 lines
448 B
JSON

{
"name": "@repo/funnel",
"private": true,
"type": "module",
"exports": {
".": "./src/index.ts"
},
"scripts": {
"lint": "eslint . --config ../../packages/config/eslint/base.mjs --max-warnings 0",
"lint:fix": "eslint . --config ../../packages/config/eslint/base.mjs --fix",
"check-types": "tsc --noEmit"
},
"devDependencies": {
"@types/node": "^24.12.4",
"eslint": "^10.2.1",
"typescript": "^6.0.3"
}
}