Track warranties, file claims, compare coverage, and manage renewals across all properties.
| Feature | Basic | Standard | Premium |
|---|---|---|---|
| HVAC | |||
| Plumbing | |||
| Electrical | |||
| Appliances | |||
| Water Heater | |||
| Washer/Dryer | |||
| Roof Leak | |||
| Pool/Spa | |||
| Garage Door | |||
| Deductible | $100 | $75 | $50 |
| Annual Cost | $349 /year |
$599 /year |
$899 /year |
| Feature | Basic | Standard | Premium |
|---|---|---|---|
| HVAC | |||
| Plumbing | |||
| Electrical | |||
| Appliances | |||
| Pool/Spa | |||
| Roof Leak | |||
| Deductible | $100 | $75 | $50 |
| Annual | $349 /year | $599 /year | $899 /year |
| Feature | Basic | Standard | Premium |
|---|---|---|---|
| HVAC | |||
| Plumbing | |||
| Electrical | |||
| Appliances | |||
| Pool/Spa | |||
| Roof Leak | |||
| Deductible | $100 | $75 | $50 |
| Annual | $349 /year | $599 /year | $899 /year |
warranties {
posterId: v.id("posterUsers")
propertyId: v.id("posterProperties")
providerId: v.id("warrantyProviders")
planType: v.string() // basic|standard|premium|custom
planName: v.string()
policyNumber: v.string()
startDate: v.number() // timestamp
endDate: v.number() // timestamp
coverageAmount: v.number()
deductible: v.number()
coveredItems: v.array(v.string())
exclusions: v.array(v.string())
documentId: v.optional(v.id("_storage"))
autoRenew: v.boolean()
status: v.string() // active|expiring|expired
}
warrantyClaims {
warrantyId: v.id("warranties")
posterId: v.id("posterUsers")
claimNumber: v.string()
category: v.string() // hvac|plumbing|electrical|appliance|roofing
description: v.string()
urgency: v.string() // low|medium|high
status: v.string() // filed|assigned|scheduled|in_progress|completed|denied
photoIds: v.array(v.id("_storage"))
contractorId: v.optional(v.id("contractorUsers"))
appointmentDate: v.optional(v.number())
coveredAmount: v.optional(v.number())
outOfPocket: v.optional(v.number())
resolutionNotes: v.optional(v.string())
preferredTimes: v.array(v.string())
}
warrantyProviders {
name: v.string()
plans: v.array(v.object({
type: v.string()
name: v.string()
annualCost: v.number()
deductible: v.number()
coveredItems: v.array(v.string())
}))
supportPhone: v.string()
supportEmail: v.string()
website: v.string()
}
// Hooks
useWarranties(propertyId?)
useWarranty(warrantyId)
useClaims(filters?)
useClaim(claimId)
useWarrantyRenewals()
useProviderPlans(providerId)
// Mutations
warranties.create(args)
warranties.update(warrantyId, args)
warranties.toggleAutoRenew(warrantyId)
warranties.renew(warrantyId)
warrantyClaims.create(args)
warrantyClaims.updateStatus(claimId, status)
// Queries
warranties.listByPoster(posterId)
warranties.getByProperty(propertyId)
warranties.getExpiring(days: 30)
warrantyClaims.listByClaim(warrantyId)
warrantyClaims.history(posterId, filters)