Five-stage pipeline command center for contractors. Accept leads, schedule visits, present estimates, and close deals in person.
InHomeLeadsScreen — Pipeline Command Center
useQuery(api.contractor.inHomeLeads.getByStatus) + useAction(purchaseWithPayment)
PurchasedStagePanel — Cards + TipCards (urgency/stale)
daysSincePurchase() drives contextual tip logic
ScheduledStagePanel — Timeline grouped by date
groupByDate() + formatTime() + isToday()/isTomorrow() helpers
InHomeConsultationScreen — Offered lead detail
purchaseWithPayment action + declineLead mutation
DMTab — Real-time messaging via Convex
useQuery(api.messaging.messages.listForJob) + useMutation(send)
CloseProposalSubTab — 3-step proposal wizard
serviceType toggle (one_time | recurring) + step indicator
EstimateBuilder — Good/Better/Best tiered pricing
createOption + updateOption + deleteOption mutations
HistoryStagePanel — Stats bar + history cards
useQuery(api.contractor.inHomeLeads.getStats) + recovery TipCards
app/(contractor)/(tabs)/(home)/in-home/index.tsx — Pipeline Command Center (5-stage)app/(contractor)/(tabs)/(home)/in-home/[id].tsx — Consultation Detail (4 tabs: DM, Schedule, Photos, Design & Close)app/(contractor)/(tabs)/(home)/in-home/estimate/[leadId].tsx — Estimate Builder screencomponents/estimates/EstimateBuilder.tsx — Good/Better/Best tier form componentcomponents/estimates/TierCard.tsx — Tier display cardcomponents/estimates/TierSelector.tsx — Tier selection UIapi.contractor.inHomeLeads.getByStatus — Pipeline counts per stageapi.contractor.inHomeLeads.list — Leads by status (offered, purchased, scheduled, completed, converted)api.contractor.inHomeLeads.get — Single lead detailapi.contractor.inHomeLeads.purchaseWithPayment — Accept lead (action + Stripe)api.contractor.inHomeLeads.decline — Decline leadapi.contractor.inHomeLeads.markScheduled — Transition to scheduledapi.contractor.inHomeLeads.markCompleted — Transition to completedapi.contractor.inHomeLeads.markConverted — Won — recover to platformapi.contractor.inHomeLeads.getStats — Monthly metricsnew (offered) — Card stack with Accept/Pass. Avatar + anonymized names.purchased — Cards with Message/Schedule buttons. Contextual TipCards for urgency and staleness.scheduled — Timeline groups (Today/Tomorrow/Date). Confirmed vs pending status.completed — Stats bar (Visits/Won/Win Rate) + history cards. Recovery TipCards for lost leads.won — Filtered view showing only converted jobs.useState<PipelineStage> — Active pipeline tab (new | purchased | scheduled | completed | won)useState<TabKey> — Detail view tabs (dm | schedule | photos | design)useQuery(autoAccept.getPreferences) — Auto-accept settingsuseQuery(autoAccept.getMonthlySpending) — Budget trackerapi.messaging.messages.listForJob — Real-time DM threadapi.estimates.options.* — Create, update, delete estimate tiersapi.estimates.queries.getSelectionForBid — Homeowner tier selection (prevents deletion of selected tier)TierFormData — tier, tierName, tierDescription, price, originalPrice, items[], isRecommended, estimatedDays, warrantyMonths, warrantyDescriptionLineItem — name, description, quantity, unitPrice, totalPrice, isIncludedTierType — good | better | bestisRecommended: truemarkConverted(jobAmount) — Recovers job to platform, triggers contract generation