When a canvasser taps "Create Lead from Zone" in the Storm Intel detail drawer,
router state carries the storm context into CreateLeadPage:
- CreateLeadPage reads stormSource from location.state; initialises the form with
city=Plano, state=TX, leadSource=Door Knock, urgency=high for significant/severe
storms, and a pre-filled notes field with zone name, hail size, and date
- Amber storm banner renders below the page header showing zone name, hail size,
and a note that urgency was auto-set; dismissible with X
- stormSource is saved on the lead object via the existing addLead spread
- LeadsListPage LeadCard shows an amber "Storm Zone" badge when lead.stormSource exists
- KanbanCard footer shows a compact amber "Storm" label for storm-sourced leads
Adds a new Storm Intel section to the sidebar and routes for ADMIN and OWNER roles.
- StormIntelPage: full-height layout with Leaflet map + storm polygon overlays,
severity-coded color system, horizontal filter bar (date range / severity / sort),
and a scrollable storm event list
- Storm detail drawer slides in from right with hail size, est. homes, days ago,
conversion window indicator (Hot Zone / Warm / Cold / Too Fresh), intel text,
and quick-action buttons (Create Lead, Open in Dispatch, Assign Canvassers stub)
- Clicking a storm card or map polygon zooms the map to that polygon and opens the drawer
- useStormEvents hook with USE_MOCK flag, date-range cutoff filter, type/severity filter,
sort by date or severity, and conversionWindow() helper
- api/storm-events.js: NWS api.weather.gov proxy (free, no auth needed), parses
GeoJSON polygons and hail size from alert descriptions
- MOCK_STORM_EVENTS: 7 realistic Plano TX storm events with accurate polygon coords
- Sidebar: CloudLightning "Storm Intel" entry added for OWNER and ADMIN nav