Questionnaires
Flow
- Admin creates a template at
/admin/questionnaires/new - Admin sends a questionnaire from the lead detail → QuickActions → "Send Questionnaire"
sendQuestionnaire(inapp/actions/questionnaires.ts) emails the client a token link and saves aquestionnaire_responsesrow to Supabase- Client fills the form at
/onboarding/[token]— no login required submitQuestionnairemarks the response complete and notifies admin- Lead status advances to
questionnaire
Data layer
- Templates:
lib/questionnaire-db.ts— Supabase CRUD (source of truth) - Responses: also in
lib/questionnaire-db.tsviagetResponseByToken - Legacy:
lib/questionnaire-data.tsstill exists but file-based helpers are unused — do not call them in new code
Types
// lib/questionnaire-types.ts
type QuestionnaireTemplate = { ... }
type QuestionnaireResponse = { ... }
Both use camelCase — the DB layer maps snake_case rows before returning.
Important
- Import template functions from
questionnaire-db.ts, never fromquestionnaire-data.ts 'use server'belongs only inapp/actions/—lib/files useimport 'server-only'