Source Files (10 screens)
app/(contractor)/(tabs)/settings/support.tsx
Contractor contact support — ticket type grid (5 types with icons), subject, description, submit
Component
app/(contractor)/(tabs)/settings/tickets.tsx
Contractor ticket list — status filter tabs (all/open/in_progress/resolved), ticket cards, FAB
Component
app/(contractor)/(tabs)/settings/ticket/[id].tsx
Contractor ticket detail — chat thread with message bubbles, reply input, close/reopen
Component
app/(poster)/settings/support.tsx
Poster contact support — deepBlue theme, poster-specific ticket types
Component
app/(poster)/settings/tickets.tsx
Poster ticket list — same structure as contractor, deepBlue primary
Component
app/(poster)/settings/ticket/[id].tsx
Poster ticket detail — chat thread, related job link, deepBlue bubbles
Component
app/support/index.tsx
Help Center — search, quick actions (ticket/chat/email), FAQs, topic grid
Component
app/support/ticket.tsx
Submit Ticket (shared) — category chips, subject, description, attachments, cancel/submit
Component
app/(admin)/support/index.tsx
Admin ticket list — 4 status tabs, search, sort dropdown, pagination, table/card responsive
Component
app/(admin)/support/[id].tsx
Admin ticket detail — user info, conversation, quick actions (assign/resolve/escalate), reply/internal toggle
Component
Convex Queries
features.support.getMyTickets
User's tickets with optional status filter
Query
features.support.getTicketDetail
Full ticket with messages thread, related job (poster)
Query
admin.support.listTickets
All tickets with status filter, pagination, status counts
Query
admin.support.getTicketDetail
Admin ticket detail with user info, messages, assigned admin
Query
admin.support.getTicketStats
Metrics: open count, urgent, new today, resolved 7d, avg resolution time, breakdowns
Query
Convex Mutations
features.support.submitTicket
Create ticket with subject, message, category. Returns ticketNumber.
Mutation
features.support.replyToTicket
Add user reply to thread, reopens if closed
Mutation
features.support.closeTicket
User closes their own ticket
Mutation
admin.support.addReply
Admin reply (public or internal note)
Mutation
admin.support.updateTicket
Update status, priority, admin notes
Mutation
admin.support.assignTicket
Assign ticket to current admin
Mutation
Schema
supportTickets
ticketNumber, subject, description, category, priority, status, userId, userEmail, userType, assignedToAdminId, adminNotes, createdAt, updatedAt
Schema
supportMessages
ticketId, message, senderType (user/admin), senderName, isInternal, createdAt
Schema