Meet Your Tech — Employee profile self-service with AI bio generation, headshot capture, and owner review · 14 screens across 4 sections
TransactionalEmail — SendGrid template
convex/integrations/transactionalEmail.ts · profileInviteEmail
| Name | Role | Status | Last Activity | Actions | |
|---|---|---|---|---|---|
| Mike R. | Lead Tech | Approved | Feb 24 | View | |
| Sarah K. | Sales Rep | Submitted | Feb 26 | Review | |
| James T. | Installer | In Progress | Feb 25 | Remind | |
| Tony M. | Dispatcher | Not Invited | — | Send Invite | |
| Ana P. | Crew Lead | Approved | Feb 22 | View | |
| Carlos V. | Door Knocker | Not Invited | — | Send Invite |
TeamProfilesDashboard
useQuery(api.teams.profileOnboarding.listTeamProfiles) · useMutation(api.teams.profileOnboarding.bulkSendProfileInvites)
InviteTeamMemberModal
useMutation(api.teams.profileOnboarding.generateProfileLink)
BulkInviteProgress toast
useMutation(api.teams.profileOnboarding.bulkSendProfileInvites) · onProgress callback
WelcomeLanding
useQuery(api.teams.profileOnboarding.getProfileOnboardingStatus)
This photo will appear on your ‘Meet Your Tech’ card
HeadshotCapture
useMutation(api.teams.profileOnboarding.saveHeadshot) · navigator.mediaDevices.getUserMedia()
This photo will appear on your ‘Meet Your Tech’ card
HeadshotPreview
useMutation(api.teams.profileOnboarding.saveHeadshot) · onConfirm callback
Answer 3 quick questions and we’ll create a professional bio for you
BioQAForm
useMutation(api.teams.profileOnboarding.saveBioQA) · useMutation(api.teams.profileOnboarding.generateAiBio)
BioPreview
useMutation(api.teams.profileOnboarding.saveBioDirect) · useQuery streaming response
This is exactly what homeowners will see before their appointment
ProfileSummaryCard
useMutation(api.teams.profileOnboarding.submitProfile) · ProfileProgress validation
PendingReviewsQueue
useQuery(api.teams.profileOnboarding.listPendingProfileReviews)
ProfileReviewDetail
useQuery(api.teams.profileOnboarding.getMemberForProfileReview) · useMutation(api.teams.profileOnboarding.reviewProfile)
RejectWithFeedbackModal
useMutation(api.teams.profileOnboarding.reviewProfile) · action: “reject”, rejectionReason
SubmissionSuccess
useMutation(api.teams.profileOnboarding.submitProfile) · onSuccess celebration