CatalyzeUpDocs
impact pulse / product

Implementation Status

Implementation Status

Audit of all product specs against the actual codebase as of April 2026. Each feature is marked as implemented, partially implemented, or not yet implemented.

Surveys (Core)

Feature Status Notes
Create survey with questions Done POST /surveys with inline questions
Survey types: BOOLEAN, TEXT, RATING, MULTIPLE_CHOICE Done All 4 types work
Survey statuses: DRAFT, PUBLISHED, CLOSED Done Status transitions enforced
Public survey link (public_id) Done GET /surveys/public/{publicId}
Survey sharing page with copy link + QR code Done SurveySharePage
Survey preview (read-only) Done SurveyPreviewPage
Delete survey (cascades to questions + responses) Done DELETE /surveys/{id}
Question immutability when responses exist Done 409 on add/delete; DELETE /responses to unlock
Require email from respondents Done Backend enforced (422 if missing)
Survey builder v2 (two-panel layout) Done Question outline + editor, group management
Admin test mode (take without saving) Done AdminTestPage, client-side scoring

Question Groups & Structured Assessments

Feature Status Notes
QuestionGroup model (id, name, order, color, description) Done Embedded in survey document
Question group_id, weight, rating_labels Done Per-question fields
Result types: flat, pyramid, radar, breakdown Done result_type on survey
Group scoring aggregation Done aggregate_group_scores in scoring.py
Group-per-page survey taking Done SurveyTakePage switches on question_groups
Pyramid visualization Done PyramidVisualization component
Radar visualization Done RadarVisualization component
Grouped breakdown visualization Done GroupedBreakdown component
Survey templates (maslow-needs-v1) Done Template catalog + create-from-template endpoint
Team Health Check template Not done Template data not created yet
Program Impact Baseline template Not done Template data not created yet

Scoring

Feature Status Notes
direct_scale scoring Done (rating / max) * weight
binary scoring Done true_value / false_value
weighted_options scoring Done Per-option point values
multi_select_sum scoring Not done Model exists, no implementation
qualitative (no scoring) Done Text questions excluded from scoring
Question weight multiplier Done weight field on questions
Per-question scoring config Done scoring_config stored per question
Score on response submission Done Auto-calculated server-side
Score breakdown per question Done score_breakdown in response

Impact Comparison

Feature Status Notes
First attempt vs latest attempt comparison Done GET /surveys/{id}/impact
Per-respondent delta calculation Done Baseline vs latest scores
Per-question delta with direction (improved/declined/unchanged) Done Direction classification
Aggregate org-level stats Done Average baseline, latest, delta
Auto-generated summary text Done Human-readable narrative
Impact report page (frontend) Done ImpactReportPage with bar charts
Respondents with 1 attempt excluded Done Only multi-attempt respondents

Organizations

Feature Status Notes
Create/update/delete organization Done Full CRUD
Role hierarchy: OWNER, ADMIN, MEMBER Done Enforced at route level
Invite members via email Done Creates invitation with token
Accept invitation (with token) Done AcceptInvitationPage
Cancel/resend invitations Done Delete and resend endpoints
Member role management Done Owner can change roles
Remove members (cannot remove OWNER) Done Enforced
Organization detail page with tabs Done Members, Surveys, Invitations tabs
Org-scoped survey listing Done Surveys filtered by org
Bulk invite (multiple emails) Partial API supports it, no CSV upload UI
Organization settings (timezone, locale) Model only Settings model exists, no UI
Organization logo/branding Not done
Department/team tags Not done
Data export (CSV/PDF) Not done

Survey Assignments

Feature Status Notes
Assign members to surveys (bulk) Done POST /assign with member_ids
Unassign member Done DELETE /assign/{member_id}
Assignment status tracking (PENDING/COMPLETED/OVERDUE/WAIVED) Done Status field on assignment
My assignments on dashboard Done GET /me/assignments
Overdue assignments view Done GET /organizations/{id}/overdue
Extend due date Done POST /extend with days
Waive assignment Done POST /waive
Send manual reminder Done POST /remind
Assignment auto-update on response submission Done Status set to COMPLETED
Recurrence auto-reset after completion Done next_due_date calculated

Sessions & Multi-Attempt

Feature Status Notes
Start session (creates attempt) Done POST /sessions/start
Auto-save progress Done PUT /sessions/{id}/save
Complete session (creates response) Done POST /sessions/{id}/complete
Abandon session Done POST /sessions/{id}/abandon
Session history per survey Done GET /surveys/{id}/sessions
Resume in-progress session Done can_resume check (24h window)
Attempt numbering (sequential) Done attempt_number field
Check if user can attempt Done GET /surveys/{id}/can-attempt
Session stats Done GET /surveys/{id}/sessions/stats
Time tracking (time_spent_seconds) Done Tracked per session
Progress percentage Done calculate_progress method
LocalStorage auto-save fallback (frontend) Done SurveyTakePage
Side-by-side attempt comparison Not done Model exists, no UI

Reminders & Notifications

Feature Status Notes
Reminder engine (background loop) Done Runs every 60s, checks due assignments
3-level escalating reminders Done Based on survey reminder_intervals
OVERDUE flagging after all reminders sent Done Status set to OVERDUE
Notification preferences (email toggle, frequency) Done GET/PUT /notifications/preferences
Quiet hours with timezone Done Preferences model + engine respects them
Per-survey mute/unmute Done POST /mute-survey, /unmute-survey
One-click unsubscribe (no auth) Done GET /unsubscribe?token=
Email templates (verification, invitation, reset, reminder) Done 4 HTML templates
Manual reminder sending (admin) Done POST /remind on assignment
Incomplete survey reminders (drip for in-progress) Not done Only assignment-based reminders exist

Authentication

Feature Status Notes
Email/password registration Done With password validation
Email/password login (JWT) Done Returns access_token
Google OAuth Done Full flow with callback
Email verification Done Sends verification email, verifies token
Forgot/reset password Done Token-based flow
Session tokens (Redis) Done Dual auth (JWT + session)
Protected routes (frontend) Done ProtectedRoute wrapper

Dashboard

Feature Status Notes
Stats cards (surveys, responses, members, avg impact) Done GET /dashboard/stats
Recent surveys list Done Top 10 with status/count
My organizations list Done With member count and role
My assigned surveys Done From assignments API
Organization analytics (aggregate scores, trends) Not done
Export reports (CSV/PDF) Not done

Multi-Language (i18n)

Feature Status Notes
Platform UI translation Not done Spec exists (multi-language.md)
Survey content translation Not done Translation fields spec'd
AI translation agent Not done
RTL support Not done
Language picker Not done

Features Not Yet Started

These are spec'd but have zero implementation:

  • Campaign system (model exists, no routes)
  • Contact management in orgs (model exists, no routes)
  • Conditional question logic (show/hide based on answers)
  • Advanced user profiles (avatar, bio, department, job_title)
  • Account lockout/security (failed attempts tracking)
  • Gamification (streaks, badges, leaderboards)
  • Offline capability
  • Push notifications
  • Calendar integration
  • SSO (Okta, Auth0)
  • Subscription tiers / billing
  • Global Happiness Index / country benchmarking

Summary

Category Done Partial Not Done
Surveys (core) 11 0 0
Groups & Assessments 9 0 2
Scoring 7 0 1
Impact Comparison 7 0 0
Organizations 10 1 3
Assignments 10 0 0
Sessions 12 0 1
Reminders 9 0 1
Auth 7 0 0
Dashboard 4 0 2
Multi-Language 0 0 5
Total 86 1 15