# Widget Icon Audit Report

Generated: 2026-04-21

Icons resolved by `_service_icon(service_name, trade)` in `build-preview-data.py`.

**Match type key:**
- `trade-specific` — matched inside a trade-specific branch (painter / electrician / roofer / hvac / plumber / septic)
- `generic-keyword` — matched by the generic fallback chain (install, repair, clean, etc.)
- `final-fallback` — hit the final `return "shield-check"` line; no keyword matched at all

---

## Summary by Trade

| Trade | Source | Service | Icon | Match Type | Missing? |
|-------|--------|---------|------|------------|----------|
| plumber | default | Emergency Plumbing | `alert-triangle` | 🟢 trade-specific |  |
| plumber | default | Water Heater Service | `flame` | 🟢 trade-specific |  |
| plumber | default | Drain Cleaning | `droplet` | 🟢 trade-specific |  |
| plumber | default | Fixture Install | `droplets` | 🟢 trade-specific |  |
| plumber | default | Sewer Line Repair | `wrench` | 🟢 trade-specific |  |
| plumber | default | Preventive Service | `clock` | 🟢 trade-specific |  |
| plumber | curated | Emergency Plumbing | `alert-triangle` | 🟢 trade-specific |  |
| plumber | curated | Water Heater Service | `flame` | 🟢 trade-specific |  |
| plumber | curated | Drain Cleaning | `droplet` | 🟢 trade-specific |  |
| plumber | curated | Fixture Install | `droplets` | 🟢 trade-specific |  |
| plumber | curated | Sewer Line Repair | `wrench` | 🟢 trade-specific |  |
| plumber | curated | Preventive Service | `clock` | 🟢 trade-specific |  |
| hvac | default | AC Install & Repair | `wind` | 🟢 trade-specific |  |
| hvac | default | Furnace Service | `flame` | 🟢 trade-specific |  |
| hvac | default | Heat Pump Service | `heat-pump` | 🟢 trade-specific |  |
| hvac | default | Duct Cleaning | `air-vent` | 🟢 trade-specific |  |
| hvac | default | Emergency HVAC | `alert-triangle` | 🟢 trade-specific |  |
| hvac | default | Maintenance Plans | `calendar-check` | 🟢 trade-specific |  |
| hvac | curated | AC Install & Repair | `wind` | 🟢 trade-specific |  |
| hvac | curated | Furnace Service | `flame` | 🟢 trade-specific |  |
| hvac | curated | Heat Pump Service | `heat-pump` | 🟢 trade-specific |  |
| hvac | curated | Duct Cleaning | `air-vent` | 🟢 trade-specific |  |
| hvac | curated | Emergency HVAC | `alert-triangle` | 🟢 trade-specific |  |
| hvac | curated | Maintenance Plans | `calendar-check` | 🟢 trade-specific |  |
| roofer | default | Roof Replacement | `home-alt` | 🟢 trade-specific |  |
| roofer | default | Roof Repair | `hammer` | 🟢 trade-specific |  |
| roofer | default | Gutter Systems | `droplets` | 🟢 trade-specific |  |
| roofer | default | Roof Inspection | `search` | 🟢 trade-specific |  |
| roofer | default | Emergency Service | `alert-triangle` | 🟢 trade-specific |  |
| roofer | default | Roof Maintenance | `shield-roof` | 🟢 trade-specific |  |
| electrician | default | Panel Upgrade | `zap` | 🟢 trade-specific |  |
| electrician | default | Wiring & Rewiring | `cable` | 🟢 trade-specific |  |
| electrician | default | Lighting Install | `lightbulb` | 🟢 trade-specific |  |
| electrician | default | Outlet & Switch Install | `plug` | 🟢 trade-specific |  |
| electrician | default | EV Charger Install | `ev-charger` | 🟢 trade-specific |  |
| electrician | default | Emergency Service | `alert-triangle` | 🟢 trade-specific |  |
| painter | default | Interior Painting | `paintbrush` | 🟢 trade-specific |  |
| painter | default | Exterior Painting | `paint-roller` | 🟢 trade-specific |  |
| painter | default | Cabinet Refinishing | `archive` | 🟢 trade-specific |  |
| painter | default | Pressure Washing | `droplet` | 🟢 trade-specific |  |
| painter | default | Color Consultation | `palette` | 🟢 trade-specific |  |
| painter | default | Commercial Painting | `building` | 🟢 trade-specific |  |
| septic | default | Septic Pumping | `droplet` | 🟢 trade-specific |  |
| septic | default | System Inspection | `search` | 🟢 trade-specific |  |
| septic | default | Drain Field Repair | `droplets` | 🟢 trade-specific |  |
| septic | default | Tank Installation | `home` | 🟢 trade-specific |  |
| septic | default | Emergency Service | `alert-triangle` | 🟢 trade-specific |  |
| septic | default | System Maintenance | `tool` | 🟢 trade-specific |  |
| septic | curated | Septic Pumping | `droplet` | 🟢 trade-specific |  |
| septic | curated | System Inspection | `search` | 🟢 trade-specific |  |
| septic | curated | Drain Field Repair | `droplets` | 🟢 trade-specific |  |
| septic | curated | Tank Installation | `home` | 🟢 trade-specific |  |
| septic | curated | Emergency Service | `alert-triangle` | 🟢 trade-specific |  |
| septic | curated | System Maintenance | `tool` | 🟢 trade-specific |  |
| cleaning_residential | default | Recurring Cleaning | `check-circle` | 🟢 trade-specific |  |
| cleaning_residential | default | Deep Cleaning | `sparkles` | 🟢 trade-specific |  |
| cleaning_residential | default | Move In/Out Cleaning | `truck` | 🟢 trade-specific |  |
| cleaning_residential | default | Post-Construction Cleanup | `hard-hat` | 🟢 trade-specific |  |
| cleaning_residential | default | Carpet & Upholstery | `sofa` | 🟢 trade-specific |  |
| cleaning_residential | default | Window Cleaning | `app-window` | 🟢 trade-specific |  |
| cleaning_commercial | default | Recurring Cleaning | `check-circle` | 🟢 trade-specific |  |
| cleaning_commercial | default | Deep Cleaning | `sparkles` | 🟢 trade-specific |  |
| cleaning_commercial | default | Move In/Out Cleaning | `truck` | 🟢 trade-specific |  |
| cleaning_commercial | default | Post-Construction Cleanup | `hard-hat` | 🟢 trade-specific |  |
| cleaning_commercial | default | Carpet & Upholstery | `sofa` | 🟢 trade-specific |  |
| cleaning_commercial | default | Window Cleaning | `app-window` | 🟢 trade-specific |  |
| cleaning_commercial | curated | Office Cleaning | `building` | 🟢 trade-specific |  |
| cleaning_commercial | curated | Floor Care | `layers` | 🟢 trade-specific |  |
| cleaning_commercial | curated | Carpet Cleaning | `spray-can` | 🟢 trade-specific |  |
| cleaning_commercial | curated | Restroom Sanitation | `droplets` | 🟢 trade-specific |  |
| cleaning_commercial | curated | Window Cleaning | `app-window` | 🟢 trade-specific |  |
| cleaning_commercial | curated | Green Cleaning | `leaf` | 🟢 trade-specific |  |
| concrete | default | Driveway Install | `shovel` | 🟢 trade-specific |  |
| concrete | default | Patio & Walkway | `grid-2x2` | 🟢 trade-specific |  |
| concrete | default | Foundation Work | `pickaxe` | 🟢 trade-specific |  |
| concrete | default | Decorative Concrete | `layers` | 🟢 trade-specific |  |
| concrete | default | Concrete Repair | `wrench` | 🟡 generic-keyword |  |
| concrete | default | Retaining Walls | `wall` | 🟢 trade-specific |  |
| concrete | curated | Driveway Install | `shovel` | 🟢 trade-specific |  |
| concrete | curated | Patio & Walkway | `grid-2x2` | 🟢 trade-specific |  |
| concrete | curated | Foundation Work | `pickaxe` | 🟢 trade-specific |  |
| concrete | curated | Decorative Concrete | `layers` | 🟢 trade-specific |  |
| concrete | curated | Concrete Repair | `wrench` | 🟡 generic-keyword |  |
| concrete | curated | Retaining Walls | `wall` | 🟢 trade-specific |  |
| landscaping | default | Professional Service | `tool` | 🟡 generic-keyword |  |
| landscaping | default | Consultation | `search` | 🟡 generic-keyword |  |
| landscaping | default | Installation | `home` | 🟡 generic-keyword |  |
| landscaping | default | Repair & Maintenance | `wrench` | 🟡 generic-keyword |  |
| landscaping | default | Emergency Service | `alert-triangle` | 🟡 generic-keyword |  |
| landscaping | default | Custom Solutions | `sparkles` | 🟢 trade-specific |  |
| landscaping | curated | Lawn Care | `leaf` | 🟢 trade-specific |  |
| landscaping | curated | Landscape Design | `ruler` | 🟢 trade-specific |  |
| landscaping | curated | Tree Service | `trees` | 🟢 trade-specific |  |
| landscaping | curated | Hardscape Install | `grid-2x2` | 🟢 trade-specific |  |
| landscaping | curated | Irrigation | `droplets` | 🟢 trade-specific |  |
| landscaping | curated | Seasonal Cleanup | `calendar-check` | 🟢 trade-specific |  |
| general | default | Professional Service | `shield-check` | 🔴 final-fallback |  |
| general | default | Consultation | `pencil-ruler` | 🟢 trade-specific |  |
| general | default | Installation | `home` | 🟡 generic-keyword |  |
| general | default | Repair & Maintenance | `wrench` | 🟡 generic-keyword |  |
| general | default | Emergency Service | `alert-triangle` | 🟡 generic-keyword |  |
| general | default | Custom Solutions | `ruler` | 🟢 trade-specific |  |
| general | curated | Home Renovation | `hammer` | 🟢 trade-specific |  |
| general | curated | Additions & Extensions | `building-2` | 🟢 trade-specific |  |
| general | curated | Kitchen Remodel | `utensils` | 🟢 trade-specific |  |
| general | curated | Bathroom Remodel | `shower-head` | 🟢 trade-specific |  |
| general | curated | Basement Finishing | `stairs` | 🟢 trade-specific |  |
| general | curated | New Construction | `hard-hat` | 🟢 trade-specific |  |

---

## Per-Trade Coverage

| Trade | Total | Trade-Specific | Generic-Keyword | Final-Fallback |
|-------|-------|----------------|-----------------|----------------|
| plumber | 12 | 12 | 0 | 0 |
| hvac | 12 | 12 | 0 | 0 |
| roofer | 6 | 6 | 0 | 0 |
| electrician | 6 | 6 | 0 | 0 |
| painter | 6 | 6 | 0 | 0 |
| septic | 12 | 12 | 0 | 0 |
| cleaning_residential | 6 | 6 | 0 | 0 |
| cleaning_commercial | 12 | 12 | 0 | 0 |
| concrete | 12 | 10 | 2 | 0 |
| landscaping | 12 | 7 | 5 | 0 |
| general | 12 | 8 | 3 | 1 |

---

## Missing Icons (silent bug — SVG_ICONS lookup fails)

None found. Every icon name returned by `_service_icon` exists in `SVG_ICONS`.

---

## Final-Fallback Services (icon rules need expansion)

These services hit the last `return "shield-check"` in `_service_icon` — no keyword matched.
`shield-check` is a weak visual for specific service names; adding keyword rules would improve relevance.

| Trade | Source | Service |
|-------|--------|---------|
| general | default | Professional Service |

---

## Trades With No Trade-Specific Icon Branch

Every service for these trades runs through the generic fallback chain.
Adding a dedicated branch in `_service_icon` would improve icon relevance.

All audited trades have at least one trade-specific icon rule.
