Real-time messaging between homeowners and contractors with attachments, AI assistant, and read receipts.
PosterMessages screen. Uses useQuery(api.poster.jobs.getMyJobs) and useQuery(api.messaging.messages.getUnreadCount). Filter tabs, SearchBar, ConversationItem cards with Avatar, unread badges, job tags.
Messages will appear here when you connect with contractors on your jobs.
EmptyState with IconCircle style C (hero), deepBlue CTA. Shown when jobsWithContractors.length === 0.
ContractorMessagesScreen. Uses useQuery(api.contractor.messages.listUnifiedInbox). Terracotta header, DM/Q&A type badges, AI Chat button, filter pills, unread counts.
PosterConversationScreen. Uses useQuery(api.messaging.messages.listForJob), useMutation(api.messaging.messages.send). DeepBlue sent bubbles, Avatar+online dot, job context bar, system pill, read receipts.
ContractorConversationScreen. Terracotta sent bubbles, quote/bid card, scheduling message with calendar icon, IconCircle style D for attachment.
Bottom sheet overlay triggered by attachment button. Uses IconCircle styles C, I, A, H, J, K for each action type. Camera and Photo Library use expo-image-picker.
AI messages use MessageBubble with distinct ai style (lightInfo bg), IconCircle style K (robot icon). Quick reply chips below AI messages. Uses api.ai.chat endpoint.
TypingIndicator component (3 animated dots). Push notification preview overlay. Read receipt states: single check (delivered), double check gray (delivered), double check blue (read). Uses Convex real-time subscriptions.
Schema, queries, mutations, and source files powering Messaging & Chat.