Commit graph

2 commits

Author SHA1 Message Date
Randall Stillwell
3e0a4458fe Add unified field mapping UI for integrations
Adds a reusable FieldMappingEditor component to the integration
detail page that works across all providers (Monday.com, Google
Sheets, Airtable, Planning Center). Users can visually map card
fields (core + dynamic FormTemplate fields) to external columns.

- New GET /api/integrations/source-fields returns curated core
  card fields plus the org's default FormTemplate dynamic fields
  (prefixed with fieldData.)
- flattenCardFieldData helper hoists fieldData entries to top-
  level keys before pushCard so dynamic fields are mappable
- Monday provider now upserts: re-syncing a card updates the
  existing item instead of creating duplicates, and the
  mondayItemId is persisted back to the ResponseCard

Made-with: Cursor
2026-04-17 15:53:49 -05:00
Randall Stillwell
a975043670 Add onboarding wizard, email verification, integration architecture, and settings restructure
- Auto-sign-in after registration instead of redirect to login
- Email verification system with token generation, send/confirm API routes, and persistent banner
- 7-step onboarding wizard (org, location, services, upload source, AI, integrations, complete)
- Middleware redirects owners with incomplete onboarding to /onboarding
- Integration provider plugin architecture with registry and 6 providers (Planning Center, Monday.com, Airtable, Google Sheets, Webhook, CSV Export)
- Full integration CRUD API with test, sync, fields, and OAuth authorize/callback routes
- Refactored fireIntegrationEvent to use Integration model with legacy AppSettings fallback
- Migration script for existing Monday.com/webhook config to Integration rows
- Settings page restructured from monolithic 1290-line file into focused sub-routes with section navigation
- Integration hub UI with provider tiles, connect flow, and individual config pages
- Post-onboarding contextual guidance cards on dashboard with dismissible hints
- Schema: Integration model, onboardingComplete/onboardingStep on Organization, dismissedHints on OrgMember

Made-with: Cursor
2026-04-15 01:29:13 -05:00